Changes

Jump to: navigation, search

Winter 2020 SPO600 Weekly Schedule

7,471 bytes added, 14:30, 31 August 2021
no edit summary
[[Category:Winter 2020 SPO600]]
This is the schedule and main index page for the [[SPO600]] ''Software Portability and Optimization'' course for Winter 2020.
<!-- {{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 ==
|4||Jan 27||[[#Week 4 - Class I|Continue with Lab 3]]||[[#Week 4 - Class II|System routines / Building Code]]||[[#Week 4 Deliverables|Lab 3]]
|-
|5||Feb 03||[[#Week 5 - Class I|6502 String Lab (Lab 4)]]||[[#Week 5 - Class II|Introduction to x86_64 and AArch64 architectures]]||[[#Week 5 Deliverables|Lab 54]]
|-
|6||Feb 10||[[#Week 6 - Class I|64-bit Assembly Language 6502 String Lab (Lab 54)Continued]]||[[#Week 6 - Class II|Profilingx86_64 and AArch64 Assembly]]||[[#Week 6 Deliverables|Lab 64]]
|-
|7||Feb 17||[[style="background:#Week 7 - Class If0f0ff"|Profiling Lab (Lab 7)]]Family Day Holiday||[[#Week 7 - Class II|Project Stage 164-bit Assembly Language Lab (Lab 5)]]||[[#Week 7 Deliverables|Lab 7, Project Profiling5]]
|-
|Reading||Feb 24||style="background: #f0f0ff" colspan="5" align="center"|Reading Week
|-
|8||Mar 02||[[#Week 8 - Class I|Algorithm Selection Lab (Lab 8)5 Continued]]||[[#Week 8 - Class II|SIMD and VectorizationProjects / Changing an Algorithm]]||[[#Week 8 Deliverables|Lab 5, Project Stage 1 dueBlogs]]
|-
|9||Mar 09||[[#Week 9 - Class I|SIMD Algorithm Selection Lab (Lab 96)]]||[[#Week 9 - Class II|Identifying Optimization OpportunitiesCompiler Optimizations / SIMD and Vectorization]]||[[#Week 9 Deliverables|Lab 96]]
|-
|10Switchover||Mar 16||[[style="background: #Week 10 - Class I|Atomics]]||[[#Week 10 - Class IIf0f0ff" colspan="5" align="center"|Project Discussion]]||[[#Online Switchover Week 10 Deliverables|Project Work]]
|-
|1110||Mar 23||[[#Week 11 10 - Class I|Online Startup / Project HackingStage 1]]||[[#Week 11 10 - Class II|Memory Ordering, Synchronization, and BarriersReview for Stage 1]]||[[#Week 11 10 Deliverables|Project Stage 2 dueBlogging]]
|-
|1211||Mar 30||[[#Week 12 11 - Class I|ifunc<span style="background: #ffff00;">Quiz</span> / Profiling]]||[[#Week 12 11 - Class II|Emerging directions in system architectureSIMD Part 1 - Autovectorization]]||[[#Week 12 11 Deliverables|Project WorkStage 1 due April 1, 11:59 pm / Blog about your project as you start Stage 2]]
|-
|12||Apr 06||[[#Week 12 - Class I|SIMD Part 2 - Intrinsics and Inline Assembler]]||style="background:#f0f0ff"|Good Friday Holiday||[[#Week 12 Deliverables|Project Stage 2 due]]|-|13||Apr 0613||[[#Week 13 - Class I|Demos<span style="background: #ffff00;">Quiz</span> / Project Discussion]]||[[#Week 13 - Class II|Course wrapWrap-up discussionDiscussion]]||[[#Week 13 Deliverables|Project Stage 3 dueMonday, April 20, 11:59 pm (Firm!)]]
|-
|}
=== Week 5 Deliverables ===
* [[6502 Assembly Language String Lab|Lab 4 Results]]
 
== Week 6 ==
 
=== Week 6 - Class I ===
* [[6502 Assembly Language String Lab]] (Lab 4) - Continued
 
=== Week 6 - Class II ===
* x86_64 and AArch64 Assembler
** See [[Assembler Basics]]
 
=== Week 6 Deliverables ===
* Blog your [[6502 Assembly Language String Lab|Lab 4]] results
 
== Week 7 ==
 
=== Week 7 - Class I ===
* No class - Family Day Holiday
 
=== Week 7 - Class II ===
* [[SPO600 64-bit Assembler Lab]] (Lab 5)
 
=== Week 7 Deliverables ===
* Blog your [[SPO600 64-bit Assembler Lab|Lab 5]] results
 
== Week 8 ==
 
=== Week 8 - Class I ===
* [[SPO600 64-bit Assembler Lab|Lab 5]] Continued
 
=== Week 8 - Class II ===
* [[Winter 2020 SPO600 Project|Course Projects]]
** Building software
** Benchmarking
 
* Changing an Algorithm to Improve Performance
** Audio volume scaling problem
*** PCM Audio is represented as 16-bit signed integer samples
*** To reduce the volume of the audio, it can be scaled by a factor from 0.000 (silence) to 1.000 (original volume).
*** This is a common operation on mobile and multimedia devices.
*** What is the best way to do this?
** Approach 1: Naive Implementation - Multiply each sample by the scaling factor (this involves multiplying each integer sample by a floating-point number, then converting the result back to an integer)
** Approach 2: Lookup Table - Pre-calculate all possible values multiplied by the scaling factor, then look up the new value for each original sample value
** Approach 3: Fixed-point math - Use fixed-point math rather than floating-point math
** Approach 4: Vector fixed-point math - Use SIMD instructions to do multiple fixed-point operations in parallel
 
=== Week 8 Deliverables ===
* Blog your [[SPO600 64-bit Assembler Lab|Lab 5]] results.
* '''Reminder:''' Blogs are due for February this Sunday (March 8, 11:59 pm).
 
== Week 9 ==
 
=== Week 9 - Class I ===
* [[SPO600 Algorithm Selection Lab]] (Lab 6)
 
=== Week 9 - Class II ===[[Winter 2020 SPO600 Project|project]]
* [[Compiler Optimizations]]
* SIMD and Vectorization
** [[SPO600 Vectorization Lab|Optional vectorization lab]]
 
=== Week 9 - Deliverables ===
* Blog about [[SPO600 Algorithm Selection Lab|Lab 6]] and your Project
 
== Week 10 ==
 
=== Week 10 - Class I ===
* [https://youtu.be/DCp8oghdTfU Video - March 23]
* Focus this week: Complete Stage 1 of your [[Winter 2020 SPO600 Project|Course Projects]]
 
=== Drop-in Online Discussion Sessions ===
* Tuesday to Friday (March 24-27) from 9-10 AM
* Online at https://whereby.com/ctyler
** There is a maximum of 12 people in the room at a time. I recommend dropping by one or twice a week with your questions.
** If 9-10 am cannot work for you, email me to discuss this.
 
=== Week 10 - Class II ===
* [https://youtu.be/M-5IizEwkfY Video - March 27: Review of material for Stage 1]
* Stage 1 due date '''extended''' to Wednesday, April 1, 11:59 pm
 
=== Week 10 - Deliverables ===
* Blog about your [[Winter 2020 SPO600 Project|project]]. Project Stage 1 is due next Wednesday.
 
== Week 11 ==
 
=== Week 11 - Class I ===
* Quiz #4 - Online in Blackboard
* '''Optional video:''' [https://youtu.be/CdyERanIxmI Building Software] - This video provides a review of building an open-source software package from either a source archive (zip or tarball) or from a code repository (such as a <code>git</code> repository).
* [https://youtu.be/Hip1KtYZKE0 Video - March 30: Profiling Software]
** Profiling with <code>gprof</code> and <code>perf</code>
 
=== Week 11 - Class II ===
* [https://youtu.be/EIPbufXhiQs Video - April 3: SIMD and Auto-vectorization]
* SIMD-Autovectorization Resources
** [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 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
 
=== Week 11 Deliverables ===
* [[Winter 2020 SPO600 Project|Project Stage 1] due Wednesday, April 1 (yes, really) at 11:59 pm
* Blog about your project as you continue into Stage 2
** March posts are due on Monday, April 6 at 11:59 pm.
 
== Week 12 ==
 
=== Week 12 - Class I ===
* [https://youtu.be/76rtxPozPJI Video - April 6: SIMD, Inline Assembler, and Compiler Intrinsics]
** [[Inline Assembly Language]]
** [[Compiler Intrinsics]]
 
* Retired SPO600 Labs - These labs are not being used this semester but may be useful for reference. The software in these labs was used in the video for this week.
** [[SPO600 SIMD Lab]]
** [[SPO600 Inline Assembler Lab]]
 
=== Week 12 - Class II ===
* No class - Good Friday
 
=== Resources ===
==== 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 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 ====
* [[Inline Assembly Language]]
* [http://developer.arm.com ARM Developer Information Centre]
** [https://developer.arm.com/products/architecture/a-profile/docs/den0024/a 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")
==== C Intrinsics - AArch64 SIMD ====
* [https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics ARM NEON Intrinsics Reference]
* [https://gcc.gnu.org/onlinedocs/gcc/ARM-C-Language-Extensions-_0028ACLE_0029.html GCC ARM C Language Extensions]
 
== Week 13 ==
 
=== Week 13 - Class I ===
* [https://youtu.be/GLzAVWW8dEo Video - April 16: Project Stage 3]
 
=== Week 13 - Class II ===
* Wrap-up Session
 
<BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/>

Navigation menu