1,885
edits
Changes
→Week 11
* [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 the code 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.