Open main menu

CDOT Wiki β

Changes

Fall 2022 SPO600 Weekly Schedule

1,718 bytes added, 16:25, 9 November 2022
no edit summary
|8||Oct 31||[[#Week 8 - Class I|Optimization Trade-Offs / Algorithm Selection / Inline Assembler / SIMD]]||[[#Week 8 - Class II|Scalable Vector Extensions (SVE/SVE2) via Inline Assembler and C Intrinsics]]||[[#Week 8 Deliverables|October blog posts]]
|-
|9||Nov 7||[[#Week 9 - Class I|iFunc & Project DiscussionOverview]]||[[#Week 9 - Class II|Demo/discussion of SVE2 ExamplesProject Detail]]||[[#Week 9 Deliverables|Blog about project work]]
|-
|10||Nov 14||[[#Week 10 - Class I|Project Discussion]]||[[#Week 10 - Class II|Memory Barriers]]||[[#Week 10 Deliverables|Blog about project work]]
* Include blogging on SVE/SVE
* The second group of blog posts is due on or before this Sunday (November 6, 11:59 pm)
 
== Week 9 ==
 
=== Week 9 - Class I ===
 
==== Video ====
* Will be posted after editing
 
==== iFunc ====
 
GNU iFunc is a facility for handling indirect functions. The basic premise is that you prototype the function to be called, add the <code>ifunc</code> attribute to that prototype, and provide the name of a resolver function. The resolver function is called at program initialization, and returns a pointer to the function to be executed when the function referenced in the prototype is called. The resolver typically picks one of several implementations based on the capabilities of the machine on which the code is running; for example, it could return a pointer to a non-SVE, SVE, or SVE2 implementation of a function based on cpu capabilities (on an Aarch64 system) or it could return a pointer to an SSE, SSE2, AVX, or AVX512 implementation (on an x86_64 system).
 
There is a [https://github.com/ctyler/ifunc-aarch64-demo GitHub repository] available with example iFunc code -- please clone this to [[SPO600 Servers#AArch64:_israel.cdot.systems|israel.cdot.systems]] and build and test the code there. You should see different results if you run the output executable directly (<code>./ifunc-test</code>) and run it through the qemu-aarch64 tool, which will emultate SVE2 capabilities (<code>qemu-aarch64 ./ifunc-test</code>). Make sure you understand how the code works.
 
==== Reading/Resources ====
 
* [https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Common-Function-Attributes.html#index-ifunc-function-attribute GNU iFunc attribute in GCC manual]
* [https://sourceware.org/glibc/wiki/GNU_IFUNC iFunc on the glibc wiki]
 
=== Week 9 Deliverables ===
* Investigate the iFunc example code
* Blog about your investigation
 
<!-- Memory System Design - Paging ; Memory - Cache/Numa ; Memory - Observability, Barriers -->