Changes

Jump to: navigation, search

Winter 2022 SPO600 Weekly Schedule

3,903 bytes added, 03:23, 25 April 2022
Week 14 - Class I
|11||Mar 28||[[#Week 11 - Class I|Project Discussion 3]]||[[#Week 11 - Class II|SVE2 Examples]]||[[#Week 11 Deliverables|Project Stage 1 (March 28), March Blog Posts (March 31)]]
|-
|12||Apr 04||[[#Week 12 - Class I|TBADemo/discussion of SVE 2 Examples]]||[[#Week 12 - Class II|Memory - Cache, NUMA, Observability, BarriersSVE2 Examples Part 2]]||[[#Week 12 Deliverables|Blog about project work]]
|-
|13||Apr 11||[[#Week 13 - Class I|Project DiscussionMemory Systems]]||style="background: #f0f0ff"|Good Friday||[[#Week 13 Deliverables|Blog about project work]]
|-
|14||Apr 18||[[#Week 14 - Class I|Future Directions in Architecture]]||[[#Week 14 - Class II|Project Stage 3]]||[[#Week 14 Deliverables|Project Stage 3, April Blog Posts]]
==== Videos ====
* [https://web.microsoftstream.com/video/5f633a25-c478-4aab-af90-c447d581a631 Project Stage Discussion 3] - An edited recording of the March 28, 2022 SPO600 class.
* [https://web.microsoftstream.com/video/b197e528-3385-41ef-b648-7041d054c0d2 Benchmarking and Profiling] - An optional video that may be useful to some projects in Stage 2. This video discusses benchmarking (overall program performance analysis) and profiling (per-function/per-method performance analysis) principles and techniques. (This is an edited version of a previous-semester video. There are a couple of small audio and video glitches in the recording).
==== Reading ====
* [https://locklessinc.com/articles/vectorize/ Auto-vectorization with GCC 4.7] - Although based on an earlier version of GCC, (and a number of new features have been added to the GCC autovectorizer since this article was written), it discusses some of the techniques and code adjustments that may be required to get the GCC compiler to vectorize code. Note that the <code>-fopt-info-vec-all</code> or <code>-fopt-info-vec-missed</code> options are useful in conjunction with this technique, as they will cause the compiler to emit information about the vectorization decisions that it is making.* [https://www.phoronix.com/scan.php?page=news_item&px=GCC-12-Auto-Vec-O2 GCC 12 Enables Auto-Vectorization for -O2 Optimization Level] - a short news article from October 2021 regarding the [https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=2b8453c401b699ed93c085d0413ab4b5030bcdb8 commit] that added autovectorization to the <code>-O2</code> optimization level, which is the default for many projects. GCC12 is expected to ship in April 2022, according to a recent [https://gcc.gnu.org/pipermail/gcc/2022-January/238136.html status update]. === Week 11 - Class II === ==== SVE2 Demonstration ====* Code available here: https://github.com/ctyler/sve2-test* This is an implementation of a very simple program which takes an image file, adjusts the red/green/blue channels of that file, and then writes an output file. Each channel is adjusted by a factor in the range 0.0 to 2.0 (with saturation).* The image adjustment is performed in the function <code>adjust_channels()</code> in the file <code>adjust_channels.c</code>. There are three implementations:*# A basic (naive) implementation in C. Although this is a very basic implementation, it is potentially subject to autovectorization.*# An implementation using inline assembler for SVE2.*# (Future) An implementation using ACLE compile intrinsics.* The implementation built is dependent on the value of the ADJUST_CHANNEL_IMPLEMENTATION macro.* The provided Makefile will build two versions of the binary, one using implementation 1 (named <code>image_adjust1</code>) and one using implementation 2 (named <code>image_adjust2</code>), and it will run through 3 tests with each binary. The tests use the input image file <code>tests/input/bree.jpg</code> (a picture of a cat) and place the output in the files <code>tests/output/bree[12][abc].jpg</code>. The output files are processed with adjustment factors of 0.5/0.5/0.5, 1.0/1.0/1.0, and 2.0/2.0/2.0.* '''Please examine, build, and test the code, compare the implementations, and note how it works - there are extensive comments in the code, especially for implementation 2.'''* Your observations about the code might make a good blog post!
=== Week 11 - Deliverables ===
* Blog about your project work.
 
 
== Week 12 ==
 
=== Week 12 - Class I ===
 
==== Video ====
* [https://web.microsoftstream.com/video/00172f3b-f0cb-486f-bf15-42c73e8916b4 SVE2 Examples] - Summary video of the SPO600 class on Tuesday, April 5.
 
==== SVE2 Demonstration ====
* The SVE2 [https://github.com/ctyler/sve2-test example code] has been extended with an additional inline assembley implementation, plus an ACLE implementation.
 
=== Week 12 - Class II ===
 
==== Video ====
* [https://web.microsoftstream.com/video/11def15f-20df-41b5-84f0-6fd5bd96bc2a SVE2 Examples - Part 2] - Part 2 of a look at the [https://github.com/ctyler/sve2-test example code] - A discussion of the bug that existed in the ACLE/intrinsics code discussed in the last class, plus an examination of the disassembly of the naive/autovectorized version of the code (implementation #1).
 
=== Week 12 - Deliverables ===
* Continue to blog about your project work
* Project Stage 2 will be due on '''Wednesday, April 13''' (11:59 pm EDT).
 
== Week 13 ==
 
=== Week 13 - Class I ===
 
==== Video ====
* [https://web.microsoftstream.com/video/274ee2d2-a19c-4d12-8c1b-78141cfb4566 Memory Systems] summary video
 
=== Week 13 - Class II ===
* Good Friday - no class
 
=== Week 13 Deliverables ===
* Continue to post about your project.
 
== Week 14 ==
 
=== Week 14 - Class I ===
 
==== Video ====
 
* (Not available)
 
=== Week 14 - Class II ===
 
=== Week 14 Deliverables ===
* [[Winter_2022_SPO600_Project|Project Stage 2]] due Monday April 18 (by 11:59 pm)
* [[Winter_2022_SPO600_Project|Project Stage 3]] due Friday April 22 (by 11:59 pm)
* April blog posts due Friday April 22 (by 11:59 pm)

Navigation menu