This chapter highlights the fundamental tools and techniques for accelerating applications written in C/C++ languages to run on massively parallel architectures with CUDA. With CUDA, developers are able to dramatically accelerate the computation of applications on GPU (graphic processing unit) architectures. The Chapter has the following learning objectives: (I) writing parallel code to run on the GPU; (II) Expose and express data and instruction level parallelism in C/C++ applications using CUDA; (III) Use CUDAmanaged memory and optimize memory migration using asynchronous prefetching; and (IV) Use concurrent streams for instruction-level parallelism.
ResumoEste capítulo destaca as ferramentas e técnicas fundamentais para acelerar aplicac ¸ões escritas em linguagens C/C++ para execuc ¸ão em arquiteturas massivamente paralelas com CUDA. Com CUDA, desenvolvedores são capazes de acelerar dramaticamente a computac ¸ão de aplicac ¸ões em arquiteturas GPU (graphic processing unit). O Capítulo tem os seguintes objetivos de aprendizagem: (I) escrever código paralelo para ser executado na GPU; (II) Expor e expressar paralelismo no nível de dados e instruc ¸ões em aplicac ¸ões C/C++ usando CUDA; (III) Utilizar o CUDA-managed memory e otimizar a migrac ¸ão de memória usando prefetching assíncrono; e (IV) Usar streams (fluxo de instruc ¸ões) concorrentes para paralelismo no nível de instruc ¸ões.
Introduc ¸ãoSistemas computacionais de alto desempenho são amplamente utilizados para executar aplicac ¸ões de diversos domínios, que envolvem computac ¸ão financeira, aplicac ¸ões médicas, processamento de vídeo e imagem, entre outros. Esses sistemas geralmente são baseados em arquiteturas multi-core e many-core com memória e dispositivos de