Criando CUDA Hello World

15 de fevereiro de 2022 Off Por Marcelo Martins

O objetivo deste artigo, é iniciar o programador, no desenvolvimento de aplicações usando GPU da NVIDIA.

No artigo anterior, eu ensinei a instalar o pacote cuda.

http://maurinsoft.com.br/index.php/2021/08/27/install-cuda-toolkit-em-xubuntu-18-04/

Agora iremos desenvolver o nosso famoso hello world.

Primeiramente, precisamos instalar um outro pacote adicional:

apt install nvidia-cuda-toolkit

Este pacote instala o compilador do cuda “nvcc”, que gera o binário para o GPU.

Criando o Hello World

Neste exemplo não faremos muita coisa, a não ser chamar nossa primeira rotina que irá processar no GPU.

GIT

O projeto esta no GIT e pode ser baixado aqui:

https://github.com/marcelomaurin/CUDA_HELLO

Baixando o Projeto

Para baixar o projeto digite:

git clone https://github.com/marcelomaurin/CUDA_HELLO.git

Compilando o projeto

Para compilar o projeto digite o seguinte comando:

make

Segue o print screen da tela

Compilação do projeto

Agora iremos rodar o projeto.

Rodando o projeto

Analisando o código

Agora vamos dar uma olhada no fonte:

#include <stdio.h>
#include "cuda_runtime.h"

//Kernel
__global__
void hello_world(void){
	printf("hello\n");
}


int main(){
	printf("Chamando hello!\n");
	hello_world << <3, 10>> >();
	cudaDeviceSynchronize();
	return 0;
}

Este pequeno código, chama o hello_world, iniciando 30 threads, onde chama 3 blocos (SMs), com 10 threads cada.

O comando cudaDeviceSynchronize, realiza a sincronização entre o kernel do linux e as threads do cuda.

Lembrando que o valor máximo dado por thread é 1024 por bloco SM.

Referências

https://cuda-tutorial.readthedocs.io/en/latest/tutorials/tutorial01/

Documentação NVIDIA da API runtime

https://docs.nvidia.com/cuda/cuda-runtime-api/modules.html#modules