Changes

Jump to: navigation, search

Fall 2021 SPO600 Weekly Schedule

3,503 bytes added, 10:29, 29 January 2022
no edit summary
{{Admon/important|It's Alive!|This [[SPO600]] weekly schedule will be updated as the course proceeds - dates and content are subject to change. The cells in the summary table will be linked to relevant resources and labs as the course progresses.}}
<!-- {{Admon/important|Content being Updated|This page is in the process of being updated from a previous semester's content. It is not yet updated for the current semester. Do not rely on the accuracy of this information until this warning is removed.}} -->
<!-- {{Admon/obsolete|[[Current SPO600 Weekly Schedule]]}} -->
== Schedule Summary Table ==
|3||Sep 20||[[#Week 3 - Class I|Math, Assembly language conventions, and Examples]]||[[#Week 3 - Class II|Jumps, Branches, and Subroutines]]||[[#Week 3 Deliverables|Lab 3]]
|-
|4||Sep 27||[[#Week 4 - Class I|Characters, Strings, and Services]]||[[#Week 4 - Class II|6502 Math Lab (Lab 3)]]||[[#Week 4 Deliverables|September Blog PostsLabs]]
|-
|5||Oct 4||[[#Week 5 - Class I|Building Code]]||[[#Week 5 - Class II|6502 String Lab (Lab 4)]]||[[#Week 5 Deliverables|Lab 4]]
|-
|6||Oct 12||style="background:#f0f0ff"|[[#Week 6 - Class I|Thanksgiving Holiday]]||[[#Week 6 - Class II|x86_64 and AArch64 Assembly6502 Labs, Continued]]||[[#Week 6 Deliverables|Lab 5Blog Posts]]
|-
|7||Oct 18||[[#Week 7 - Class I|x86_64 and AArch64 Assembly / Compiler Optimizations / Project Selection]]||[[#Week 7 - Class II|Compilation Lab (Lab 6)Compiler Optimizations]]||[[#Week 7 Deliverables|Lab 6Blog Posts]]
|-
|Reading||Oct 25||style="background: #f0f0ff" colspan="5" align="center"|Reading Week
|-
|8||Nov 1||[[#Week 8 - Class I|Profilingx86_64 and AArch64]]||[[#Week 8 - Class II|Profiling Lab (Lab 7)x86_64 and AArch64]]||[[#Week 8 Deliverables|October Blog Posts / Project Stage 1]]
|-
|9||Nov 8||[[#Week 9 - Class I|Optimization through Algorithm SelectionBenchmarking and Profiling]]||[[#Week 9 - Class II|Compilation Lab (64-Bit Assembler Lab 6)]]||[[#Week 9 Deliverables|Lab 65]]
|-
|10||Nov 15||[[#Week 10 - Class I|Single Instruction, Multiple Data (SIMD) and VectorizationContinue work on Lab 5]]||[[#Week 10 - Class II|SIMD and Vectorization Lab (Lab 8)Discussion]]||[[#Week 10 Deliverables|Lab 85]]
|-
|11||Nov 22||[[#Week 11 - Class I|SIMD, Intrinsics and inline Assembler]]||[[#Week 11 - Class II|Intrinsics Lab (Lab 9)Discussion]]||[[#Week 11 Deliverables|Project Stage 21]]
|-
|12||Nov 29||[[#Week 12 - Class I|Project DiscussionMemory]]||[[#Week 12 - Class II|Project Discussion]]||[[#Week 12 Deliverables|Lab 9 / November Blog PostsProject work]]
|-
|13||Dec 6||[[#Week 13 - Class I|Project Discussion]]||[[#Week 13 - Class II|Lab 10]]||[[#Week 13 Deliverables|Lab 10Project Work]]
|-
|14||Dec 13||[[#Week 13 - Class I|Future Directions in Architecture]]||[[#Week 13 - Class II|Wrap-up Discussion]]||[[#Week 13 Deliverables|December Blog Posts / Project Stage 3Final blog posts and project work]]
|-
|}
===== Benchmarking and Profiling =====
 
Benchmarking involves testing software performance under controlled conditions so that the performance can be compared to other software, the same software operating on other types of computers, or so that the impact of a change to the software can be gauged.
===== Build Process =====
 
Building software is a complex task that many developers gloss over. The simple act of compiling a program invokes a process with five or more stages, including pre-proccessing, compiling, optimizing, assembling, and linking. However, a complex software system will have hundreds or even thousands of source files, as well as dozens or hundreds of build configuration options, auto configuration scripts (cmake, autotools), build scripts (such as Makefiles) to coordinate the process, test suites, and more.
* [[Computer Architecture]]
==== Introduction to Assembly Language on the 6502 Processor ====https://web.microsoftstream.com/video/6a645edd-3537-4910-843c-6d32f6678e79
To understand basic assembly/machine language concepts, we're going to start with a very simple processor: the [[6502]].
=== Week 5 - Class I ===
 
=== Videos ===
* [https://web.microsoftstream.com/video/d46f4457-70a1-4163-8465-3b5640495449 Compiling]
* [https://web.microsoftstream.com/video/5f3a96e8-5d01-412a-9922-3797ba824fe1 Building Software]
* [https://web.microsoftstream.com/video/466bc3a1-6729-434d-b51f-33d4fbb145c5 Make and Makefiles]
==== Building Code ====
* On a modern Linux system, this is usually the [[Executable and Linkable Format]] (ELF). Other executable format include COFF (UEFI, Unix/Older Linux/Windows) and its derivative PE (Windows). See the [[Executable and Linkable Format]] page for a list of tools that can be used to analyze ELF files.
=== Week 5 - Class III ===
* Continuing on with [[6502 Assembly Language Math Lab|Lab 3]] and then start on the [[6502 Assembly Language String Lab]] (Lab 4)
 
=== Week 5 Deliverables ===
* Blog about [[6502 Assembly Language Math Lab|Lab 3]] and [[6502 Assembly Language String Lab|Lab 4]]
 
== Week 6 ==
 
Monday of Week 6 was the Thanksgiving Holiday (no Class I this week).
 
=== Week 6 - Class II ===
* Continue with [[6502 Assembly Language Math Lab|Lab 3]] and [[6502 Assembly Language String Lab|Lab 4]]
 
== Week 7 ==
 
=== Week 7 - Class I ===
 
==== Videos ====
* [https://web.microsoftstream.com/video/ba0bc202-6478-41b0-a792-c159a98b3e0a Week 7 Announcements]
 
Delayed due to technical issues:
* Introduction to x86_64 and AArch64
 
=== Week 7 - Class II ===
* [[Compiler Optimizations]]
 
=== Week 7 Deliverables ===
* Submit the [https://forms.office.com/r/3Q3fjWda0K SPO600 Blog and SSH Information Form] (see the [[SPO600 Communication Tools|instructions]])
* Prepare your Blog for marking (by midnight on October 31)
** There should be 1-2 posts per week (i.e., at least 7)
** Blog about your labs and the material in this course, including your reflections
** Follow the [[Blog Guidelines]]
 
== Week 8 ==
 
=== Week 8 - Class I ===
 
==== Video ====
* [https://web.microsoftstream.com/video/4fd6a3f4-53b9-470c-9b22-3d6905b60cb9 x86_64 and AArch64 Architectures]
 
==== Reminder====
 
=== Week 8 - Class II ===
 
* Discussion and demo of x86_64 and AArch64 differences
 
=== Week 8 Deliverables ===
* Fill out the [https://forms.office.com/r/3Q3fjWda0K Blog and SSH Form] if you haven't already done so.
 
== Week 9 ==
 
=== Week 9 - Class I ===
 
==== Video ====
* [https://web.microsoftstream.com/video/8ca180ab-ad44-4905-8d39-d6c0cea87529 Benchmarking and Profiling]
 
=== Week 9 - Class II ===
 
* [[SPO600_64-bit_Assembler_Lab|64-Bit Assembler Lab (Lab 5)]]
 
== Week 10 ==
 
=== Week 10 - Class I ===
 
* No new videos - continue work on [[SPO600_64-bit_Assembler_Lab|Lab 5]]
 
=== Week 10 - Class II ===
 
* Quiz 2
* Discussion
 
== Week 11 ==
 
=== Week 11 - Class I ===
* Lab 6 / Project Stage 1
 
==== Videos ====
* [https://web.microsoftstream.com/video/2a82da88-bf5b-4112-953a-7408fbab30c1 Algorithm Selection & Profiling]
* [https://web.microsoftstream.com/video/f60b92c6-9db3-4f57-b0b9-7c35ea0c054f Single Instruction, Multiple Data (SIMD)]
* [https://web.microsoftstream.com/video/d208a737-7777-4b5a-b276-1b19dc78145c Inline Assembler]
* [https://web.microsoftstream.com/video/d56ec6ff-2c2c-40d6-8967-52d829e413cc Linux Tips for Benchmarking and Profiling] (older video)
 
 
 
=== Week 11 - Class II ===
 
* Quiz 3
* Discussion
* [[SPO600_Algorithm_Selection_Lab|Project Stage I (aka Lab 6)]]
 
=== Week 11 Deliverables ===
 
* [[SPO600_Algorithm_Selection_Lab|Blog about Project Stage 1]]
 
== Week 12 ==
 
=== Week 12 - Class I ===
 
==== Videos ====
* [https://web.microsoftstream.com/video/1bcab47b-514a-4f23-bdd4-f73662a0673f Paged Memory Systems] - Virtual memory, demand loading, shared pages, write protection, and challenges benchmarking memory performance (VSS and RSS)
* [https://web.microsoftstream.com/video/880fb0f8-1084-457a-92e0-80f04ad62463 Memory Alignment and Performance]
<!--
==== Auto-vectorization ====
* [https://gcc.gnu.org/projects/tree-ssa/vectorization.html Auto-Vectorization in GCC] - Main project page for the GCC auto-vectorizer.
* [http://locklessinc.com/articles/vectorize/ Auto-vectorization with gcc 4.7] - An excellent discussion of the capabilities and limitations of the GCC auto-vectorizer, intrinsics for providing hints to GCC, and other code pattern changes that can improve results. Note that there has been some improvement in the auto-vectorizer since this article arhttps://forms.office.com/Pages/DesignPage.aspx?lang=en-US&origin=OfficeDotCom&route=Start#Analysis=true&FormId=Svc06-dYi0qeWUM-TEEnVxA8PnpzsPpIhWTKX2RkUF1URUdYTzk2VjZXS1hJSDBOUUVLQzlFRFpCTy4uticle was written. '''This article is strongly recommended.'''
* [https://software.intel.com/sites/default/files/8c/a9/CompilerAutovectorizationGuide.pdf Intel (Auto)Vectorization Tutorial] - this deals with the Intel compiler (ICC) but the general technical discussion is valid for other compilers such as gcc and llvm
==== Inline Assembly Language ====

Navigation menu