pyOpenCL 입문

12
pyOpenCL 2015/06/15 By SJ ([email protected] ) 가가가 가가가가가 가가 가가 GPU 가 가가가가 가가가 가가가가 1

Transcript of pyOpenCL 입문

Page 1: pyOpenCL 입문

1

pyOpenCL

2015/06/15

By SJ

([email protected])

가난한 고학생들을 위해인텔 GPU 로 시작하는

저렴한 병렬처리

Page 2: pyOpenCL 입문

2

OpenCL?

• OpenCL 은 애플이 제안하고 여러 반도체 업체가 동참한 병렬처리에 대한 산업 표준 입니다 .

• 그래픽 카드를 이용한 병렬처리 (gpgpu) 를 제공하고 있으며 , nvidia 의 cuda 와 일종의 경쟁 관계를 가지고 있습니다 . (cuda 가 더 편리하다는 평가 입니다 . 그러나 업체 독점 입니다 .)

• 병렬처리는 요즈음 컴퓨터 과학과 로봇계의 핫 이슈인 머신러닝 , 영상처리 등에 매우 광범위하게 사용되며 , 계산 시간을 줄이는데 적지 않은 역할을 하고 있습니다 . ( 약 30%

의 속도 증가가 보고 됨 )

Page 3: pyOpenCL 입문

3

누구를 위해 ?

• 이 짧은 슬라이드는 다음 독자를 대상으로 작성 되었습니다 .

• Python 과 c/c++ 문법에 대한 약간의 경험

• 병렬처리에 대한 뜨거운 관심

• 그러나 당장 좋은 그래픽 카드를 살 여유는 없음

• 윈도우즈 8 or 10 사용 중 (64bit 를 상정함 )

• 인텔의 내장형 그래픽 카드 사용 중 (hd3000~5500)

Page 4: pyOpenCL 입문

4

준비물

• pyOpenCL 설치를 완료 하기 위해서 다음과 같은 파일들이 준비 되어야 합니다 .

• intel OpenCL Runtime: 무엇보다 중요한 런타임 입니다 . (

https://software.intel.com/en-us/articles/opencl-drivers, OpenCL™ Runtime 15.1 for

Intel® Core™ and Intel® Xeon® Processors for Windows* OS (64-bit & 32-bit))

• anaconda: python 과 numpy, matplolib 등의 유용한 라이브러리가 포함 됩니다 . (

http://continuum.io/downloads, 64bit, python 2.7)

• get_pip.py: python 패키지 관리자인 pip 를 설치하기 위한 스크립트 입니다 . (

https://pip.pypa.io/en/latest/installing.html)

• pyOpenCL wrapper: python 과 OpenCL 을 연결하기 위한 wrapper 입니다 . (

http://www.lfd.uci.edu/~gohlke/pythonlibs/,

pyopencl 2015.1 cp27 none win_amd64.whl‑ ‑ ‑ ‑ )

• OpenCV: python 과 OpenCV 를 연결하기 위한 wrapper 입니다 .

(http://sourceforge.net/.../opencv-2.4.10.exe/download)

Page 5: pyOpenCL 입문

5

intel runtime & anaconda

• 인텔의 런타임 환경을 설치 합니다 .

• anaconda 도 설치 합니다 . 단 , 전체 사용자를 위한 설치를 해 주어야 합니다 . 그렇지 않으면 path 설정을 수동으로 해야 하는 등의 번거로움이 발생 합니다 .

• anaconda 의 설치에 문제가 없으면 윈도우즈의 런처에서 ipython 을 발견할 수 있습니다 .

또한 , c:\anaconda 폴더가 생성 되었음을 확인할 수 있습니다 .

Page 6: pyOpenCL 입문

6

get_pip.py 로 pip 설치

• 파일 탐색기를 열어 get_pip 가 다운로드 된 디렉토리로 이동 합니다 .

• 그 상태에서 shift+ 우클릭을 합니다 .

• 여기서 명령 창 열기를 클릭 합니다 .

• 열린 터미널에서 다음 명령을 입력 합니다 .

• python get_pip

Page 7: pyOpenCL 입문

7

pyOpenCL 설치

• 이번엔 pyopencl-2015.1-cp27-none-win_amd64.whl 가 다운로드 된 디렉토리로 이동 합니다 . ( 보통은 C:\Users\USERNAME\Downloads 겠죠 ?)

• 그 상태에서 shift+ 우클릭을 합니다 .

• 여기서 명령 창 열기를 클릭 합니다 .

• 열린 터미널에서 다음 명령을 입력 합니다 .

• python –m pip install pyopencl-2015.1-cp27-none-win_amd64.whl

Page 8: pyOpenCL 입문

8

pyOpenCV 설치

• 영상처리에 있어서 병렬처리는 상당히 매력적인 한 수 입니다 . 사용하려는 코어를 위한 커널 코드와 메모리 할당은 약간은 귀찮고 어렵기도 하지만 , 한번 익혀 두면 알고리즘의 성능 향상에 상당히 도움이 됩니다 . 최근 발표된 opencv3 은 opencl 과 상당한 통합을 이룬바 있습니다 .

• 자 , 다운로드 했던 opencv-2.4.10.exe 를 실행하면 어디에 압축을 풀지 물어 봅니다 .

기억해 두시기 바랍니다 .

• 압축이 모두 풀리면 어딘가에 opencv 폴더가 생성이 되어 있습니다 .

• 탐색기를 이용해 … .\opencv\build\python\2.7\x64 로 이동 합니다 .

• cv2.pyd 파일이 있을 것 입니다 . 이 파일을 python 의 site-package 로 복사해 줍니다 .

예를들어 , 제 경우에는…

• C:\Anaconda\Lib\site-packages 입니다 .

Page 9: pyOpenCL 입문

9

환경 변수 입력

• 물론 우리는 가난하니까 선택권이 별로 없지만 , 친절한 OpenCL 은 코드가 실행 될 때 마다 우리에게 자꾸 물어 옵니다 . ‘ 너 cpu 는 뭐 쓰고 , gpu 는 뭐 쓸래 ?’

• 고맙지만 사양 합니다 . 고놈의 주디를 틀어 막기 위해 환경 변수를 미리 정해 놓기로 합니다 .

• 시스템 – 고급시스템설정 – 시스템 속성으로 갑니다 .

• 환경 변수를 클릭하면 사용자 변수와 시스템 변수가 있습니다 .

• 시스템 변수의 새로 만들기를 클릭 합니다 .

• PYOPENCL_CTX 와 0:1 을 아래와 같이 입력 합니다 .

Page 10: pyOpenCL 입문

10

확인 !!

• 이제 , 설치는 모두 끝났습니다 . 잘 설치가 되었을까요 ?

• ipython 을 실행 하고 다음과 같이 입력 해봅니다 .

• import cv2

• import pyopencl

• 위의 두 라이브러리를 잘 로드 했다면 설치는 무사히 완료 된 것 입니다 .

• 수고 하셨습니다 .

Page 11: pyOpenCL 입문

11

뽀오나쓰 스테이지 -

• 간단한 코드를 통해 코드 구조를 살펴 봅시다 .

• 아래 코드는 python 코드가 컨텍스트를 만들고 작업 큐를 할당하며 , 버퍼를 만들어 커널 코드에 건네는 과정을 담고 있습니다 . 이 코드에서 커널 코드는 메모리에 대한 작업은 하지 않습니다만 자신의 id 를 확인하는 방법을 보여 줍니다 .

Page 12: pyOpenCL 입문

12

좋은 예제들

• 현재 Apple 소속인 Aaftap Munshi 아저씨는 OpenGL 에도 많은 영향을 끼쳤습니다 .

그의 책인 OpenCL Programming Guide 는 입문서로 손색이 없습니다 . (http://

www.amazon.com/OpenCL-Programming-Guide-Aaftab-Munshi/dp/0321749642)

• 또한 , 이 책의 모든 코드는 깃헙에 모두 공개 되어 있습니다 . (https://

github.com/bgaster/opencl-book-samples)

• 그럼 , 즐거운 병렬처리 되시기 바랍니다 .