CUDA vs OpenCL Introdução. - ppt carregar
CUDA vs OpenCL Introdução.
PublicouCatarina Crespo Alterado mais de 3 anos atrás
Apresentação em tema: "CUDA vs OpenCL Introdução."— Transcrição da apresentação:
1 CUDA vs OpenCL Introdução
2 Fornecedores CUDA: OpenCL: Nvidia AMD: Nvidia: suporta OpenCL 1.1
ATI Stream: CPUs e GPUs Nvidia: suporta OpenCL 1.1 Apple: Suporta placas Nvidia suporta CPUs Intel IBM: suporta CPUs PowerPC
3 Capacidades Funcionalidades de sincronização CUDA não são tão flexíveis como as do OpenCL. Em OpenCL, qualquer operação em fila de espera pode esperar por qualquer outro conjunto de operações em fila. No CUDA 3.2 foi introduziada a função StreamWaitEvent(), entretanto CUDA ainda não possuir capacidade de executar filas for a de ordem como o OpenCL. OpenCL suporta sincronização entre vários dispositivos.
4 Capacidades CUDA possui ferramentas mais maduras, incluindo um debugger e profiler, como também CUBLAS, CUFTT e outras. CUDA permite construtores C++ em modo GPU, OpenCL é baseado em C99. OpenCL pode enfileirar ponteiros de função de CPU em sua fila de comandos, CUDA não. OpenCL possui geração de código em tempo real embutido, para CUDA é necessário usar, por exemplo, PyCUDA.
5 OpenCL na Arquitetura CUDA
ELC139 - Cícero Augusto de Lara Pahins
6 Arquitetura CUDA A arquitetura CUDA é semelhante a arquitetura do OpenCL Um dispositivo CUDA é construído em torno de um conjunto escalonável de multithreaded Streaming Multiprocessors (SMs). Um multiprocessador corresponde a uma unidade de computação OpenCL.
7 Arquitetura CUDA Um multiprocessador executa uma thread CUDA para cada item de trabalho OpenCL e um bloco de thread para cada grupo de trabalho OpenCL. Um kernel é executado ao longo de um NDRange OpenCL por uma grade de blocos de threads.
8 Cada bloco de thread que executar um kernel é, portanto, unicamente identificado por seu ID de grupo de trabalho, e cada thread pelo seu ID global ou por uma combinação de seu ID local e ID do grupo de trabalho.
9 Arquitetura CUDA Quando um programa OpenCL no host invoca um kernel, os grupos de trabalho são enumerados e distribuídos como blocos de thread para o multiprocessadores com capacidade de execução disponíveis. As threads de um bloco de threads executam simultaneamente em um multiprocessador. A medida que blocos de threads terminam, novos blocos são lançados nos multiprocessadores desocupados.
10 Arquitetura CUDA - SIMT
SIMT: Single Instruction, Multiple Thread A arquitetura SIMT é semelhante a SIMD(Single Instruction, Multiple Data) na organização de vetores em que uma única instrução controla múltiplos elementos de processamento.
11 Arquitetura CUDA - SIMT
A organização SIMD de vetores expõe a largura SIMD para o software, enquanto que as instruções SIMT especificam a execução e o comportamento de de desvio de uma única thread. Em contraste com máquinas vetorias SIMD, a arquitetura SIMT permite aos programadores escreverem código paralelo a nível de thread para threads escalares independentes, bem como código de dado paralelo para threads coordenadas.
12 Arquitetura CUDA – Hardware Multithread
Cada multiprocessador possui um conjunto de registradores 32-bit que são particionados entre os warps*, e um cache de dados paralelo ou memória compartilhada que é particionado entre os blocos de threads e é utilizado para implementar a memória local do OpenCL. *Warps: grupo de 32 threads paralelas, criadas e gerenciadas por um multiprocessador
13 OpenCL na Arquitetura CUDA – Compilação: PTX
Kernels escritos em C OpenCL são compilados em PTX(Parallel Thread Execution), que é o conjunto de instruções CUDA. Exemplo: A representação intermediára PTX pode ser obitida pela chamada clGetProgramInfo() with CL_PROGRAM_BINARIES
14 OpenCL na Arquitetura CUDA – Compilação: Volatilidade
Somente após a execução de barrier(), mem_fence(), read_mem_fence() ou write_mem_fence() são feitas escritas para uma memória global ou compartilhada de uma thread garantindo ser visível para outras threads.
15 OpenCL na Arquitetura CUDA – Compilação: Volatilidade
Exemplo: A primeira referência a myArray[tid] compila em uma instrução de leitura global ou compartilhada, mas a segunda referência não, já que o compilador simplesmente reutiliza o resultado da primeira
16 OpenCL na Arquitetura CUDA – Troca de Modo
GPUs dedicam memória para a superfície primária, a qual é usada para atualizar a saída do dispositivo de visualização. Trocas de Modo são executadas, por exemplo, quando o usuário muda a resolução ou bit depth da visualização, ou quando aplicações gráficas são exibidas.
17 OpenCL na Arquitetura CUDA – Troca de Modo
Se uma Troca de Modo aumentar o tamanho de memória necessária para a superfície primária o sistema irá canabalizar mémoria alocada por aplicações OpenCL. Isso resultada em uma chamada ao runtime do OpenCL para falhar e retornar um erro de contexto inválido.
18 Referências Nvidia Compute – PTX: Parallel Thread Execution ISA Version 2.0 Nvidia OpenCL Programming Guide for the CUDA Architecture GPU Computing with MATLAB® & C/C++ [blog.accelereyes.com/blog/2010/05/10/nvidia-fermi-cuda-and-opencl/] CUDA vs OpenCL: Which should I use? [wiki.tiker.net/CudaVsOpenCL]