SlideShare a Scribd company logo
pyOpenCL
2015/06/15
By SJ
(seongjun.kim.0312@gmail.com)
가난한 고학생들을 위해
인텔 GPU로 시작하는
저렴한 병렬처리
1
OpenCL?
• OpenCL은 애플이 제안하고 여러 반도체 업체가 동참한 병렬처리에 대한 산업 표
준 입니다.
• 그래픽 카드를 이용한 병렬처리(gpgpu)를 제공하고 있으며, nvidia의 cuda와 일종
의 경쟁 관계를 가지고 있습니다. (cuda가 더 편리하다는 평가 입니다. 그러나 업
체 독점 입니다.)
• 병렬처리는 요즈음 컴퓨터 과학과 로봇계의 핫 이슈인 머신러닝, 영상처리 등에 매
우 광범위하게 사용되며, 계산 시간을 줄이는데 적지 않은 역할을 하고 있습니다.
(약 30%의 속도 증가가 보고 됨)
2
누구를 위해?
• 이 짧은 슬라이드는 다음 독자를 대상으로 작성 되었습니다.
• Python과 c/c++ 문법에 대한 약간의 경험
• 병렬처리에 대한 뜨거운 관심
• 그러나 당장 좋은 그래픽 카드를 살 여유는 없음
• 윈도우즈 8 or 10 사용 중 (64bit를 상정함)
• 인텔의 내장형 그래픽 카드 사용 중 (hd3000~5500)
3
준비물
• 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)
4
intel runtime & anaconda
• 인텔의 런타임 환경을 설치 합니다.
• anaconda도 설치 합니다. 단, 전체 사용자를 위한 설치를 해 주어야 합니다. 그렇
지 않으면 path 설정을 수동으로 해야 하는 등의 번거로움이 발생 합니다.
• anaconda의 설치에 문제가 없으면 윈도우즈의 런처에서 ipython을 발견할 수 있
습니다. 또한, c:anaconda 폴더가 생성 되었음을 확인할 수 있습니다.
5
get_pip.py로 pip 설치
• 파일 탐색기를 열어 get_pip가 다운로드 된 디렉토리로 이동 합니다.
• 그 상태에서 shift+우클릭을 합니다.
• 여기서 명령 창 열기를 클릭 합니다.
• 열린 터미널에서 다음 명령을 입력 합니다.
• python get_pip
6
pyOpenCL 설치
• 이번엔 pyopencl-2015.1-cp27-none-win_amd64.whl가 다운로드 된 디렉토리로
이동 합니다. (보통은 C:UsersUSERNAMEDownloads 겠죠?)
• 그 상태에서 shift+우클릭을 합니다.
• 여기서 명령 창 열기를 클릭 합니다.
• 열린 터미널에서 다음 명령을 입력 합니다.
• python –m pip install pyopencl-2015.1-cp27-none-win_amd64.whl
7
pyOpenCV 설치
• 영상처리에 있어서 병렬처리는 상당히 매력적인 한 수 입니다. 사용하려는 코어를
위한 커널 코드와 메모리 할당은 약간은 귀찮고 어렵기도 하지만, 한번 익혀 두면
알고리즘의 성능 향상에 상당히 도움이 됩니다. 최근 발표된 opencv3은 opencl과
상당한 통합을 이룬바 있습니다.
• 자, 다운로드 했던 opencv-2.4.10.exe를 실행하면 어디에 압축을 풀지 물어 봅니다.
기억해 두시기 바랍니다.
• 압축이 모두 풀리면 어딘가에 opencv 폴더가 생성이 되어 있습니다.
• 탐색기를 이용해 ….opencvbuildpython2.7x64 로 이동 합니다.
• cv2.pyd 파일이 있을 것 입니다. 이 파일을 python의 site-package로 복사해 줍니
다. 예를들어, 제 경우에는…
• C:AnacondaLibsite-packages 입니다.
8
환경 변수 입력
• 물론 우리는 가난하니까 선택권이 별로 없지만, 친절한 OpenCL은 코드가 실행 될
때 마다 우리에게 자꾸 물어 옵니다. ‘너 cpu는 뭐 쓰고, gpu는 뭐 쓸래?’
• 고맙지만 사양 합니다. 고놈의 주디를 틀어 막기 위해 환경 변수를 미리 정해 놓기
로 합니다.
• 시스템 – 고급시스템설정 – 시스템 속성으로 갑니다.
• 환경 변수를 클릭하면 사용자 변수와 시스템 변수가 있습니다.
• 시스템 변수의 새로 만들기를 클릭 합니다.
• PYOPENCL_CTX와 0:1을 아래와 같이 입력 합니다.
9
확인!!
• 이제, 설치는 모두 끝났습니다. 잘 설치가 되었을까요?
• ipython을 실행 하고 다음과 같이 입력 해봅니다.
• import cv2
• import pyopencl
• 위의 두 라이브러리를 잘 로드 했다면 설치는 무사히 완료 된 것 입니다.
• 수고 하셨습니다.
10
뽀오나쓰 스테이지-
• 간단한 코드를 통해 코드 구조를 살펴 봅시다.
• 아래 코드는 python 코드가 컨텍스트를 만들고 작업 큐를 할당하며, 버퍼를 만들
어 커널 코드에 건네는 과정을 담고 있습니다. 이 코드에서 커널 코드는 메모리에
대한 작업은 하지 않습니다만 자신의 id를 확인하는 방법을 보여 줍니다.
11
좋은 예제들
• 현재 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)
• 그럼, 즐거운 병렬처리 되시기 바랍니다.
12

More Related Content

What's hot

BPF Internals (eBPF)
BPF Internals (eBPF)BPF Internals (eBPF)
BPF Internals (eBPF)
Brendan Gregg
 
Dpdk pmd
Dpdk pmdDpdk pmd
Dpdk pmd
Masaru Oki
 
Memory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux KernelMemory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux Kernel
Adrian Huang
 
Git basics
Git basicsGit basics
Git basics
GHARSALLAH Mohamed
 
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
WON JOON YOO
 
Google V8 engine
Google V8 engineGoogle V8 engine
Google V8 engine
Xuân Thu Nguyễn
 
semaphore & mutex.pdf
semaphore & mutex.pdfsemaphore & mutex.pdf
semaphore & mutex.pdf
Adrian Huang
 
Doxygen 사용법
Doxygen 사용법Doxygen 사용법
Doxygen 사용법
YoungSu Son
 
BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)
Akihiro Suda
 
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Pierre-jean Texier
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
Ippon
 
C++20 the small things - Timur Doumler
C++20 the small things - Timur DoumlerC++20 the small things - Timur Doumler
C++20 the small things - Timur Doumler
corehard_by
 
A Journey to Boot Linux on Raspberry Pi
A Journey to Boot Linux on Raspberry PiA Journey to Boot Linux on Raspberry Pi
A Journey to Boot Linux on Raspberry Pi
Jian-Hong Pan
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
 
Qemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System EmulationQemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System Emulation
National Cheng Kung University
 
Odoo's Test Framework - Learn Best Practices
Odoo's Test Framework - Learn Best PracticesOdoo's Test Framework - Learn Best Practices
Odoo's Test Framework - Learn Best Practices
Odoo
 
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
Seungmo Koo
 
Lock free queue
Lock free queueLock free queue
Lock free queue
Bongseok Cho
 
파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101
정주 김
 
MongoDB
MongoDBMongoDB
MongoDB
wiTTyMinds1
 

What's hot (20)

BPF Internals (eBPF)
BPF Internals (eBPF)BPF Internals (eBPF)
BPF Internals (eBPF)
 
Dpdk pmd
Dpdk pmdDpdk pmd
Dpdk pmd
 
Memory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux KernelMemory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux Kernel
 
Git basics
Git basicsGit basics
Git basics
 
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
 
Google V8 engine
Google V8 engineGoogle V8 engine
Google V8 engine
 
semaphore & mutex.pdf
semaphore & mutex.pdfsemaphore & mutex.pdf
semaphore & mutex.pdf
 
Doxygen 사용법
Doxygen 사용법Doxygen 사용법
Doxygen 사용법
 
BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)BuildKitによる高速でセキュアなイメージビルド (LT)
BuildKitによる高速でセキュアなイメージビルド (LT)
 
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
C++20 the small things - Timur Doumler
C++20 the small things - Timur DoumlerC++20 the small things - Timur Doumler
C++20 the small things - Timur Doumler
 
A Journey to Boot Linux on Raspberry Pi
A Journey to Boot Linux on Raspberry PiA Journey to Boot Linux on Raspberry Pi
A Journey to Boot Linux on Raspberry Pi
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Qemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System EmulationQemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System Emulation
 
Odoo's Test Framework - Learn Best Practices
Odoo's Test Framework - Learn Best PracticesOdoo's Test Framework - Learn Best Practices
Odoo's Test Framework - Learn Best Practices
 
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
 
Lock free queue
Lock free queueLock free queue
Lock free queue
 
파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101
 
MongoDB
MongoDBMongoDB
MongoDB
 

Viewers also liked

Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Ki-Hwan Kim
 
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션
Seongjun Kim
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
내훈 정
 
Numba: Array-oriented Python Compiler for NumPy
Numba: Array-oriented Python Compiler for NumPyNumba: Array-oriented Python Compiler for NumPy
Numba: Array-oriented Python Compiler for NumPy
Travis Oliphant
 
Svn에서 git으로 이주하기
Svn에서 git으로 이주하기Svn에서 git으로 이주하기
Svn에서 git으로 이주하기Seunghwa Song
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
Ubuntu Korea Community
 
NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템
gon
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda
Seok-joon Yun
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법
Yong Joon Moon
 
진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용
Sunwung Jin
 
OpenCV 에서 OpenCL 살짝 써보기
OpenCV 에서 OpenCL 살짝 써보기OpenCV 에서 OpenCL 살짝 써보기
OpenCV 에서 OpenCL 살짝 써보기
Seunghwa Song
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
Jinuk Kim
 
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
Wooram Hwang
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815
Yong Joon Moon
 
NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계tcaesvk
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
Yong Joon Moon
 
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기Kiheon Park
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기
Yong Joon Moon
 
머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)
홍배 김
 

Viewers also liked (20)

Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
 
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
Numba: Array-oriented Python Compiler for NumPy
Numba: Array-oriented Python Compiler for NumPyNumba: Array-oriented Python Compiler for NumPy
Numba: Array-oriented Python Compiler for NumPy
 
Svn에서 git으로 이주하기
Svn에서 git으로 이주하기Svn에서 git으로 이주하기
Svn에서 git으로 이주하기
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
 
NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템NDC2014 코인박스@NDC 치킨럽포스트모템
NDC2014 코인박스@NDC 치킨럽포스트모템
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법
 
진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용
 
OpenCV 에서 OpenCL 살짝 써보기
OpenCV 에서 OpenCL 살짝 써보기OpenCV 에서 OpenCL 살짝 써보기
OpenCV 에서 OpenCL 살짝 써보기
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815
 
NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기
 
머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)
 

Similar to pyOpenCL 입문

GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
Youngmin Koo
 
JetsonTX2 Python
 JetsonTX2 Python  JetsonTX2 Python
JetsonTX2 Python
taeseon ryu
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
Dan Kang (강동한)
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼
Kenu, GwangNam Heo
 
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Joongi Kim
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
NDOORS
 
201702-Oracle Container Cloud Service
201702-Oracle Container Cloud Service201702-Oracle Container Cloud Service
201702-Oracle Container Cloud Service
오라클 클라우드
 
Oracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker OverviewOracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker Overview
Taewan Kim
 
Eclipse를 이용한 android_open_cv_개발_환경_구축_방법
Eclipse를 이용한 android_open_cv_개발_환경_구축_방법Eclipse를 이용한 android_open_cv_개발_환경_구축_방법
Eclipse를 이용한 android_open_cv_개발_환경_구축_방법
HanBum Seo
 
Caffe Tutorial with window10, VS2015
Caffe Tutorial with window10, VS2015Caffe Tutorial with window10, VS2015
Caffe Tutorial with window10, VS2015
youngjoon kim
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
Jeongkyu Shin
 
데이터분석의 길 2: “고수는 최고의 연장을 사용한다” (툴채인)
데이터분석의 길 2:  “고수는 최고의 연장을 사용한다” (툴채인)데이터분석의 길 2:  “고수는 최고의 연장을 사용한다” (툴채인)
데이터분석의 길 2: “고수는 최고의 연장을 사용한다” (툴채인)
Jaimie Kwon (권재명)
 
강좌 03 개발환경 구축
강좌 03 개발환경 구축강좌 03 개발환경 구축
강좌 03 개발환경 구축
chcbaram
 
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Jongwon Han
 
C++11에서 주의해야할 것들
C++11에서 주의해야할 것들C++11에서 주의해야할 것들
C++11에서 주의해야할 것들
Sangwook Kwon
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows TerminalOnGameServer
 
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
eastarJeong2
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제
Kiyoung Moon
 
CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018
Shengzhe Li
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
내훈 정
 

Similar to pyOpenCL 입문 (20)

GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
 
JetsonTX2 Python
 JetsonTX2 Python  JetsonTX2 Python
JetsonTX2 Python
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼
 
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 
201702-Oracle Container Cloud Service
201702-Oracle Container Cloud Service201702-Oracle Container Cloud Service
201702-Oracle Container Cloud Service
 
Oracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker OverviewOracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker Overview
 
Eclipse를 이용한 android_open_cv_개발_환경_구축_방법
Eclipse를 이용한 android_open_cv_개발_환경_구축_방법Eclipse를 이용한 android_open_cv_개발_환경_구축_방법
Eclipse를 이용한 android_open_cv_개발_환경_구축_방법
 
Caffe Tutorial with window10, VS2015
Caffe Tutorial with window10, VS2015Caffe Tutorial with window10, VS2015
Caffe Tutorial with window10, VS2015
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
데이터분석의 길 2: “고수는 최고의 연장을 사용한다” (툴채인)
데이터분석의 길 2:  “고수는 최고의 연장을 사용한다” (툴채인)데이터분석의 길 2:  “고수는 최고의 연장을 사용한다” (툴채인)
데이터분석의 길 2: “고수는 최고의 연장을 사용한다” (툴채인)
 
강좌 03 개발환경 구축
강좌 03 개발환경 구축강좌 03 개발환경 구축
강좌 03 개발환경 구축
 
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
 
C++11에서 주의해야할 것들
C++11에서 주의해야할 것들C++11에서 주의해야할 것들
C++11에서 주의해야할 것들
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
 
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제
 
CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
 

pyOpenCL 입문

  • 1. pyOpenCL 2015/06/15 By SJ (seongjun.kim.0312@gmail.com) 가난한 고학생들을 위해 인텔 GPU로 시작하는 저렴한 병렬처리 1
  • 2. OpenCL? • OpenCL은 애플이 제안하고 여러 반도체 업체가 동참한 병렬처리에 대한 산업 표 준 입니다. • 그래픽 카드를 이용한 병렬처리(gpgpu)를 제공하고 있으며, nvidia의 cuda와 일종 의 경쟁 관계를 가지고 있습니다. (cuda가 더 편리하다는 평가 입니다. 그러나 업 체 독점 입니다.) • 병렬처리는 요즈음 컴퓨터 과학과 로봇계의 핫 이슈인 머신러닝, 영상처리 등에 매 우 광범위하게 사용되며, 계산 시간을 줄이는데 적지 않은 역할을 하고 있습니다. (약 30%의 속도 증가가 보고 됨) 2
  • 3. 누구를 위해? • 이 짧은 슬라이드는 다음 독자를 대상으로 작성 되었습니다. • Python과 c/c++ 문법에 대한 약간의 경험 • 병렬처리에 대한 뜨거운 관심 • 그러나 당장 좋은 그래픽 카드를 살 여유는 없음 • 윈도우즈 8 or 10 사용 중 (64bit를 상정함) • 인텔의 내장형 그래픽 카드 사용 중 (hd3000~5500) 3
  • 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) 4
  • 5. intel runtime & anaconda • 인텔의 런타임 환경을 설치 합니다. • anaconda도 설치 합니다. 단, 전체 사용자를 위한 설치를 해 주어야 합니다. 그렇 지 않으면 path 설정을 수동으로 해야 하는 등의 번거로움이 발생 합니다. • anaconda의 설치에 문제가 없으면 윈도우즈의 런처에서 ipython을 발견할 수 있 습니다. 또한, c:anaconda 폴더가 생성 되었음을 확인할 수 있습니다. 5
  • 6. get_pip.py로 pip 설치 • 파일 탐색기를 열어 get_pip가 다운로드 된 디렉토리로 이동 합니다. • 그 상태에서 shift+우클릭을 합니다. • 여기서 명령 창 열기를 클릭 합니다. • 열린 터미널에서 다음 명령을 입력 합니다. • python get_pip 6
  • 7. pyOpenCL 설치 • 이번엔 pyopencl-2015.1-cp27-none-win_amd64.whl가 다운로드 된 디렉토리로 이동 합니다. (보통은 C:UsersUSERNAMEDownloads 겠죠?) • 그 상태에서 shift+우클릭을 합니다. • 여기서 명령 창 열기를 클릭 합니다. • 열린 터미널에서 다음 명령을 입력 합니다. • python –m pip install pyopencl-2015.1-cp27-none-win_amd64.whl 7
  • 8. pyOpenCV 설치 • 영상처리에 있어서 병렬처리는 상당히 매력적인 한 수 입니다. 사용하려는 코어를 위한 커널 코드와 메모리 할당은 약간은 귀찮고 어렵기도 하지만, 한번 익혀 두면 알고리즘의 성능 향상에 상당히 도움이 됩니다. 최근 발표된 opencv3은 opencl과 상당한 통합을 이룬바 있습니다. • 자, 다운로드 했던 opencv-2.4.10.exe를 실행하면 어디에 압축을 풀지 물어 봅니다. 기억해 두시기 바랍니다. • 압축이 모두 풀리면 어딘가에 opencv 폴더가 생성이 되어 있습니다. • 탐색기를 이용해 ….opencvbuildpython2.7x64 로 이동 합니다. • cv2.pyd 파일이 있을 것 입니다. 이 파일을 python의 site-package로 복사해 줍니 다. 예를들어, 제 경우에는… • C:AnacondaLibsite-packages 입니다. 8
  • 9. 환경 변수 입력 • 물론 우리는 가난하니까 선택권이 별로 없지만, 친절한 OpenCL은 코드가 실행 될 때 마다 우리에게 자꾸 물어 옵니다. ‘너 cpu는 뭐 쓰고, gpu는 뭐 쓸래?’ • 고맙지만 사양 합니다. 고놈의 주디를 틀어 막기 위해 환경 변수를 미리 정해 놓기 로 합니다. • 시스템 – 고급시스템설정 – 시스템 속성으로 갑니다. • 환경 변수를 클릭하면 사용자 변수와 시스템 변수가 있습니다. • 시스템 변수의 새로 만들기를 클릭 합니다. • PYOPENCL_CTX와 0:1을 아래와 같이 입력 합니다. 9
  • 10. 확인!! • 이제, 설치는 모두 끝났습니다. 잘 설치가 되었을까요? • ipython을 실행 하고 다음과 같이 입력 해봅니다. • import cv2 • import pyopencl • 위의 두 라이브러리를 잘 로드 했다면 설치는 무사히 완료 된 것 입니다. • 수고 하셨습니다. 10
  • 11. 뽀오나쓰 스테이지- • 간단한 코드를 통해 코드 구조를 살펴 봅시다. • 아래 코드는 python 코드가 컨텍스트를 만들고 작업 큐를 할당하며, 버퍼를 만들 어 커널 코드에 건네는 과정을 담고 있습니다. 이 코드에서 커널 코드는 메모리에 대한 작업은 하지 않습니다만 자신의 id를 확인하는 방법을 보여 줍니다. 11
  • 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) • 그럼, 즐거운 병렬처리 되시기 바랍니다. 12