Programming/openCL & CUDA2011. 1. 16. 10:11
귀찮아서 CUDA 3.2 SDK만 설치하고, CUDA Toolkit 3.2는 설치하지 않고
비쥬얼 스튜디오에서 3.2용 SDK 샘플 파일을 열려고 하니 다음과 같은 에러가 발생한다.

음.. C:\Program Files\Microsoft Visual Studio 9.0\VC\VCProjectDefaults\NvCudaRuntimeApi.rules 이 파일은 머지?

머 결론은 프로젝트 파일 열수 없음 배째! 라는 건데..

3.1과 3.2의 프로젝트 파일을 비교해보니
ToolFiles의 경로가 달라졌다 -_-

부랴부랴 Toolkit 3.2를 설치하는데

경로를 바꾸니 졸라 겁준다 -_-
줸장! 내가 쫄아서 "Yes" 누르는 건 아냐 ㅠ.ㅠ

아무튼 3.2 Toolkit을 설치하고 나니 이제야 파일이 생성되고, 제대로 프로젝트 파일이 열린다.

Posted by 구차니
Programming/openCL & CUDA2011. 1. 14. 21:32
아래의 것들이 추가되었음

bilateralFilter
conjugateGradient
cudaEncode
Interval
MonteCarloCURAND
randomFog
simplePrintf
simpleSurfaceWrite
SLID3D10Texture
VFlocking

H.264 지원으로는 cudaEncode 정도 밖에 없는 느낌?


Interval.exe GTX260 이상부터 지원하는 녀석이다 ㅠㅠ
[Interval Computing]  starting ...

> Using CUDA device [0]: GeForce 8800 GT
> GPU Device has Compute Capabilities SM 1.1

Interval Computing: requires minimum of Compute Capability 1.3 or higher, waiving test...
PASSED


Posted by 구차니
Programming/openCL & CUDA2011. 1. 14. 18:11
버전별로 캡쳐(오픈오피스 쓰니 오작동해서 ㅠ.ㅠ)
8800GT는 CUDA1.1을 지원하므로.. 표를 따라서 보면

블럭당 쓰레드 256개
멀티프로세서당 쓰레드 768개

쓰레드당 레지스터 8개
블럭당 쉐어드 메모리 1024Byte

멀티프로세서당 Warp 24개
멀티프로세서당 쓰레드 블럭 3개

Warp당 쓰레드 32
멀티프로세서당 Warp 24
멀티프로세서당 쓰레드 768
멀티프로세서당 32bit 레지스터의 총합 8192개
멀티프로세서당 쉐어드 메모리 16384Bytes

쓰레드 블럭당 Warp 8
레지스터 2048
쉐어드 메모리 1024

흐음.. 이렇게 보니 조금 프로그래밍의 방향이 보이는 느낌?








Posted by 구차니
Programming/openCL & CUDA2011. 1. 5. 22:58
영어로 쏼라쏼라 해대는 바람에 프리젠테이션 내용은 이해불가 -_-
하지만 아래 내용만큼은 중요한 의미를 포함!

소프트웨어와 하드웨어의 추상화 과정은 다음과 같다.
Grid는 Device 이며, 한번에 하나의 Kernel 만을 (다르게 말하면 Grid를) 실행 할 수 있다.
   다르게 말하자면, 한번에 최대한 많은 블럭과 쓰레드를 사용하는 것이 시간효용면에서 유리해진다.
Thread Block은 Multiprocessor 이며,
   물리적 프로세서이므로 하나의 메모리를 공유한다(Shared Memory)
   그리고 다른 물리적 프로세서와는 메모리를 공유하지 못한다.
Thread는 Thread Processor 이며, 다른 자료에서 굳이 비유하자면 ALU 이다.

그런데.. Multi GPU 상황(그러니까 SLI를 사용하지 않는 다중 GPU)이라면
Grid를 동시에 여러개 구성해서 돌릴수도 있다는 의미일려나?



[링크 : http://http.download.nvidia.com/developer/cuda/podcasts/CUDA_Programming_Model_Overview.m4v]
2011/01/05 - [Programming/CUDA / openCL] - CUDA training

'Programming > openCL & CUDA' 카테고리의 다른 글

CUDA SDK 3.2 예제파일 변경점  (0) 2011.01.14
CUDA_Occupancy_calculator 내용 캡쳐  (0) 2011.01.14
CUDA training  (0) 2011.01.05
Visual Studio 2008 에서 CUDA 프로젝트 만들기  (2) 2011.01.04
CUDA Toolkit 3.2  (0) 2011.01.02
Posted by 구차니
Programming/openCL & CUDA2011. 1. 5. 16:30
도대체 어떻게 짱박아 놓았길래 안보인걸까..

Posted by 구차니
Programming/openCL & CUDA2011. 1. 4. 23:09
CUDA 프로젝트를 보면 다음과 같이, "CUDA Build Rule" 이라는 항목이 추가되있다.

명령줄에 보면 "nvcc.exe" 에 대한 언급도 나오는데 어디서 어떻게 추가하는지는 알수가 없었다.

그래서 검색을 해보니,
솔루션 탐색기에서 "사용자 지정 빌드 규칙" 이라는 부분을 통해

"기존 파일 찾기"를 이용하여 Cuda.rules를 추가하면 하면 저러한 기능이 추가된다.

나의 경우에는
D:\CUDA\NVIDIA GPU Computing SDK\C\common\Cuda.rules 경로에 위치하였다.

'Programming > openCL & CUDA' 카테고리의 다른 글

CUDA Programming Model Overview 내용중 일부  (0) 2011.01.05
CUDA training  (0) 2011.01.05
CUDA Toolkit 3.2  (0) 2011.01.02
deviceQuery on 8600GT 512MB + CUDA 하드웨어 구조  (0) 2011.01.02
CUDA on Linux  (0) 2010.12.07
Posted by 구차니
Programming/openCL & CUDA2011. 1. 2. 21:57
예전에 설치할때는 3.2는 RC(Release Candidate) 여서 3.1을 설치했었는데
지난 2010년 12월 22일에 3.2가 정식으로 나왔다.

결론은 빨라진게 대부분이고, H.264 인코딩/디코딩 라이브러리가 추가 되었다고 한다.

Last Updated: 12 / 22 / 2010

CUDA Toolkit 3.2 (November 2010)

For older releases, see the CUDA Toolkit Release Archive

 

Release Highlights

New and Improved CUDA Libraries

  • CUBLAS performance improved 50% to 300% on Fermi architecture GPUs, for matrix multiplication of all datatypes and transpose variations
  • CUFFT performance tuned for radix-3, -5, and -7 transform sizes on Fermi architecture GPUs, now 2x to 10x faster than MKL
  • New CUSPARSE library of GPU-accelerated sparse matrix routines for sparse/sparse and dense/sparse operations delivers 5x to 30x faster performance than MKL
  • New CURAND library of GPU-accelerated random number generation (RNG) routines, supporting Sobol quasi-random and XORWOW pseudo-random routines at 10x to 20x faster than similar routines in MKL
  • H.264 encode/decode libraries now included in the CUDA Toolkit

[링크 : http://developer.nvidia.com/object/cuda_3_2_downloads.html]

'Programming > openCL & CUDA' 카테고리의 다른 글

CUDA training  (0) 2011.01.05
Visual Studio 2008 에서 CUDA 프로젝트 만들기  (2) 2011.01.04
deviceQuery on 8600GT 512MB + CUDA 하드웨어 구조  (0) 2011.01.02
CUDA on Linux  (0) 2010.12.07
CUDA 예제 컴파일시 오류  (0) 2010.12.05
Posted by 구차니
Programming/openCL & CUDA2011. 1. 2. 21:51
deviceQuery 예문은 말그대로 장치에 질의의 던져 어떤 스펙인지
몇개의 thread가 존재하는지를 파악하는 프로그램이다.

아무튼 NVIDIA_CUDA_C_ProgrammingGuide.pdf 문서를 보면 아래의 내용이 나오니 참고를 해서 보자면,


Geforce 8800GT(이하 8800GT)는 14개의 멀티 프로세서를 가졌고 112개의 코어를 지녔다.
Grid는 Block을 포함하고, Block은 Thread를 포함한다.

단순 계산으로는 하나의 프로세서별로 8개의 코어가 존재하며
멀티프로세서는 14개 코어는 총 112개가 존재한다.

그리드(Grid)는 블럭의 2차원 배열로 존재하고,
블럭(Block)은 쓰레드의 2차원 배열로 존재한다.
쓰레드(Thread)는 일을하는 최소단위이다.

한번에 묶이는 최소 쓰레드의 숫자(Warp size)는 32개 이며
하나의 블럭으로 묶을수 있는 최대 쓰레드는 512개 이다.

블럭의 최대 차원은 3차원 512x512x64 이며
그리드의 최대 차원은 2차원 65535x65535x1 이다.

라고 이해하면 되려나?

A multithreaded program is partitioned into blocks of threads that execute independently from each
other, so that a GPU with more cores will automatically execute the program in less time than a GPU
with fewer cores.
=> 멀티쓰레드화된 프로그램은 서로 독립적으로 실행되는 쓰레드의 블럭으로 나누어지며, 그러한 이유로 더욱 많은 코어를 포함하는 CPU는 적은 코어를 지닌 GPU보다 짧은 시간에 프로그램을 실행할 수 있다.

Host는 일반적인 CPU 환경이고, Device는 GPU 환경이다.
컴파일시에 Device 코드만 nvcc에서 처리하고, 나머지는 일반적인 컴파일러에서 처리하는 이원화된 구조이다.

아래는 커널이다. 디바이스 코드를 생성하는 부분이며
MatAdd 함수는 __global__ 선언을 앞에 붙여 device 코드임을 명시해야 한다.
MatAdd<<<numBlocks, threadsPerBlock>>>(A, B, C);
그리고 커널 안에는 int형이나 dim3 형으로 선언이 되어야 한다.

아래는 dim3 형으로 선언된 녀석으로,
dim3 threadsPerBlock(16, 16);
dim3 numBlocks(N / threadsPerBlock.x, N / threadsPerBlock.y);
MatAdd<<<numBlocks, threadsPerBlock>>>(A, B, C);
블럭당 쓰레디의 크기를 16x16 thread로, 그리드를 N/16개로 분할하는 예제이다.

물론 2차원은 1차원과 같이 사용이 가능하므로 int형도 허용하는 듯?

B.15  Execution Configuration
Any call to a __global__ function must specify the execution configuration for that call. The execution configuration defines the dimension of the grid and blocks that will be used to execute the function on the device, as well as the associated stream (see Section 3.3.10.1 for a description of streams).
When using the driver API, the execution configuration is specified through a series of driver function calls as detailed in Section 3.3.3.
When using the runtime API (Section 3.2), the execution configuration is specified by inserting an expression of the form <<< Dg, Db, Ns, S >>> between the function name and the parenthesized argument list, where:
  Dg is of type dim3 (see Section B.3.2) and specifies the dimension and size of the grid,
     such that Dg.x * Dg.y equals the number of blocks being launched; Dg.z must be equal to 1;
  Db is of type dim3 (see Section B.3.2) and specifies the dimension and size of each block,
     such that Db.x * Db.y * Db.z equals the number of threads per block;
  Ns is of type size_t and specifies the number of bytes in shared memory that is dynamically allocated per block for this call in addition to the statically allocated memory; this dynamically allocated memory is used by any of the variables declared as an external array as mentioned in Section B.2.3; Ns is an optional argument which defaults to 0;
  S is of type cudaStream_t and specifies the associated stream; S is an optional argument which defaults to 0.
As an example, a function declared as
__global__ void Func(float* parameter);
must be called like this:
Func<<< Dg, Db, Ns >>>(parameter);
The arguments to the execution configuration are evaluated before the actual function arguments and like the function arguments, are currently passed via shared memory to the device. The function call will fail if Dg or Db are greater than the maximum sizes allowed for the device as specified in Appendix G, or if Ns is greater than the maximum
amount of shared memory available on the device, minus the amount of shared memory required for static allocation, functions arguments (for devices of compute capability 1.x), and execution configuration. 

아무튼 원래는 아래의 예제 내용을 분석하기 위한 내용인데
점점 미궁으로 빠지는 느낌 -_-

CUDA deviceQuery


OpenCL DeviceQuery

'Programming > openCL & CUDA' 카테고리의 다른 글

Visual Studio 2008 에서 CUDA 프로젝트 만들기  (2) 2011.01.04
CUDA Toolkit 3.2  (0) 2011.01.02
CUDA on Linux  (0) 2010.12.07
CUDA 예제 컴파일시 오류  (0) 2010.12.05
CUDA / Visual Studio 2008  (2) 2010.12.05
Posted by 구차니
Programming/openCL & CUDA2010. 12. 7. 23:49
헉헉 힘들게도 컴파일 했다 -_-




이녀석을 컴파일 하려면 험난한 과정을 거쳐야 한다 -_-
ldconfig는 libglut3를 설치한다면 아마도 생략가능할 듯?
(trigger로 ldconfig를 수행한다)
$ sudo vi /etc/ld.so.conf/libcuda.conf
/usr/local/cuda/lib

$ sudo ldconfig
$ sudo apt-get install libglut3

$ sudo ln -s /usr/lib/libglut.so.3 /usr/lib/libglut.so
$ sudo ln -s /usr/lib/libGLU.so.1 /usr/lib/libGLU.so
$ sudo ln -s /usr/lib/libX11.so.6 /usr/lib/libX11.so
$ sudo ln -s /usr/lib/libXi.so.6 /usr/lib/libXi.so
$ sudo ln -s /usr/lib/libXmu.so.6 /usr/lib/libXmu.so

대부분이 so 의 버전에 대한 심볼릭 링크 문제였다.

2010/12/05 - [Programming/CUDA / openCL] - CUDA 예제 컴파일시 오류
2010/11/02 - [Programming/CUDA / openCL] - CUDA 예제파일 실행결과 + SLI

'Programming > openCL & CUDA' 카테고리의 다른 글

CUDA Toolkit 3.2  (0) 2011.01.02
deviceQuery on 8600GT 512MB + CUDA 하드웨어 구조  (0) 2011.01.02
CUDA 예제 컴파일시 오류  (0) 2010.12.05
CUDA / Visual Studio 2008  (2) 2010.12.05
CUDA + Visual Studio 2005  (0) 2010.12.01
Posted by 구차니
Programming/openCL & CUDA2010. 12. 5. 19:36
Linux에서 CUDA를 설치하고 예제를 컴파일 하려고 하니 다음과 같은 오류가 난다.

~/NVIDIA_GPU_Computing_SDK/C/src/deviceQuery$ make
/usr/bin/ld: cannot find -lcutil_i386
collect2: ld returned 1 exit status
make: *** [../../bin/linux/release/deviceQuery] 오류 1

경로설정이 잘못되었나 했는데, gcc 호환성으로 인해 구버전을 쓰라던 이야기가 떠오르게 하는 아래의 내용 -_-
NVIDIA Cuda ¶

Before running the Makefile, you will need to install gcc 4.3 and g++ 4.3. This is because the NVIDIA Cuda SDK 3.0 has not yet worked with gcc 4.0 and g++ 4.0. There should be no issue compiling cuda files with gcc 4.3 and g++ 4.3 on newer NVIDIA Cuda SDK versions. For a successful compilation, please follow these steps:

...

3) Create a directory and create symlinks to gcc-4.3/g++-4.3

$ mkdir mygcc
$ cd mygcc
$ ln -s $(which g++-4.3) g++
$ ln -s $(which gcc-4.3) gcc

[링크 : http://boinc.berkeley.edu/trac/wiki/GPUApp]


$ gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ --version
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


$ whereis g++
whwg++: /usr/bin/g++ /usr/share/man/man1/g++.1.gz

$ whereis gcc
gcc: /usr/bin/gcc /usr/lib/gcc /usr/share/man/man1/gcc.1.gz

없는건 아닌데 왜 안될까..

일단.. 어거지로
~/NVIDIA_GPU_Computing_SDK/C 에서
make를 하니 어느정도 컴파일을 하는데 GLU 어쩌구 하면서 중단 OTL


libcudart.so.3: cannot open shared object file: No such file or directory

요런 에러가 발생하면
단순하게 LD_LIBRARY_PATH를 정해주고, sudo ldconfig 를 해서는 해결이 되지 않았다.
/etc/ld.so.conf.d/ 에 libcuda.conf를 만들고 cuda 설치 경로인
/usr/local/cuda/lib
를 넣어주고 나서 sudo ldconfig를 해야 제대로 설정이 되었다.


2010.12.07 추가
아래의 경로에서 libcutil_i386.a 발견! (별 의미는 없음)
~/NVIDIA_GPU_Computing_SDK/C/lib$ ll
합계 224
drwxr-xr-x 2 minimonk minimonk   4096 2010-12-05 23:58 ./
drwxr-xr-x 9 minimonk minimonk   4096 2010-12-05 23:58 ../
-rw-r--r-- 1 minimonk minimonk 142978 2010-12-05 23:58 libcutil_i386.a
-rw-r--r-- 1 minimonk minimonk  30512 2010-12-05 23:58 libparamgl_i386.a
-rw-r--r-- 1 minimonk minimonk  43034 2010-12-05 23:58 librendercheckgl_i386.a

~/NVIDIA_GPU_Computing_SDK/C/src/marchingCubes$ make
/usr/bin/ld: cannot find -lGLU
collect2: ld returned 1 exit status
make: *** [../../bin/linux/release/marchingCubes] 오류 1

$ sudo find / -name "*GLU*"
/usr/lib/libGLU.so.1
/usr/lib/libGLU.so.1.3.070701

$ sudo ln -s /usr/lib/libGLU.so.1 /usr/lib/libGLU.so

~/NVIDIA_GPU_Computing_SDK/C/src/marchingCubes$ make
/usr/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status
make[1]: *** [../../bin/linux/release/marchingCubes] 오류 1

$ sudo ln -s /usr/lib/libX11.so.6 /usr/lib/libX11.so
$ sudo ln -s /usr/lib/libXi.so.6 /usr/lib/libXi.so
$ sudo ln -s /usr/lib/libXmu.so.6 /usr/lib/libXmu.so

/usr/bin/ld: cannot find -lglut
collect2: ld returned 1 exit status
make[1]: *** [../../bin/linux/release/marchingCubes] 오류 1

$ sudo apt-get install libglut3
$ sudo ln -s /usr/lib/libglut.so.3 /usr/lib/libglut.so

우분투가 웬수인가.. 어느넘이 웬수인가?

'Programming > openCL & CUDA' 카테고리의 다른 글

deviceQuery on 8600GT 512MB + CUDA 하드웨어 구조  (0) 2011.01.02
CUDA on Linux  (0) 2010.12.07
CUDA / Visual Studio 2008  (2) 2010.12.05
CUDA + Visual Studio 2005  (0) 2010.12.01
nvcc for windows 제약사항?  (0) 2010.11.14
Posted by 구차니