반응형

[CUDA 포함파일 환경설정]


CUDA 4.1 visual studio 2010 설정 (윈도우 7)  Parallel 

2012/02/28 19:18

복사http://blog.naver.com/sks12345/20152136920


2시간 삽질하면서 찾은 cuda 4.1 설정 방법입니다. 

 

간단하게 설정 할 수 있는데 역시 모르니 완전 헤멥니다. 아는게 힘이라능

 

다운 받는건 http://blog.naver.com/toses3/40140926000 요기로 가셔서 보시고...

 

4.0버전으로 설명되어있는데, bug fix는 현재 사라졌으니 무시하시고

 

1. CUDA Tool kit 4.1

2. GPU Computing SDK

3. 개발자용 그래픽 드라이버

 

이렇게 3개가 필요합니다.

 

각각 설치하시고 난뒤

 

 visual studio 2010을 실행시키고 프로젝트를 하나 만듭니다. 이 과정도 위 링크에 다 있습니다.

 

프로젝트 속성에서 라이브러리 폴더와 include 폴더, 라이브러리를 추가해주어야 합니다.

 

아래 그림과 같이 VC++ 디렉터리에서 설정하시면 됩니다.

 

 





 

포함 디렉터리는 헤더파일용입니다. 그자리에 다음과 같이 넣으시면 됩니다.

 

C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1\C\common\inc

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\include

 

SDK의 include 폴더와 GPU Tool kit의 include 폴더 이렇게 2개가 한 쌍으로 있어야합니다. 하나라도 빠지면 링크 에러 납니당..;;

 

라이브러리 디렉터리에는 다음과 같이 넣습니다.

 

C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1\C\common\lib\Win32

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\lib\Win32

 

저는 32비트로 설치했으므로 위와 같이 하였고, 64비트로 설치하신분은 끝에 Win32를 x64로 하시면 될겁니다.

 

그리고 *.cu로 생성한 파일의 속성에서 cuda 컴파일러를 설정해줍니다.

 

 

파일의 속성입니다. 프로젝트 속성이 아닙니다. 헷갈리지 마시구요. 처음에는 빌드에 참여안함 이라고 되어있는데 그것을 위의 그림처럼 설정 해줍니다.

 

이제 설정이 다되었구요. CUDA의 세계로 빠지시면 됩니다.

 

반응형
반응형

http://gpuray.blogspot.com/2009/06/cudathreadsynchronize.html

THURSDAY, JUNE 25, 2009

cudaThreadSynchronize

This function is important for anyone who is launching a kernel many times (example: from a for loop). This is because a CUDA kernel launch is asynchronous, and returns immediately. This means that your CPU side for loop will finish in an instant and try to launch everything at once.

Calling cudaThreadSynchronize() will make the CPU wait till all previously launched kernels terminate.
대강 정리하면.. CPU가 GPU 의 커널이 모두 처리 될때까지 CPU 를 기다리게 한다는것 => CPU 와 GPU 같의 동기화를 수행한다



이하원문


Rays of hope

This Blog
Linked From Here
This Blog
Linked From Here

Thursday, June 25, 2009

cudaThreadSynchronize

This function is important for anyone who is launching a kernel many times (example: from a for loop). This is because a CUDA kernel launch is asynchronous, and returns immediately. This means that your CPU side for loop will finish in an instant and try to launch everything at once.

Calling cudaThreadSynchronize() will make the CPU wait till all previously launched kernels terminate.

No comments:

Post a Comment

반응형
반응형

http://fineav.tistory.com/232


PCI 버스(Peripheral Component Interconnect Bus)
컴퓨터 메인보드에 주변 장치를 장착하는 데 쓰이는 컴퓨터 버스의 일종이다.
오늘날 개인용 컴퓨터에서 가장 많이 볼 수 있는 버스이다.
표준적인 확장 버스 역할 분야에서는 한때 쓰였던 ISA 버스, VESA 로컬 버스 등을 PCI 버스가 대체해 버렸다.
PCI는 1990년 즈음에 인텔의 아키텍처 개발 연구소에서 비롯하였다.
2004년에 PCI 익스프레스로 대체되기 시작했다.

▲ 32비트 PCI 버스

PCI 익스프레스(PCI Express)
2002년 PCI SIG가 책정한 입출력을 위한 직렬 구조의 인터페이스이며 인텔 주도하에 만들어졌다.
서적이나 문서에서는 PCIe로 표기하는 경우도 많다. 이 표기는 PCI SIG 웹 사이트에서도 쓰이고 있다.
PCI-X와는 다른 규격이며 오랫동안 3D 그래픽 카드를 군림했던 AGP를 대체한다.

2004년부터 본격적으로 쓰이기 시작했으며, 1초에 8기가바이트 정도의 데이터를 전송할 수 있다.
이에 대한 규격으로 PCI 익스프레스 2.0과 PCI 익스프레스 3.0으로 잘 알려져 있다.

PCI Express 2.0
2007년 1월에 PCI-SIG가 책정한, 컴퓨터용의 시리얼 전송 인터페이스. PCI 대신에 보급된 PCI Express 1.1의 차기 버젼.

최소구성 전송로('레인'으로 불림)는 PCI Experss 1.1로는 한방향2.5Gbps(양방향 5.0Gbps)였던 것이, 단방향 5.0Gbps, 양방향10Gbps로 확장되었다. PCI Express 1.1와 마찬가지로 8비트 데이터를 보내는 클럭의 신호등에 2비트를 추가한 10비트를 쓰기 때문에, 실제 데이터 속도는 단방향 4Gbps(500MB/s), 양방향 8Gbps(1GB/s)가 된다. 10랜을 이용한 경우의 전송속도는 16GB/s가 된다.

PCI Express 2.0은 PCI Express 1.1의 상위호환이 되어 있어 PCI Express 1.1용의 기기를 그대로 접속시킬 수 있다. 또한 소프트웨어로부터 동적으로 전송속도를 변경할 수가 있어, 최고속도가 필요하지 않은 경우에는 소비전력을 절약할 수 있다. 기존의 확장슬롯에 카드를 꼽는 접속방법뿐만 아니라, 10m까지의 길이의 메탈 케이블로 기기간을 접속시킬 수 있는 'PCI Experss Cable'이라는 사양도 정해져 있다.

아래글 출처 : 보드나라 Q&A 게시판
PCI Express 1.1의 전송속도는 Lane당 250MB/s 입니다. (31Mhz x 8Bit = 250MB/s)
따라서 16Lane을 사용하는 PCI Express 1.1 16x는 250MB/s x 16 = 4GB/s 의 전송속도가 나지요.
AGP 8X와 비교해보면, 33Mhz x 8Bit x 8배속 = 2.1GB/s 였습니다.
PCI Express 2.0은 PCI Express 1.1에 비해 2배의 전송속도가 나는 인터페이스 규격으로, Lane당 500MB/s를 갖습니다.
따라서 PCI Express 2.0 16x의 경우, 8GB/s의 전송속도를 갖습니다.
이론적으로 인터페이스가 작동하려면 수신/송신측 모두 동일한 인터페이스를 가지고있어야 합니다. 즉, PCI Express 2.0이 작동하려면 메인보드와 그래픽카드 모두가 PCI-Express 2.0을 지원해야 하며, 둘중에 하나라도 1.1 규격을 지원한다면, PCI-Express 1.1로 작동합니다.
현재 PCI-Express 2.0 을 채택한 그래픽카드가 많이 나오고있지요. 실제 장착하여보면 1.1 메인보드에 장착해도 큰 성능차이가 나지 않습니다. 즉, 역으로 2.0의 대역폭을 다 사용하지 못하고 있다고 보면 됩니다.



PCI 32Q비트 66MHz 266MB/s

PCI ExpressX1 2.5GHz 512MB/s

PCI ExpressX4 2.5GHz 2GB/s (Duplex)

PCI ExpressX8 2.5GHz 4GB/s (Duplex)

PCI ExpressX16 2.5GHz 8GB/s (Duplex)





관련 게시물
PCIe 2.0의 최대속도를 뽑아 내려면 P67을 쓸것

반응형
반응형

http://forums.nvidia.com/index.php?showtopic=198586

EDIT : Okay, on VS2010 :

Quote

Project->Properties->Configuration Properties->CUDA C/C++->Device
Then under "Code Generation"
Change "compute_10,sm_10" to "compute_20,sm_20".
And don't put "compute_20,sm_20;%CodeGeneration;" as I did !

반응형
반응형



쿠다 변수 특성 

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;
}




반응형
반응형

http://goparallel.egloos.com/1969596

CUDA Event로 시간측정 CUDA 프로그래밍 Tips

이번은 호스트 프로그램으로 Kernel나 CUDA API의 실행 시간을 측정하는 방법에 대해 설명합니다. Kernel 내부에서의 시간측정에 관해서는 CUDA 프로그램의 시간을 측정하는 - clock()을 참고하세요.

시간측정의 주의점!

CUDA API는 그 실행 문맥 중에서 제일 처음에 불린 API는 매우 시간이 걸리는 특징이 있습니다.이것은 CUDA의 초기화 작업을 하고 있기 때문입니다. 그러므로, cudaSetDevice등의 다른 초기화 함수를 부르는지와 최초의 API는 시간에 필요한 시간을 잘 살펴봐야 합니다.

시간측정을 통일합니다.

CUDA로 프로그램을 구현하여 프로그램의 성능을 측정할 필요가 있을 때 시간을 측정하는 방법으로 고민하는 일이 있습니다. OS에 의한 시간측정방법과 완전히 다르기 때문에 portability 코드를 쓰는 것은 상당히 귀찮습니다. 잘못된 시간측정을 실시하면 결과는 터무니없는 값이 되겠지만, 계측 시간이 msec 단위인 경우 그것이 작성된 쓴 원시 코드 때문인지 아니면 정말로 그 시간 걸렸는지 알 수 없습니다.

이번에는 CUDA의 Event를 사용하여 어떤 환경에도 이용할 수 있고 단순하고 올바른 측정 시간을 얻을 수 있습니다.

사용예제

#include <stdio.h>

#define VEC_NUM (512)

__global__ void dummy(float *dA)

{

int id = blockDim.x * blockIdx.x + threadIdx.x;

dA[id] = dA[id] + dA[VEC_NUM-1-id];

}

int main(int argc, char** argv)

{

float A[VEC_NUM];

float *dA;

size_t size = VEC_NUM * sizeof(float);

int i;

for( i=0; i<VEC_NUM; i++ ) {

A[i] = (float) i;

}

cudaMalloc( (void **) &dA, size );

cudaMemcpy( dA, A, size, cudaMemcpyHostToDevice );

float elapsed_time_ms=0.0f;

cudaEvent_t start, stop;

cudaEventCreate( &start );

cudaEventCreate( &stop );

cudaEventRecord( start, 0 );

dummy<<<VEC_NUM/128, 128>>>(dA);

cudaEventRecord( stop, 0 );

cudaEventSynchronize( stop );

cudaEventElapsedTime( &elapsed_time_ms, start, stop );

cudaMemcpy( A, dA, size, cudaMemcpyDeviceToHost );

printf( "time: %8.2f ms\n", elapsed_time_ms );

cudaEventDestroy( start );

cudaEventDestroy( stop );

cudaFree( dA );

return 0;

}

프로그램의 내용에 큰 의미는 없습니다. 중요한 것은 다음 부분입니다.

float elapsed_time_ms=0.0f;

cudaEvent_t start, stop;

cudaEventCreate( &start );

cudaEventCreate( &stop );

cudaEventRecord( start, 0 );

dummy<<<VEC_NUM/128, 128>>>(dA);

cudaEventRecord( stop, 0 );

cudaEventSynchronize( stop );

cudaEventElapsedTime( &elapsed_time_ms, start, stop );

CUDA Event를 사용하여 CUDA API에서 비동기화로 실행되고 있는 여러가지 명령(호스트·디바이스 사이의 데이터 전송이나, kernel의 실행등)의 진행 상황을 체크 포인트(이벤트) 마다 모니터 할 수 있습니다.

1.cudaEvent_t형의 변수를 기록하고 싶은 이벤트의 수 만큼 선언 한다

2.cudaEventCreate를 이용해 이벤트를 생성한다

3.cudaEventRecord를 이용해 이벤트를 기록한다

4.cudaEventSynchronize로 이벤트를 동기화 한다

5.cudaEventElapsedTime로 이벤트간의 시간측정을 한다

6.cudaEventDestroy로 이벤트를 파기한다

cudaEventRecord는 다음과 같은 동작을 합니다.

이 함수가 불리기 직전까지 호출된 CUDA API의 동작이 모두 끝난 직후에 이벤트를 기록한다.

덧붙여 이 함수는 비동기화에 동작하기 때문에 경과시간을 계측하기 전에 이벤트를 기록하고 있는지를 보증할 필요가 있습니다. 이를 위한 것이 cudaEventSynchronize입니다. 함수 인수의 이벤트가 종료 할 때까지 cudaEventSynchronize는 실행을 블록합니다.

마지막으로, cudaEventElapsedTime로 시간을 측정합니다. 단위는 밀리 세컨드입니다.

반응형
반응형

http://istqb.tistory.com/350

지금부터는
.cu파일을 열어보면 int float #include 등에 상관없이 모두 검정색 글씨로 되어있는데
이걸 일반C++파일을 열었을 때처럼 파란색/갈색으로 하이라이팅 하는 법입니다.
아래 사진처럼 SDK-C--doc-syntax_highlighting-visual_studio_8 안쪽에 있는 usertype.dat를
비주얼스튜디오가 설치된 폴더의 Common7-IDE에 복사합니다. (비주얼스튜디오버전에 맞는 폴더를 찾아가시면됩니다.)





설치후에 보면~~ 푸른색과 갈색?으로 하이라이팅 된 것을 확인하실 수 있습니다~





이번에는 Visual Assist X (비주얼 어시스트 X)설정 법입니다.
Visual Assist X\AutoText\Latest\Cpp.tpl을 하나 복사해서 이름을 Cu.tpl로 바꿉니다.






시작-실행-regedit 하신다음에 HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X\VANet7.0
(자신의 VS버전폴더를찾으시면됩니다.) 에 들어가셔서 ExtHeader와 ExtSource에 각각 .cuh와 .cu를 추가해줍니다.





비주얼 스튜디오를 다시 실행시켜보시면 우왕ㅋ굳ㅋ




http://sigttou.com/category/adventures-in-graphicsland

STEP 5: CONFIGURE VISUAL ASSIST X TO KNOW ABOUT CUDA.

To get full syntax highlighting and include support, we need to tell VAX about our CUDA libraries as well as the fact that it should treat CUDA files as C/C++ files.

Launch VS 2010 and open the Options screen (Tools > Options). Under Projects and Solutions > VC++ Project Settings add the following entries to the Extensions to Include item:

  • .cu
  • .cu.h (or whatever you use for your CUDA headers)

It should look something like this:

Extensions to Include

Now close VS 2010 and open up the registry editor (Start > regedit.exe). Browse to the following folder:

  • HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X\VANet10

Now look for the ExtHeader key and add .cu.h to the list. Make sure the whole line ends with a semicolon. It should look something like this:

Regedit ExtHeader

Look a little further down and you should see the ExtSource key. Add .cu to the list in the same way. Again, make sure the line ends with a semicolon.

Regedit Source

Now relaunch VS 2010 and open the VAX options (VAssistX > Visual Assist X Options). Open the Projects group on the left and select C/C++ Directories. Under Platform select Custom. Then, select Stable Include Files from the drop down on the right and add the paths to your CUDA toolkit includes and GPU Computing SDK includes. If you used the default installation directories, these are:

  • C:\Program Files (x86)\NVIDIA GPU Computing Toolkit\CUDA\v3.2\include
  • C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\common\inc

In other words, your screen should look something like this:

Stable Includes

Now switch the drop down to Source files and add the following paths:

  • C:\Program Files (x86)\NVIDIA GPU Computing Toolkit\CUDA\v3.2\src
  • C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\common\src

Source Files

Lastly, select the Performance item from the left and click the Rebuild Symbol Databases button.

Rebuild Symbol Databases

You should be good to go now with Visual Assist X and CUDA.

반응형
반응형

순서대로 따라하면 됨.


http://blog.naver.com/PostView.nhn?blogId=toses3&logNo=40140926000

-개발자버전 드라이버를 설치해야 한다, 그냥 드라이버가 아닌..

-쿠다툴킷 설치

-비주얼스튜디오 설치

요약

1. win32 Console application 으로 생성

2. 사용자 지정빌드(프로젝트에 마우스 대로오른쪽 버튼 누르면 나옴) 에서 CUDA 4.1(Targets, .props) 를 선택

하면 빌드할 것들을 알아서 목록포함

(4.1 툴킷 부터는 프로퍼티가 안뜨는 버그는 안보이는듯)

옵션에서 텍스트 에디터 -> 파일 확장자 에서 cu. cuh 확장자를 Visual C++ 에티터로 등록

.cu 코드 작성후 속성에서

.cu 의 속성->일반->아이템 타입 이 CUDA C/C++ 이 되도록 변경

프로젝트속성 -> 입력 에서 추가 종속성에 cudart.lib 추가


반응형

+ Recent posts