Open main menu

CDOT Wiki β

Changes

Fall 2023 SPO600 Weekly Schedule

4,306 bytes added, 23 January
no edit summary
[[Category:Fall 2023 SPO600]]
This is the schedule and main index page for the [[SPO600]] ''Software Portability and Optimization'' course for Fall 2023.
<!-- {{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]]}} -->
|3||Sep 18||[[#Week 3 - Class I|6502 Math / Jumps, Branches, and Subroutines / Strings]]||[[#Week 3 - Class II|6502 String Input]]||[[#Week 3 Deliverables|Lab 3]]
|-
|4||Sep 25||[[#Week 4 - Class I|Building Code: Make and Makefiles / GNU Autotools/AutomakeCompiler Optimizations]]||[[#Week 4 - Class II|Compiler Options / Building Code: Compiler Options, Compiler OptimizationsMake and Makefiles / GNU Autotools/Automake]]||[[#Week 4 Deliverables|Lab 3, September blog posts]]
|-
|5||Oct 2||[[#Week 5 - Class I|Introduction to 64-bit Architectures and Assembly Language (x86_64 and AArch64)]]||[[#Week 5 - Class II|Memory on 64-bit Systems]]||[[#Week 5 Deliverables|Lab 4Blog]]
|-
|6||Oct 9||style="background: #f0f0ff"|(No class - Thanksgiving day)||[[#Week 6 - Class II|Algorithm Selection / In-line Assembler / SIMDProject Stage 1]]||[[#Week 6 Deliverables|Lab 5Work on Project Stage 1]]
|-
|7||Oct 16||[[#Week 7 - Class I|Exploring 64-bit Code]]||[[#Week 7 - Class II|SVE2Algorithm Selection / SIMD / Autovectorization]]||[[#Week 7 Deliverables|Wrap up lab 5Blog about Lab 4 and Project work]]
|-
|Reading||Oct 23||style="background: #f0f0ff" colspan="3" align="center"|Reading Week
|-
|8||Oct 30||[[#Week 8 - Class I|Optimization Trade-Offs / Algorithm Selection / Inline Assembler / SIMD]]||[[#Week 8 - Class II|Scalable Vector Extensions (SVESIMD /SVE2) via Inline Assembler and C Intrinsics/ SVE & SVE2]]||[[#Week 8 Deliverables|October blog postsLab 4]]
|-
|9||Nov 6||[[#Week 9 - Class I|GNU ifunc SVE & Project OverviewSVE2 / Compiler Options for Architecture Target]]||[[#Week 9 - Class II|Project DetailStage 2 Discussion]]||[[#Week 9 Deliverables|Blog about ifunc and your project work]]
|-
|10||Nov 13||[[#Week 10 - Class I|Project TipsMemory]]||[[#Week 10 - Class II|Advanced MemoryProfiling]]||[[#Week 10 Deliverables|Blog about project work]]
|-
|11||Nov 20||[[#Week 11 - Class I|Project Techniques]]||[[#Week 11 - Class II|Project Demo]]||[[#Week 11 Deliverables|Blog about project work]]
==== Video ====
* [https://web.microsoftstream.com/video/a4707dd6a4707Project Detaildd6-b0df-409b-8168-58ec21a06c1b 6502 Strings] - This video crosses over with the last part of the Monday lecture, but adds some additional detail.
* [https://web.microsoftstream.com/video/9caa5e8d-0f15-4b8b-9293-0151c82f77b1 6502 String Input] - How to create a custom input routine, plus a discussion of the Wordle example code
* [https://web.microsoftstream.com/video/f22220d6-9c87-4d23-aaf8-95f681756c41 6502 Emulator Assembler Directives] - A short video on using the 'define' and 'dcb' directives
* [https://web.microsoftstream.com/video/1775931c-b9eb-4b2a-a7bd-598d7d725853 6502 Example Code] - A short video on using the example code provided for the 6502 Emulator
==== Lab 3 ====
* [[6502 Math and Strings_LabStrings Lab]]
=== Week 3 Deliverables ===
# Complete [[6502 Math and Strings Lab|Lab 3]] and blog your results.
 
 
== Week 4 ==
 
=== Week 4 - Class I ===
* [[Compiler Optimizations]]
 
=== Week 4 - Class II ===
* [[Make and Makefiles]]
 
=== Week 4 Deliverables ===
* Finish [[6502 Math and Strings Lab|Lab 3]] and blog your results.
* Finalize your September blog posts. They are due at 11:59 pm on September 30.
 
 
== Week 5 ==
 
=== Week 5 - Class I ===
 
==== Resources ====
* [[Assembly Language]]
* [[ELF]] file format
* [[X86_64 Register and Instruction Quick Start]]
* [[Aarch64 Register and Instruction Quick Start]]
* ARM 64-bit CPU Instruction Set and Software Developer Manuals
* ARM Aarch64 documentation
** [http://developer.arm.com/ ARM Developer Information Centre]
*** [https://developer.arm.com/docs/den0024/latest ARM Cortex-A Series Programmer’s Guide for ARMv8-A]
*** The ''short'' guide to the ARMv8 instruction set: [https://www.element14.com/community/servlet/JiveServlet/previewBody/41836-102-1-229511/ARM.Reference_Manual.pdf ARMv8 Instruction Set Overview] ("ARM ISA Overview")
*** The ''long'' guide to the ARMv8 instruction set: [https://developer.arm.com/docs/ddi0487/latest/arm-architecture-reference-manual-armv8-for-armv8-a-architecture-profile ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile] ("ARM ARM")
** [https://developer.arm.com/docs/ihi0055/latest/procedure-call-standard-for-the-arm-64-bit-architecture Procedure Call Standard for the ARM 64-bit Architecture (AArch64)]
* x86_64 Documentation
** [https://developer.amd.com/resources/developer-guides-manuals/ AMD Developer Guide and Manuals](see the AMD64 Architecture section, particularly the ''AMD64 Architecture Programmer’s Manual Volume 3: General Purpose and System Instructions'')
** [http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html Intel Software Developers Manuals]
* GAS Manual - Using as, The GNU Assembler: https://sourceware.org/binutils/docs/as/
 
<!-- ==== Lab 4 ====
* [[SPO600 64-bit Assembly Language Lab]] (Lab 4) -->
 
=== Week 5 - Class II ===
 
==== Video ====
* [https://web.microsoftstream.com/video/1bcab47b-514a-4f23-bdd4-f73662a0673f Paged Memory Systems]
* [https://web.microsoftstream.com/video/880fb0f8-1084-457a-92e0-80f04ad62463 Memory Alignment and Performance]
 
<!-- ==== Lab 4 ====
* [[SPO600 64-bit Assembly Language Lab]] (Lab 4)
-->
=== Week 5 Deliverables ===
* Continue to blog
 
== Week 6 ==
 
=== Week 6 - Class I ===
* No class - Thanksgiving Monday
 
=== Week 6 - Class II ===
* [[Fall 2023 SPO600 Project]]
 
=== Week 6 Deliverables ===
* Work on and blog about your [[Fall 2023 SPO600 Project|Project Stage 1]]
 
== Week 7 ==
 
=== Week 7 - Class I ===
* Discussed and demonatrated building 64-bit assembly language software on x86_64 and AArch64 systems as well as disassembling compiled C code.
* See [[SPO600 64-bit Assembly Language Lab]] (Lab 4)
 
=== Week 7 - Class II ===
 
==== Video ====
* [https://web.microsoftstream.com/video/f60b92c6-9db3-4f57-b0b9-7c35ea0c054f SIMD] - Single Instruction, Multiple Data
 
=== Week 7 Deliverables ===
* Continue work on Project Stage 1 and start work on [[SPO600 64-bit Assembly Language Lab|Lab 4]]
* Blog!
 
== Week 8 ==
 
=== Week 8 - Class I ===
 
* Discussion of Algorithm Selection for Optimization
 
=== Week 8 - Class II ===
 
* Discussion of SIMD, including SVE and SVE2
** Demonstrated (not assigned - you can use this for reference but do not have to complete this lab): [[SPO600 SIMD Lab|SIMD Lab]]
* Discussion of ifunc (Indirect Functions)
** Demonstrated ifunc example code from this GitHub repo: https://github.com/ctyler/ifunc-aarch64-demo
** It is recommended that you build and become familiar with that code
 
=== Week 8 Deliverables ===
 
* Complete and blog about [[SPO600 64-bit Assembly Language Lab|Lab 4]]
 
== Week 9 ==
 
=== Week 9 - Class I ===
 
* Discussion of [[SVE2|Scalable Vector Extensions]]
** Demonstrated SVE example code from this GitHub repo: https://github.com/ctyler/sve2-test
** It is recommended that you build and become familiar with that code
 
=== Week 9 - Class II ===
 
* Discussion of [[Fall 2023 SPO600 Project#Stage 2|Project Stage 2]]
 
=== Week 9 Deliverables ===
* Work on and blog about your [[Fall 2023 SPO600 Project#Stage 2|Project Stage 2]]
 
== Week 10 ==
 
=== Week 10 - Class I ===
* Discussion of Memory concepts
 
=== Week 10 - Class II ===
* Discussion of [[Profiling]]
 
=== Week 10 Deliverables ===
* Work on and blog about your Project Stage 2
<!--
==== Video ====
* [https://web.microsoftstream.com/video/30fa002e-9e3d-41f6-95db-36832a8a509c Edited Class ClassAdvanced Memory Summary Video]
==== Reading Resources ====
=== Week 5 - Class I ===
 
==== Video ====
* [https://web.microsoftstream.com/video/fe744d30-f947-433d-b9f3-f5284e6fb2ad Class Summary Video]
==== Resources ====