반응형



쿠다 변수 특성 

http://blog.naver.com/lithium81/80145123334 

 

이 포스트는 "CUDA By Example", "대규모 병렬 프로세서 프로그래밍", "CUDA 병렬 프로그래밍"을 스터디하면서 익힌 내용을 까먹지 않게 정리한 것임.

※ 로그인 안 하고도 내가 언제든지 볼 수 있도록 공개한 것일 뿐, 맘대로 퍼가고 수정하라고 만든 자료 아님. 불펌 금지








CUDA 병렬프로그래밍에 대한 이해...  Cuda / 개발 및 연구 

2012/01/27 15:02

복사http://blog.naver.com/rmagus101/90134660153

전용뷰어

//---------------------------------------------------

아~ for문으로 10번 돌것을 하나의 block 이 하나의 배열을

맡아서 계산해서 넘겨주는 거구나

즉 커널을 통해 "나(CPU) 10번 돌거 GPU 니내 10명이서 나눠서

한개씩 맡고 나에게 주렴" 이라는 거구나... 어렵다...

//--------------------------------------------------

#include <stdio.h>
#include <malloc.h>
#include <cuda_runtime.h>
#include <cutil.h>

#define blksize  8
#define grdsize  8
#define N   10

__global__ void test(int *a, int *b, int *c)
{
 int tid = blockIdx.x;

 c[tid] = a[tid] + b[tid];
}

int main()
{
 //cudaSetDevice (int device );
 //property출력을 위한 구조체 생성
 cudaDeviceProp prop;
 
 //디바이스 장치의 숫자를 획득
 int count;
 cudaGetDeviceCount(&count);
 
 //각 디바이스 장치의 property들을 출력
 for(int i=0;i<count;i++){
  cudaGetDeviceProperties(&prop,i);
  
  printf("--%d번째 디바이스의 정보를 출력합니다--\n",i+1);
  printf("  (1) 장치 이름: %s\n", prop.name);
  printf("  (2) Clock Rate: %d\n", prop.clockRate);
  printf("  (3) 전역 메모리 용량: %ld\n",prop.totalGlobalMem); 
  printf("  (4) 상수 메모리 용량: %ld\n",prop.totalConstMem);
  printf("  (5) 통합형인가??: %ld\n",prop.integrated);
 }

 int a[N], b[N], c[N];
 int *dev_a, *dev_b, *dev_c;

 cudaMalloc( (void**) &dev_a, sizeof(int) * N);
 cudaMalloc( (void**) &dev_b, sizeof(int) * N);
 cudaMalloc( (void**) &dev_c, sizeof(int) * N);

 for(int i=0; i<N; i++) {
  a[i] = i;
  b[i] = i;
 }

 cudaMemcpy( dev_a, a, sizeof(int) * N, cudaMemcpyHostToDevice );
 cudaMemcpy( dev_b, b, sizeof(int) * N, cudaMemcpyHostToDevice );

 test<<<N, 1>>>(dev_a, dev_b, dev_c);

 cudaMemcpy( c, dev_c, sizeof(int) * N, cudaMemcpyDeviceToHost );

 for(int i=0; i<N; i++) {
  printf("%d + %d = %d\n", a[i], b[i], c[i]);
 }

 cudaFree(dev_a);
 cudaFree(dev_b);
 cudaFree(dev_c);

 return 0;
}




반응형

+ Recent posts