Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Introdução à programação CUDA
Exercícios
1. O termo GPU foi criado pela Sony, empresa que desenvolve o PlayStation. Esse
termo se referia ao chip gráfico para cálculos do console.
Nas GPUs com suporte a CUDA, a quantidade de CUDA cores se refere a que?
Você acertou!
A. À capacidade de paralelização.
A quantidade de CUDA cores é referente à capacidade de paralelização. Quanto mais
CUDA cores a GPU tiver, maior será o número de operações que podem ser feitas em
paralelo, assim, acelerando a execução das aplicações. A velocidade de processamento
sequencial é a de frequência clock. A capacidade de armazenamento é relacionada com
o host. A velocidade  de  acesso  à  memória  e   a banda  disponível   no  barramento   têm
relação com as memórias da GPU.
2. Placas gráficas (GPUs) eram utilizadas apenas para melhorar os efeitos visuais
de jogos e aplicações multimídia. Entretanto, em meados de 2008, pesquisadores
perceberam que os recursos disponíveis nessas arquiteturas de computadores
poderiam ser utilizados para processamento de propósito geral.
As aplicações que obtêm os maiores ganhos de desempenho utilizando essas
placas apresentam qual tipo de computação?
Resposta correta.
C. Cálculos simples e repetitivos.
Cálculos simples e repetitivos são os que obtêm os melhores ganhos em GPUs. As GPUs
possuem  milhares   de   núcleos   de   execução,   entretanto,   esses são  menos   poderosos
individualmente do que os de uma CPU. Assim, cálculos simples e repetitivos são os que
melhor tiram proveito dessas placas. Aplicações com pouco uso de multitarefa ou com
cálculos complexos em ordem não são paralelas o suficiente para ganhar desempenho
utilizando   GPUs.  Aplicações   que   transferem  muitos   dados   ou   acessam   a   memória
principal  podem até ser  paralelas,  mas esses comportamentos  serão gargalos,  o  que
diminuirá consideravelmente o desempenho na GPU.
3. Durante a implementação de uma aplicação em CUDA, o desenvolvedor decide
trechos de código que devem ser executados na CPU e trechos que devem ser
executados na GPU. Na CPU, esses trechos são chamados de função. Por outro
lado, na GPU, chamam-se kernel. Outra diferença fundamental é que na GPU, no
momento da chamada do kernel, dois parâmetros de execução devem ser
informados.
Quais são esses parâmetros?
Você acertou!
D. Número de blocos e de threads por bloco.
Os parâmetros da chamada do kernel são o número de blocos e o número de threads por
bloco. Esses dois parâmetros indicam quantos conjuntos de computações serão feitos em
paralelo,   dividindo-se   entre   os   núcleos   de   execução   da  GPU   de   forma otimizada. O
número de CUDA cores é a quantidade de núcleos da GPU, o qual não foi solicitado. A
memória global é definida pela desenvolvedora da GPU. O número de blocos é um dos
parâmetros, mas o número de CUDA cores e a memória principal não são. 
4. O processador e a GPU possuem cada um memórias próprias, as quais são
comumente chamadas de memória do host e memória do device.
Na linguagem Python, com Numba, para copiar os dados do host para o device,
deve-se utilizar o comando:
Você acertou!
D. to_device.
A alternativa correta é to_device. Esse é o método que deve ser chamado quando há um
objeto na memória da CPU e se deseja copiá-lo para a memória da GPU. O comando
syncthreads cria uma barreira que sincroniza as threads dentro de um bloco. O comando
copy_to_host   copia   os   dados   do device para   o host.   Os   comandos   blockDim   e
threadIdx indicam o número de blocos e o identificador de threads, respectivamente. 
5. Comandos de seleção como o se–então e o switch-case são evitados
em kernels que executam em GPUs. Isso ocorre devido à arquitetura e à maneira de
execução desses kernels. Quando um comando de seleção existe no kernel, para
cada condição que necessite ser executada, um conjunto de threads vai executar
paralelamente, porém, uma região após a outra, tornando a execução menos
eficiente do que o convencional.
Kernels que implementam a soma de matrizes e o problema SAXPI possuem um
comando de seleção if (i < n). Qual é a razão para a existência dessa condição?
Você acertou!
A. Evitar que posições inexistentes do vetor sejam acessadas.
A resposta correta é a que diz que o comando de seleção serve para evitar que posições
inexistentes   do   vetor   sejam   acessadas.   Quando   se   indica o   número   de   blocos
e threads por bloco que vão ser executados na GPU, esses valores multiplicados podem
resultar  em um número maior  do que o número de elementos do vetor,  por exemplo.
Quando isso ocorre, adiciona-se um comando de seleção para filtrar quais threads vão
executar e quais não vão. A indicação de quais são as threads do bloco em execução é
feita   utilizando-se   as   variáveis   blockIdx   e   threadIdx.  A   sincronização   das threads de
diferentes blocos é feita utilizando-se o comando __syncthreads. Para calcular apenas as
posições que o usuário  deseja,  seria necessário um vetor  de máscara.  Por  fim,  esse
comando  de   seleção   diminui   o   desempenho   do kernel e   não  garante  o   desempenho
máximo. 
	Introdução à programação CUDA
	Exercícios

Mais conteúdos dessa disciplina