SC 240 Handout 2 Topics by week: Week 1: Overview of course goals and timetable Architectural components Functional units Iterations and looping Software pipelining Lab 1: Complex vector multiplication benchmarking (introduction to computers used in the course.) Week 2: Operation counting and performance prediction VLIW programming paradigm - horizontal microcode Lab 2: Complex vector multiplication in horizontal microcode (i860 programming) Week 3: Memory hierarchies % Registers - scalar and vector % Memory banks % Cache % Paging Algorithm and data layout considerations Lab 3: Matrix-vector multiplication - blas primitives & block methods Week 4: Optimizing compilers % Dependency analysis % Instruction reordering % Loop unrolling % Loop interchange % Strength reduction % Hoisting and sinking Compiler directives Lab 4: Tridiagonal equations: overcoming recursion dependencies Week 5: Vectorization SIMD parallelism Strip mining Vectorizing conditional calculations Indirect addressing Lab 5: Vectorizing Quicksort Week 6: RISC architectures Hardware optimization support RISC compilers Superscalar designs Lab 6: Matrix-matrix multiplication Week 7: Massively parallel computing Data parallel model Alphabet soups Performance analysis Load balancing Lab 7: On-processor optimization: Complex multiplication (CM-5) Week 8: Performance versus Portability When is assembly programming indicated? Variant or alternative algorithms. Lab 8: FFT's Week 9: I/O performance Blocking Sequential and random access RAID systems Out-of-core calculations Lab 9: 3D finite-differences Week 10: Future trends in High Performance Computing Architectures Languages and compilers Network computing