The course extends the methodologies, techniques and tools for developing algorithms and software in high performance computing environments by addressing the current issues of advanced computing tools for multi-core and GPU environments.
For laboratory activity, the course involves the use of C/C++ programming language and the CUDA environment of nVIDIA, for the development of parallel software that leverages the processing power of modern graphics processors.
Knowledge and understanding: the student must demonstrate knowledge of the fundamentals of parallel computing, the organization of the CUDA environment memory hierarchy, both hardware and software, and the parallelization strategies for some basic computational kernels of programming with and without the use of shared memory.
Ability to apply knowledge and understanding: the student must demonstrate how to use the strategies studied and the CUDA APIs to develop algorithms in a multicore/GPU environment by exploiting knowledge about parallelization issues related to high-performance and hybrid environment.
Autonomy of judgement: the student must be able to independently evaluate the results of a parallel algorithm by means of performance analysis in terms of gain, Gflops, and memory management.
Communication skills: the student should be able to illustrate a parallel algorithm and document its implementation in multicore/GPU environments.
Learning skills: the student must be able to update and deepen topics and specific applications of numerical computing, even accessing databases, on-line scientific software repositories and other tools available on the web.