태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'cuda'에 해당되는 글 2건

  1. 2010.05.16 Bit count with CUDA (T_T) (3)
  2. 2009.09.17 CUDA Driver/Toolkit/SDK 설치하기 (Ubuntu 9.04 Jaunty) (2)

Bit count with CUDA (T_T)

Tech 2010. 5. 16. 23:42

왠지 빨리 계산해보고 싶은게 있어서 이틀쯤 고민해보다가, 알고리즘으로는 내 머리에서 더 나오지 않아서 하드웨어적인 도움을 받아보는건 어떨까 생각했다. 틀은 CUDA API로 쉽게 만들 수 있을 것 같아서 메인함수에 꾸역꾸역 밀어넣기로 뚝딱.

그런데, 아무리 개떡같은 코드에 카드도 9500GT(OTL)라지만 GPU Accelerated가 CPU(코어 하나만 사용)보다 느리면 어뜩해. ㅠㅠ

코드 불량이라고 생각하고 싶지만, SDK 에 포함된 벡터계산 샘플 코드의 1. GPU에 던져서 계산, 2. CPU로 재계산해서 검증, 부분의 시간을 재어봤더니 여기도 GPU부분이 CPU보다 느렸다. 코드만의 문제는 아니라는 것.

음... 뭐 작업을 쪼개서 양쪽을 다 쓰면 결과적으로 빨라지긴 할 것 같은데 x100 faster 이런건 좀 무리일려나 싶다. 코드가 바보라도 말이지, GPU/CPU 양쪽다 똑같은 바보코드니까 대강 계산 속도에 비례해서 나와줘야 할 것 같은데 ...

... 9500GT 가 ㅂㅅ이라서 그런걸까? 라는 생각으로 다음주에 회사에 있는 Tesla를 꿀꺽-_-/ 해서 놀아봐야겠다.

Elapsed time with GPU: 0.87000s
Elapsed time with CPU: 0.66000s

대략 2억개 가량의 바이트에서 0번~7번 비트에 등장하는 1이 몇개인지 세는 작업이다. CPU 로 계산할 때에는 적당한 단위로 테이블 룩업하면 더 빨라질 수도 있을 것 같긴 한데 ... CUDA님은 어떨지 테스트를 한번 해볼까.

혹시 이 외에 N배 더 빠르게 할 수 있는 방안이 있으신 분은 저에게 하겐다즈 아이스크림을 요청하세요.
.
--
P.S CPU에서 테이블 참조를 했더니 2배쯤 빨라졌다. CUDA 커널에서 테이블 참조를 했더니(어디서 합치는지에 따라 몇가지 variation을 만들어서 해봤지만) 5배쯤 느려졌다. ... ㅠㅠ CPU: 0.28XXXX 정도... CUDA레퍼런스에

<캐시 참조보다 재계산이 빠를 수 있다>

고 자랑스럽게(-_-) 쓰여있던데, 느낌이 새롭다. 음...

<캐시 참조가 재계산보다 느릴 수 있다>

랑 똑같은 말이긴 한데.
tags : 9500GT, CPU, cuda, CUDA C, GPU, Tesla
Trackbacks 0 : Comments 3
  1. Favicon of http://www.wildartist.org WILD ARTIST 2010.05.17 09:40 Modify/Delete Reply

    오 이게 진짜면 대박이네요 ㅎㄷㄷ
    근데 CPU랑 GPU 테스트하실 때 쓰레드 하나로 돌리신건가요?

    • Favicon of http://deisys.net dgoon 2010.05.17 09:43 Modify/Delete

      CPU 는 스레드 하나, CUDA 한테 시킬때는 블럭당 128~512개 정도에, Grid 하나에 블럭을 3~4만개정도 ... ? 코드와 하드웨어 양쪽 다 구려서그러겠지?

  2. Favicon of http://9509udisglutensfree.com/nikeus.php nike shoes 2013.07.17 01:17 Modify/Delete Reply

    사람들은 죽을걸 알면서도 살잖아 .사랑은 원래 유치한거에요

Write a comment


CUDA Driver/Toolkit/SDK 설치하기 (Ubuntu 9.04 Jaunty)

Tech 2009. 9. 17. 11:16
ATI를 선호하는 디군이 왜 이번에 Geforce9500GT라는 허접한 물건을 샀는가? - 디군의 개인적인 판단임

CUDA API 를 만져보고 싶었기 때문이다.

그래서 어제 집에서 사용하는 우분투 머신에 CUDA 개발툴이라는 녀석을 깔았는데, 아주 약간( ... ) 삽질을 했다. 나중에 다시 이 짓을 할 수도 있으므로 정리해두자.

-----
1. 준비물

  * CUDA 지원하는 NVIDIA 그래픽 카드 Geforce 8***, 9*** 이상은 모두 된다. 여기(http://kr.nvidia.com/object/cuda_learn_products_kr.html)에 자신의 그래픽카드가 있으면 된다. 나는 Geforce 9500GT 를 준비했다.


2. 설치할 때 귀찮은 점들

여기(http://kr.nvidia.com/object/cuda_get_kr.html) 서 시키는대로 Driver->Toolkit->SDK 순으로 설치하면 된다. 사실 순서가 중요한 것은 아니다. 디군의 경우는 삽질을 좀 해서 드라이버를 가장 나중에 했지만 별 문제는 없었다.

윈도우 환경이라면 (해보진 않았지만) 별 문제가 없을 것 같고, 리눅스 환경에서 약간 귀찮은게,

  * NVIDIA 드라이버를 설치할 때 X 가 떠 있으면 안된다
  * 반드시 사용중인 드라이버를 제거해야 한다

두가지이다. 나는 저 두번째 이유로, 삽질해서 드라이버를 마지막에 다시 설치했다.

 - 우분투의 경우 시스템->관리->하드웨어드라이버, 에 가서 현재 사용중인 드라이버를 쉽게 deactivate할 수 있다.
 - X 내리고 드라이버 설치: Ctrl+Alt+Fn 으로 세션을 옮겨다닐 수 있는데, 보통 1-6까지는 터미널이고 7번에 X가 떠 있다. 아직 예외는 본적이 없다. 이걸 이용해서 Ctrl+Alt+F1 로 1번 세션에 가서 로그인 한 다음

/etc/init.d/gdm stop
--- install driver as root
/etc/init.d/gdm start

해주면 된다. 그냥 깔끔하게 리붓해도 굿. 사용하던 드라이버를 제거해주지 않았다면, 여기서 커널이 "아썅 왜 버전 두개가 섞여있어!" 라면서 짜증을 내면서 디바이스를 못잡는다. 주의하자. 게다가 저 짜증을 바로 보여주는게 아니라 커널 로그를 까봐야 나온다. 겉으로 보기에는 "그냥 못잡네" 정도로 보이기 때문에 ... -_-

참고로, Driver, Toolkit, SDK 모두 executable이므로, 다운받고 나서 실행권한이 없다고 하면 chmod +x filename 혹은 sh filename 같은 식으로 실행해주면 된다. 이거 물어보는 녀석이 있더라고 ... -_-a


3. Toolkit, SDK 설치

 그냥 다운받은 파일을 실행하면 된다. 아 쉽다. SDK는 기본 경로가 사용자 로컬이다. 모든 사용자를 위해 설치하고 싶다면, root 권한으로 어딘가 적당한 곳에 설치해주면 되겠지만 굳이 그럴 필요가 있을까 ... (있을지도)


4. Build SDK

SDK를 설치한 경로가 ~/NVIDIA_GPU_Computing_SDK 라고 하자. (기본이다)

cd ~/NVIDIA_GPU_Computing_SDK/C
make

이렇게 빌드하면 되고, 빌드 후 생기는 예제코드의 실행파일들은 ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release 에 생긴다. CUDA가 제대로 동작한다면,

~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release/deviceQuery

를 실행해서 device에 내 그래픽카드가 보이면 된다.

dgoon@katy:~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release$ ./deviceQuery
CUDA Device Query (Runtime API) version (CUDART static linking)
There is 1 device supporting CUDA

Device 0: "GeForce 9500 GT"
  CUDA Driver Version:                           2.30
  CUDA Runtime Version:                          2.30
  CUDA Capability Major revision number:         1
  CUDA Capability Minor revision number:         1
  Total amount of global memory:                 536150016 bytes
  Number of multiprocessors:                     4
  Number of cores:                               32
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       16384 bytes
  Total number of registers available per block: 8192
  Warp size:                                     32
  Maximum number of threads per block:           512
  Maximum sizes of each dimension of a block:    512 x 512 x 64
  Maximum sizes of each dimension of a grid:     65535 x 65535 x 1
  Maximum memory pitch:                          262144 bytes
  Texture alignment:                             256 bytes
  Clock rate:                                    1.40 GHz
  Concurrent copy and execution:                 Yes
  Run time limit on kernels:                     Yes
  Integrated:                                    No
  Support host page-locked memory mapping:       No
  Compute mode:                                  Default (multiple host threads can use this device simultaneously)

Test PASSED

Press ENTER to exit...





이 이상의 기술적 내용은 위키에 정리 ㄱㄱ.

'Tech' 카테고리의 다른 글

SICP 근황  (8) 2009.12.01
django 삽질  (3) 2009.11.19
CUDA Driver/Toolkit/SDK 설치하기 (Ubuntu 9.04 Jaunty)  (2) 2009.09.17
Parameter vs Argument  (3) 2009.01.21
GEB: MU puzzle  (4) 2008.10.20
MySQL -> XML: CDATA Sanitize?  (2) 2008.09.26
Trackbacks 0 : Comments 2
  1. etnalry 2009.09.17 21:51 Modify/Delete Reply

    뭘 할려는걸까..

Write a comment