Difference between revisions of "Fall 2023 SPO600 Project"

From CDOT Wiki
Jump to: navigation, search
(Created page with "Category:Fall 2023 SPO600 This page describes the SPO600 project in the Fall 2023 semester. == Overview == The autovectorizer in gcc (and other compilers, such as ll...")
 
(Stage 1)
Line 16: Line 16:
 
=== Stage 1 ===
 
=== Stage 1 ===
  
In this stage, you will build the GCC compiler and become familiar with  
+
In this stage, you will build the GCC compiler to become familiar with using and building the source code.
  
 
What is required:
 
What is required:
Line 25: Line 25:
 
* Ensure that you are building with an object tree outside of the source tree (see documentation for details)
 
* Ensure that you are building with an object tree outside of the source tree (see documentation for details)
 
* Blog about the experience, including the procedure you used, the time taken to perform the build, the impact of <code>-j''N''</code> options, and how you have proven that you have a working compiler.
 
* Blog about the experience, including the procedure you used, the time taken to perform the build, the impact of <code>-j''N''</code> options, and how you have proven that you have a working compiler.
 +
 +
Recommended:
 +
* Study and become familiar with the general structure of the code (how it is organized) - specifically, find the C/C++ compilers within the collection and examine how the files and directories are laid out, and become familiar with the coding standards used.
  
 
Due: Sunday, October 29, 11:59 pm
 
Due: Sunday, October 29, 11:59 pm

Revision as of 10:36, 11 October 2023

This page describes the SPO600 project in the Fall 2023 semester.

Overview

The autovectorizer in gcc (and other compilers, such as llvm/clang) has become very good -- to the point that it is automatically enabled at optimization level -O2 (standard optimization level) in recent versions of gcc.

However, there are many different implementations of SIMD instructions on various CPUs -- on 64-bit Arm systems, there's Advanced SIMD, SVE, and SVE2; on x86, there's SSE, SSE2, AVX, AVX512, and more. It is desirable to be able to build a single binary that takes optimal advantage of the available CPU capabilities.

There is a facility provided by the gcc compiler to allow the run-time selection of one of several different implementations of a function (or procedure or method or subroutine): ifunc. However, ifunc requires additional setup by the software developer.

The goal for this project is to incorporate a proof-of-concept work performed in a previous semester into the GCC compiler. This will enable the compiler to take code that meets specific conditions and automatically build it with ifunc capability to select between multiple, autovectorized versions of a function, to take advantage of the best SIMD implementation available on the CPU on which the code is running.

Project Stages

Stage 1

In this stage, you will build the GCC compiler to become familiar with using and building the source code.

What is required:

  • Obtain the source code for the current development version of GCC from the Git repository
  • Build the source code to produce a working compiler on each of two environments:
    1. An x86_64 system. You may use your own system, or the SPO600 server Portugal
    2. An AArch64 system. You may use your own system, or the SPO600 server Israel
  • Ensure that you are building with an object tree outside of the source tree (see documentation for details)
  • Blog about the experience, including the procedure you used, the time taken to perform the build, the impact of -jN options, and how you have proven that you have a working compiler.

Recommended:

  • Study and become familiar with the general structure of the code (how it is organized) - specifically, find the C/C++ compilers within the collection and examine how the files and directories are laid out, and become familiar with the coding standards used.

Due: Sunday, October 29, 11:59 pm

Mark: 15%

Resources