1,885
edits
Changes
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..."
[[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 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 and become familiar with
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:
*# An x86_64 system. You may use your own system, or the [[SPO600 Servers|SPO600 server]] Portugal
*# An AArch64 system. You may use your own system, or the [[SPO600 Servers|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 <code>-j''N''</code> options, and how you have proven that you have a working compiler.
Due: Sunday, October 29, 11:59 pm
Mark: 15%
== Resources ==
* [https://gcc.gnu.org/wiki/GettingStarted GCC Getting Started guide]
* [https://gcc.gnu.org/wiki/InstallingGCC GCC Installation (Building) guide]
* [[SPO600 Servers]] wiki page
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 and become familiar with
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:
*# An x86_64 system. You may use your own system, or the [[SPO600 Servers|SPO600 server]] Portugal
*# An AArch64 system. You may use your own system, or the [[SPO600 Servers|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 <code>-j''N''</code> options, and how you have proven that you have a working compiler.
Due: Sunday, October 29, 11:59 pm
Mark: 15%
== Resources ==
* [https://gcc.gnu.org/wiki/GettingStarted GCC Getting Started guide]
* [https://gcc.gnu.org/wiki/InstallingGCC GCC Installation (Building) guide]
* [[SPO600 Servers]] wiki page