CUDA – Trabalhando com Memória da placa de vídeo

Neste artigo irei apresentar como trabalhar com a memória da placa de vídeo, na lib CUDA da NVIDIA.

GIT

O exemplo deste projeto pode ser visto no git.

https://github.com/marcelomaurin/CUDA2

Código do projeto

Veremos a seguir o projeto do código, onde em seguida irei comentar o mesmo:


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

#define TAM_MAP 30

//Kernel
__global__
void projecao_x(int *p_param){
	printf("video: %d\n",*p_param);
	*p_param += 5; /*muda valor*/
}


int main(){
	int valor;
        valor = 10; /* declaração da variavel alocada no pc*/
	cudaDeviceReset();

	int *d_param; /*Declaracao da variavel alocado na placa de video*/


	/*alocação de variaveis da placa de vídeos*/
	cudaMalloc((void**)&d_param,sizeof(int));         /*aloca na cuda o tamanho de 1 inteiro*/


	cudaMemcpy( d_param, &valor,
                              sizeof(int),
	                      cudaMemcpyHostToDevice);

	printf("Chamando hello!\n");
	projecao_x << <1, 1>> >(d_param); /*Criação funcao do processador*/
	cudaDeviceSynchronize();
	cudaMemcpy( &valor, d_param,
                             sizeof(int),
                             cudaMemcpyDeviceToHost);
	printf("pc:%d\n",valor);
	cudaFree(d_param);
	return 0;
}

O que faz o programa

O Programa acima cria uma variavel na placa de vídeo chamada d_param, que é atribuído valor 10 no Desktop.

Depois ao ser chamado a thread, e já na placa de vídeo, seu valor é modificado.

Por fim é transferida para a memória do desktop, e em seguida apresentada no desktop.

Funções importantes

cudaMalloc – É responsável pela criação da variavel na placa de vídeo.

cudaMemcpy – É responsável por copiar os dados de um espaço para outro. Nos dois sentidos DESKTOP -> VIDEO, e VIDEO -> Desktop.

Bom pessoal, espero que tenham gostado deste artigo.

Os próximos espero serem mais emocionantes.

Vida longa e prospera a todos.