SlideShare a Scribd company logo
1 of 12
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

Parallel Query in AWS Aurora MySQL
Parallel Query in AWS Aurora MySQLParallel Query in AWS Aurora MySQL
Parallel Query in AWS Aurora MySQLMydbops
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners HubSpot
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective GitChanwoong Kim
 
Adding a BOLT pass
Adding a BOLT passAdding a BOLT pass
Adding a BOLT passAmir42407
 
今風なデスクトップアプリのモダンインストーラー開発
今風なデスクトップアプリのモダンインストーラー開発今風なデスクトップアプリのモダンインストーラー開発
今風なデスクトップアプリのモダンインストーラー開発Kaoru Nakajima
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説Masahiko Sawada
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザktateish
 
Xamarin.forms navigation overview
Xamarin.forms navigation overviewXamarin.forms navigation overview
Xamarin.forms navigation overviewAtsushi Nakamura
 
Application Profiling for Memory and Performance
Application Profiling for Memory and PerformanceApplication Profiling for Memory and Performance
Application Profiling for Memory and Performancepradeepfn
 
Linux Performance Profiling and Monitoring
Linux Performance Profiling and MonitoringLinux Performance Profiling and Monitoring
Linux Performance Profiling and MonitoringGeorg Schönberger
 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3Angel Boy
 
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計Yuichi Adachi
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーSaeko Yamamoto
 
Git 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using GitGit 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using GitGeoff Hoffman
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチKazuki Onishi
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git민태 김
 
PowerDNS with MySQL
PowerDNS with MySQLPowerDNS with MySQL
PowerDNS with MySQLI Goo Lee
 
Présentation de git
Présentation de gitPrésentation de git
Présentation de gitJulien Blin
 

What's hot (20)

Parallel Query in AWS Aurora MySQL
Parallel Query in AWS Aurora MySQLParallel Query in AWS Aurora MySQL
Parallel Query in AWS Aurora MySQL
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
Adding a BOLT pass
Adding a BOLT passAdding a BOLT pass
Adding a BOLT pass
 
今風なデスクトップアプリのモダンインストーラー開発
今風なデスクトップアプリのモダンインストーラー開発今風なデスクトップアプリのモダンインストーラー開発
今風なデスクトップアプリのモダンインストーラー開発
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
Xamarin.forms navigation overview
Xamarin.forms navigation overviewXamarin.forms navigation overview
Xamarin.forms navigation overview
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 
Application Profiling for Memory and Performance
Application Profiling for Memory and PerformanceApplication Profiling for Memory and Performance
Application Profiling for Memory and Performance
 
Linux Performance Profiling and Monitoring
Linux Performance Profiling and MonitoringLinux Performance Profiling and Monitoring
Linux Performance Profiling and Monitoring
 
Git real slides
Git real slidesGit real slides
Git real slides
 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3
 
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダー
 
Git 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using GitGit 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using Git
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
 
PowerDNS with MySQL
PowerDNS with MySQLPowerDNS with MySQL
PowerDNS with MySQL
 
Présentation de git
Présentation de gitPrésentation de git
Présentation de git
 

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 NumPyTravis 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
병렬프로그래밍과 CudaSeok-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 이해하기_20160815Yong 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
 
[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
 
Oracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker OverviewOracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker OverviewTaewan 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, VS2015youngjoon 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으로 진화 하기_정동진.pdfeastarJeong2
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제Kiyoung Moon
 
CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018CUDA 프로그래밍 기초 MODUCON2018
CUDA 프로그래밍 기초 MODUCON2018Shengzhe 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!"); 그 이상의 콘솔 프로그래밍
 
Oracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker OverviewOracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker Overview
 
201702-Oracle Container Cloud Service
201702-Oracle Container Cloud Service201702-Oracle Container Cloud Service
201702-Oracle Container Cloud Service
 
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
 

Recently uploaded

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 

Recently uploaded (8)

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 

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