SlideShare une entreprise Scribd logo
1  sur  8
Télécharger pour lire hors ligne
Python による並列プログラミング	
 

      -GPGPU も-	
 


                     <日付 2011/08/31> 渡辺 雄作


                                             	
 




           1
目次
概要 ....................................................................................................................................... 3
   検証内容 ................................................................................................................................ 3
   検証環境 ................................................................................................................................ 3
シングルスレッドによる実行 ...................................................................................................... 3
Threading による並列化 ........................................................................................................ 3
Multiprocessing による並列化 ............................................................................................... 4
GPGPU を使った並列化 ........................................................................................................ 5
   セットアップ.............................................................................................................................. 6
      Numpy インストール ............................................................................................................ 6
      Boost インストール ............................................................................................................... 7
      pyCUDA インストール ......................................................................................................... 8
   実行 ........................................................................................................................................ 8
考察 ....................................................................................................................................... 8




                                                                       2
概要

検証内容
256 * 256 の行列計算について各並列化手法を試行する


検証環境
OS            CentOS release 5.6
CPU           Intel(R) Core(TM) i3 CPU 540         3.07GHz
memory        8GB(DDR3 1333)


シングルスレッドによる実行
ソースコードは single_thread_execute.py に示す。
実行結果は以下の通り
1 回目:22.2145290375(sec)
2 回目:23.1715860367(sec)
3 回目:23.1783339977(sec)


Threading による並列化
Threading モジュールを使用し、Thread を 4 つ生成し並列で行列計算処理を行う。
ソースコードは multi_thread_execute.py に示す。


python の threading モジュールはインタプリタによる擬似スレッドとなっており、グローバルインター
プリターロック(GIL)を取得したスレッドが実行する機構になっている。
そのため速度は特に速度の改善は見られなかった。(むしろやや遅くなった)
1 回目:26.9206619263(sec)
2 回目:25.2392418385(sec)
3 回目:23.6878399849(sec)


top コマンドで見る限り python の 1 プロセス自体はコアスケールはしているのが確認できた。
top - 19:22:32 up 22:44,   2 users,   load average: 1.13, 0.49, 0.19
Tasks: 133 total,   1 running, 132 sleeping,       0 stopped,    0 zombie
Cpu0   : 12.6%us,   4.0%sy,    0.0%ni, 83.4%id,     0.0%wa,     0.0%hi,   0.0%si,   0.0%st
Cpu1   : 13.7%us,   3.7%sy,    0.0%ni, 82.7%id,     0.0%wa,     0.0%hi,   0.0%si,   0.0%st
Cpu2   : 32.3%us,   3.3%sy,    0.0%ni, 64.3%id,     0.0%wa,     0.0%hi,   0.0%si,   0.0%st
Cpu3   : 24.9%us,   2.7%sy,    0.0%ni, 72.4%id,     0.0%wa,     0.0%hi,   0.0%si,   0.0%st
 4コアを使い切れてはいない。



                                               3
Multiprocessing による並列化

multiprocessing モジュールを使用し、4 プロセスを生成し、並列で行列計算処理を行う
ソースコードは multi_process_execute.py に示す。


Python2.6 で導入されたプロセス並列モジュール。
インターフェースは threading モジュールとよく似ているため、移行しやすい。
実行するとその名のとおりプロセスが 4 つ起動している事が確認できる(ひとつは親プロセス)
  PID USER                  PR     NI     VIRT      RES     SHR S %CPU %MEM                  TIME+
COMMAND
12974 root          18     0   181m     14m 1276 R 100.2      0.4     0:07.05 python
12976 root          18     0   181m     14m 1280 R 99.9      0.4     0:07.05 python
12975 root          19     0   181m     14m 1276 R 99.6      0.4     0:07.04 python
12972 root          25     0   181m     17m 4412 R 76.3      0.4     0:05.33 python
12977 root          25     0   181m     13m 1136 R 23.3      0.4     0:01.90 python


python プロセスをそのまま 4 つで並列計算しているため速度は改善が見られた。
1 回目:8.53098917007(sec)
2 回目:8.3674018383(sec)
3 回目:8.23075914383(sec)
 おおよそ 3 倍ぐらいになっている


CPU も 4 コアを使い切っていることが確認できた。
top - 14:42:16 up 2 days, 18:04,        2 users,   load average: 1.25, 0.54, 0.22
Tasks: 138 total,        6 running, 132 sleeping,       0 stopped,    0 zombie
Cpu0   : 73.8%us, 26.2%sy,         0.0%ni,   0.0%id,    0.0%wa,      0.0%hi,   0.0%si,   0.0%st
Cpu1   : 99.3%us,        0.3%sy,   0.0%ni,    0.3%id,     0.0%wa,    0.0%hi,   0.0%si,   0.0%st
Cpu2   :100.0%us,        0.0%sy,   0.0%ni,    0.0%id,     0.0%wa,    0.0%hi,   0.0%si,   0.0%st
Cpu3   : 99.7%us,        0.0%sy,   0.0%ni,    0.3%id,     0.0%wa,    0.0%hi,   0.0%si,   0.0%st




                                                    4
GPGPU を使った並列化

GPGPU の説明については

【再掲】【研究課題レポート抜粋】GPGPU によるパーソナルスーパーコンピュータの可能性

http://ameblo.jp/principia-ca/entry-10736425646.html

にて説明されているので割愛。




通常 C/C++から利用される NVidia CUDA の API を python から利用する。

python の CUDA バインディングとして pyCUDA が発表されているので、今回はこれを利用する

http://mathema.tician.de/software/pycuda




                                           5
セットアップ
    Numpy インストール


configure オプションは
python configure.py
--boost-inc-dir=/usr/local/include/boost/
--boost-lib-dir=/usr/local/lib/
--boost-python-libname=boost_python-xgcc42-mt
--cuda-root=/usr/local/cuda/
で指定した後に
make
make install

を行う。

 Mac にセットアップする場合は export MACOSX_DEPLOYMENT_TARGET=10.6 を環
境変数にセットする必要あり




                                            6
Boost インストール
./bootstrap.sh --prefix=/usr/local/
./b2 install


boost.python コンポーネントのインストールも必要なので、オプションを指定し
てから再ビルドをかける
./bootstrap.sh --prefix=/usr/local/ --with-libraries=python
./b2 install

 Component configuration:
      - chrono                                    : not building
      - date_time                              : not building
      - exception                             : not building
      - filesystem                          : not building
      - graph                                        : not building
      - graph_parallel                  : not building
      - iostreams                              : not building
      - math                                           : not building
      - mpi                                             : not building
      - program_options                  : not building
      - python                                     : building
      - random                                       : not building
      - regex                                      : not building
      - serialization                  : not building
      - signals                                 : not building
      - system                                     : not building
      - test                                        : not building
と出れば/usr/local/lib/libboost_python.a に出力されているのが確認できる
      - thread                                    : not building
      - wave                                           : not building


    pyCUDA インストール

./configure.py         --cuda-root=/home/x/cuda           --cudadrv-lib-dir=/usr/lib64/nvidia
--boost-python-libname=boost_python-mt --boost-thread-libname=boost_thread-mt

make


                                              7
make install

インストール完了後に

make tests

を実行してテストをパスすれば OK.




実行
pycuda モジュールを使用し、CUDA Thread を 64 * 64Thread 生成し並列で行列計算処理を行
う。
ソースコードは pycuda_execute.py に示す。




考察
C/C++を使う必要がある CUDA プログラミングにおいて、HOST 側のメモリやデバイス側のメモリ確保
など実際の計算処理の準備段階が非常に煩雑になりがちだが、pycuda を使うことによりかなり簡単に
(スクリプトっぽく)CUDA 計算処理が利用できるようになった。


CPU を使った計算処理(大規模なソートなど)をとりあえずの処理として行いたい場合は python +
CUDA で書くというのも選択肢だと感じた。


今後は pyOpenCL などの動向に注視していきたい。




                                 8

Contenu connexe

Tendances

GPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたGPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたRyo Sakamoto
 
Anaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみたAnaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみたYosuke Onoue
 
2015年度GPGPU実践基礎工学 第15回 GPGPU開発環境 (OpenCL)
2015年度GPGPU実践基礎工学 第15回 GPGPU開発環境(OpenCL)2015年度GPGPU実践基礎工学 第15回 GPGPU開発環境(OpenCL)
2015年度GPGPU実践基礎工学 第15回 GPGPU開発環境 (OpenCL)智啓 出川
 
20170726 py data.tokyo
20170726 py data.tokyo20170726 py data.tokyo
20170726 py data.tokyoManaMurakami1
 
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみるYasuhiro Yoshimura
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活Kuninobu SaSaki
 
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)なおき きしだ
 
A100 GPU 搭載! P4d インスタンス 使いこなしのコツ
A100 GPU 搭載! P4d インスタンス使いこなしのコツA100 GPU 搭載! P4d インスタンス使いこなしのコツ
A100 GPU 搭載! P4d インスタンス 使いこなしのコツKuninobu SaSaki
 
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア智啓 出川
 
1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法NVIDIA Japan
 
関東GPGPU勉強会資料
関東GPGPU勉強会資料関東GPGPU勉強会資料
関東GPGPU勉強会資料Kimikazu Kato
 
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用についてハイシンク創研 / Laboratory of Hi-Think Corporation
 
NVIDIA TESLA V100・CUDA 9 のご紹介
NVIDIA TESLA V100・CUDA 9 のご紹介NVIDIA TESLA V100・CUDA 9 のご紹介
NVIDIA TESLA V100・CUDA 9 のご紹介NVIDIA Japan
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterPreferred Networks
 
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来Preferred Networks
 
NVIDIA ディープラーニング入門
NVIDIA ディープラーニング入門NVIDIA ディープラーニング入門
NVIDIA ディープラーニング入門Seong-Hun Choe
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編Yosuke Onoue
 
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第1回 先端シミュレーションおよび産業界におけるGPUの役割
2015年度先端GPGPUシミュレーション工学特論 第1回 先端シミュレーションおよび産業界におけるGPUの役割2015年度先端GPGPUシミュレーション工学特論 第1回 先端シミュレーションおよび産業界におけるGPUの役割
2015年度先端GPGPUシミュレーション工学特論 第1回 先端シミュレーションおよび産業界におけるGPUの役割智啓 出川
 
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術智啓 出川
 

Tendances (20)

GPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたGPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみた
 
Anaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみたAnaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみた
 
2015年度GPGPU実践基礎工学 第15回 GPGPU開発環境 (OpenCL)
2015年度GPGPU実践基礎工学 第15回 GPGPU開発環境(OpenCL)2015年度GPGPU実践基礎工学 第15回 GPGPU開発環境(OpenCL)
2015年度GPGPU実践基礎工学 第15回 GPGPU開発環境 (OpenCL)
 
20170726 py data.tokyo
20170726 py data.tokyo20170726 py data.tokyo
20170726 py data.tokyo
 
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活
 
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)
 
A100 GPU 搭載! P4d インスタンス 使いこなしのコツ
A100 GPU 搭載! P4d インスタンス使いこなしのコツA100 GPU 搭載! P4d インスタンス使いこなしのコツ
A100 GPU 搭載! P4d インスタンス 使いこなしのコツ
 
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
 
1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法
 
関東GPGPU勉強会資料
関東GPGPU勉強会資料関東GPGPU勉強会資料
関東GPGPU勉強会資料
 
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
 
NVIDIA TESLA V100・CUDA 9 のご紹介
NVIDIA TESLA V100・CUDA 9 のご紹介NVIDIA TESLA V100・CUDA 9 のご紹介
NVIDIA TESLA V100・CUDA 9 のご紹介
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
 
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
 
NVIDIA ディープラーニング入門
NVIDIA ディープラーニング入門NVIDIA ディープラーニング入門
NVIDIA ディープラーニング入門
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
 
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
 
2015年度先端GPGPUシミュレーション工学特論 第1回 先端シミュレーションおよび産業界におけるGPUの役割
2015年度先端GPGPUシミュレーション工学特論 第1回 先端シミュレーションおよび産業界におけるGPUの役割2015年度先端GPGPUシミュレーション工学特論 第1回 先端シミュレーションおよび産業界におけるGPUの役割
2015年度先端GPGPUシミュレーション工学特論 第1回 先端シミュレーションおよび産業界におけるGPUの役割
 
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
 

En vedette

GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)智啓 出川
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門Shiqiao Du
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門NVIDIA Japan
 
Word2vecで大谷翔平の二刀流論争に終止符を打つ!
Word2vecで大谷翔平の二刀流論争に終止符を打つ!Word2vecで大谷翔平の二刀流論争に終止符を打つ!
Word2vecで大谷翔平の二刀流論争に終止符を打つ!Takami Sato
 
なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?Aki Ariga
 
Icml2015 論文紹介 sparse_subspace_clustering_with_missing_entries
Icml2015 論文紹介 sparse_subspace_clustering_with_missing_entriesIcml2015 論文紹介 sparse_subspace_clustering_with_missing_entries
Icml2015 論文紹介 sparse_subspace_clustering_with_missing_entriesTakami Sato
 
情報統計力学のすすめ
情報統計力学のすすめ情報統計力学のすすめ
情報統計力学のすすめNaoki Hayashi
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理Norishige Fukushima
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開Seiya Tokui
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Ryosuke Okuta
 
Pythonによる機械学習の最前線
Pythonによる機械学習の最前線Pythonによる機械学習の最前線
Pythonによる機械学習の最前線Kimikazu Kato
 
Chainer, Cupy入門
Chainer, Cupy入門Chainer, Cupy入門
Chainer, Cupy入門Yuya Unno
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Seiya Tokui
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 

En vedette (17)

PyCUDAの紹介
PyCUDAの紹介PyCUDAの紹介
PyCUDAの紹介
 
GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
 
Word2vecで大谷翔平の二刀流論争に終止符を打つ!
Word2vecで大谷翔平の二刀流論争に終止符を打つ!Word2vecで大谷翔平の二刀流論争に終止符を打つ!
Word2vecで大谷翔平の二刀流論争に終止符を打つ!
 
なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?
 
More modern gpu
More modern gpuMore modern gpu
More modern gpu
 
Icml2015 論文紹介 sparse_subspace_clustering_with_missing_entries
Icml2015 論文紹介 sparse_subspace_clustering_with_missing_entriesIcml2015 論文紹介 sparse_subspace_clustering_with_missing_entries
Icml2015 論文紹介 sparse_subspace_clustering_with_missing_entries
 
情報統計力学のすすめ
情報統計力学のすすめ情報統計力学のすすめ
情報統計力学のすすめ
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
 
Pythonによる機械学習の最前線
Pythonによる機械学習の最前線Pythonによる機械学習の最前線
Pythonによる機械学習の最前線
 
Chainer, Cupy入門
Chainer, Cupy入門Chainer, Cupy入門
Chainer, Cupy入門
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 

Similaire à Pythonによる並列プログラミング -GPGPUも-

関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなしMasahiro NAKAYAMA
 
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)Naoto MATSUMOTO
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Mori Shingo
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)Toru Furukawa
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondTaisuke Yamada
 
システムパフォーマンス勉強会#5
システムパフォーマンス勉強会#5システムパフォーマンス勉強会#5
システムパフォーマンス勉強会#5shingo suzuki
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む2bo 2bo
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)Mr. Vengineer
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!Yohei Fushii
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみるftnk
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺MITSUNARI Shigeo
 
MINCS – containers in the shell script
MINCS – containers in the shell scriptMINCS – containers in the shell script
MINCS – containers in the shell scriptMasami Hiramatsu
 
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれNGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれDNA Data Bank of Japan center
 
OSC2012-KANSAI@Kyoto JOSUG
OSC2012-KANSAI@Kyoto JOSUGOSC2012-KANSAI@Kyoto JOSUG
OSC2012-KANSAI@Kyoto JOSUGHideki Saito
 
170622 02
170622 02170622 02
170622 02openrtm
 

Similaire à Pythonによる並列プログラミング -GPGPUも- (20)

関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
 
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
システムパフォーマンス勉強会#5
システムパフォーマンス勉強会#5システムパフォーマンス勉強会#5
システムパフォーマンス勉強会#5
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
MINCS – containers in the shell script
MINCS – containers in the shell scriptMINCS – containers in the shell script
MINCS – containers in the shell script
 
PyMC mcmc
PyMC mcmcPyMC mcmc
PyMC mcmc
 
Puppet on AWS
Puppet on AWSPuppet on AWS
Puppet on AWS
 
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれNGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
 
OSC2012-KANSAI@Kyoto JOSUG
OSC2012-KANSAI@Kyoto JOSUGOSC2012-KANSAI@Kyoto JOSUG
OSC2012-KANSAI@Kyoto JOSUG
 
GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
 
170622 02
170622 02170622 02
170622 02
 

Plus de Yusaku Watanabe

組織をシステム化するReactiveManagement
組織をシステム化するReactiveManagement組織をシステム化するReactiveManagement
組織をシステム化するReactiveManagementYusaku Watanabe
 
エンジニアがプロダクトマネージャーに進化すると何が起きるのか
エンジニアがプロダクトマネージャーに進化すると何が起きるのかエンジニアがプロダクトマネージャーに進化すると何が起きるのか
エンジニアがプロダクトマネージャーに進化すると何が起きるのかYusaku Watanabe
 
Regional Scrum Gathering® Tokyo 2014
Regional Scrum Gathering® Tokyo 2014Regional Scrum Gathering® Tokyo 2014
Regional Scrum Gathering® Tokyo 2014Yusaku Watanabe
 
Jvm operation casual talks
Jvm operation casual talksJvm operation casual talks
Jvm operation casual talksYusaku Watanabe
 
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形Yusaku Watanabe
 
PageRankアルゴリズムを使った人事評価についての実験
PageRankアルゴリズムを使った人事評価についての実験PageRankアルゴリズムを使った人事評価についての実験
PageRankアルゴリズムを使った人事評価についての実験Yusaku Watanabe
 
スケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考えるスケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考えるYusaku Watanabe
 
実録 WEBエンジニアが Titanium Mobileアプリを開発するまで
実録 WEBエンジニアが Titanium Mobileアプリを開発するまで実録 WEBエンジニアが Titanium Mobileアプリを開発するまで
実録 WEBエンジニアが Titanium Mobileアプリを開発するまでYusaku Watanabe
 
GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性Yusaku Watanabe
 

Plus de Yusaku Watanabe (11)

組織をシステム化するReactiveManagement
組織をシステム化するReactiveManagement組織をシステム化するReactiveManagement
組織をシステム化するReactiveManagement
 
エンジニアがプロダクトマネージャーに進化すると何が起きるのか
エンジニアがプロダクトマネージャーに進化すると何が起きるのかエンジニアがプロダクトマネージャーに進化すると何が起きるのか
エンジニアがプロダクトマネージャーに進化すると何が起きるのか
 
QCon SF-feedback
QCon SF-feedbackQCon SF-feedback
QCon SF-feedback
 
Regional Scrum Gathering® Tokyo 2014
Regional Scrum Gathering® Tokyo 2014Regional Scrum Gathering® Tokyo 2014
Regional Scrum Gathering® Tokyo 2014
 
Jvm operation casual talks
Jvm operation casual talksJvm operation casual talks
Jvm operation casual talks
 
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形
 
PageRankアルゴリズムを使った人事評価についての実験
PageRankアルゴリズムを使った人事評価についての実験PageRankアルゴリズムを使った人事評価についての実験
PageRankアルゴリズムを使った人事評価についての実験
 
スケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考えるスケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考える
 
実録 WEBエンジニアが Titanium Mobileアプリを開発するまで
実録 WEBエンジニアが Titanium Mobileアプリを開発するまで実録 WEBエンジニアが Titanium Mobileアプリを開発するまで
実録 WEBエンジニアが Titanium Mobileアプリを開発するまで
 
Ameba Piggの裏側
Ameba Piggの裏側Ameba Piggの裏側
Ameba Piggの裏側
 
GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性
 

Pythonによる並列プログラミング -GPGPUも-

  • 1. Python による並列プログラミング -GPGPU も- <日付 2011/08/31> 渡辺 雄作 1
  • 2. 目次 概要 ....................................................................................................................................... 3 検証内容 ................................................................................................................................ 3 検証環境 ................................................................................................................................ 3 シングルスレッドによる実行 ...................................................................................................... 3 Threading による並列化 ........................................................................................................ 3 Multiprocessing による並列化 ............................................................................................... 4 GPGPU を使った並列化 ........................................................................................................ 5 セットアップ.............................................................................................................................. 6 Numpy インストール ............................................................................................................ 6 Boost インストール ............................................................................................................... 7 pyCUDA インストール ......................................................................................................... 8 実行 ........................................................................................................................................ 8 考察 ....................................................................................................................................... 8 2
  • 3. 概要 検証内容 256 * 256 の行列計算について各並列化手法を試行する 検証環境 OS CentOS release 5.6 CPU Intel(R) Core(TM) i3 CPU 540 3.07GHz memory 8GB(DDR3 1333) シングルスレッドによる実行 ソースコードは single_thread_execute.py に示す。 実行結果は以下の通り 1 回目:22.2145290375(sec) 2 回目:23.1715860367(sec) 3 回目:23.1783339977(sec) Threading による並列化 Threading モジュールを使用し、Thread を 4 つ生成し並列で行列計算処理を行う。 ソースコードは multi_thread_execute.py に示す。 python の threading モジュールはインタプリタによる擬似スレッドとなっており、グローバルインター プリターロック(GIL)を取得したスレッドが実行する機構になっている。 そのため速度は特に速度の改善は見られなかった。(むしろやや遅くなった) 1 回目:26.9206619263(sec) 2 回目:25.2392418385(sec) 3 回目:23.6878399849(sec) top コマンドで見る限り python の 1 プロセス自体はコアスケールはしているのが確認できた。 top - 19:22:32 up 22:44, 2 users, load average: 1.13, 0.49, 0.19 Tasks: 133 total, 1 running, 132 sleeping, 0 stopped, 0 zombie Cpu0 : 12.6%us, 4.0%sy, 0.0%ni, 83.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 13.7%us, 3.7%sy, 0.0%ni, 82.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 32.3%us, 3.3%sy, 0.0%ni, 64.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 24.9%us, 2.7%sy, 0.0%ni, 72.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 4コアを使い切れてはいない。 3
  • 4. Multiprocessing による並列化 multiprocessing モジュールを使用し、4 プロセスを生成し、並列で行列計算処理を行う ソースコードは multi_process_execute.py に示す。 Python2.6 で導入されたプロセス並列モジュール。 インターフェースは threading モジュールとよく似ているため、移行しやすい。 実行するとその名のとおりプロセスが 4 つ起動している事が確認できる(ひとつは親プロセス) PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12974 root 18 0 181m 14m 1276 R 100.2 0.4 0:07.05 python 12976 root 18 0 181m 14m 1280 R 99.9 0.4 0:07.05 python 12975 root 19 0 181m 14m 1276 R 99.6 0.4 0:07.04 python 12972 root 25 0 181m 17m 4412 R 76.3 0.4 0:05.33 python 12977 root 25 0 181m 13m 1136 R 23.3 0.4 0:01.90 python python プロセスをそのまま 4 つで並列計算しているため速度は改善が見られた。 1 回目:8.53098917007(sec) 2 回目:8.3674018383(sec) 3 回目:8.23075914383(sec) おおよそ 3 倍ぐらいになっている CPU も 4 コアを使い切っていることが確認できた。 top - 14:42:16 up 2 days, 18:04, 2 users, load average: 1.25, 0.54, 0.22 Tasks: 138 total, 6 running, 132 sleeping, 0 stopped, 0 zombie Cpu0 : 73.8%us, 26.2%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 99.3%us, 0.3%sy, 0.0%ni, 0.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 99.7%us, 0.0%sy, 0.0%ni, 0.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 4
  • 5. GPGPU を使った並列化 GPGPU の説明については 【再掲】【研究課題レポート抜粋】GPGPU によるパーソナルスーパーコンピュータの可能性 http://ameblo.jp/principia-ca/entry-10736425646.html にて説明されているので割愛。 通常 C/C++から利用される NVidia CUDA の API を python から利用する。 python の CUDA バインディングとして pyCUDA が発表されているので、今回はこれを利用する http://mathema.tician.de/software/pycuda 5
  • 6. セットアップ Numpy インストール configure オプションは python configure.py --boost-inc-dir=/usr/local/include/boost/ --boost-lib-dir=/usr/local/lib/ --boost-python-libname=boost_python-xgcc42-mt --cuda-root=/usr/local/cuda/ で指定した後に make make install を行う。 Mac にセットアップする場合は export MACOSX_DEPLOYMENT_TARGET=10.6 を環 境変数にセットする必要あり 6
  • 7. Boost インストール ./bootstrap.sh --prefix=/usr/local/ ./b2 install boost.python コンポーネントのインストールも必要なので、オプションを指定し てから再ビルドをかける ./bootstrap.sh --prefix=/usr/local/ --with-libraries=python ./b2 install Component configuration: - chrono : not building - date_time : not building - exception : not building - filesystem : not building - graph : not building - graph_parallel : not building - iostreams : not building - math : not building - mpi : not building - program_options : not building - python : building - random : not building - regex : not building - serialization : not building - signals : not building - system : not building - test : not building と出れば/usr/local/lib/libboost_python.a に出力されているのが確認できる - thread : not building - wave : not building pyCUDA インストール ./configure.py --cuda-root=/home/x/cuda --cudadrv-lib-dir=/usr/lib64/nvidia --boost-python-libname=boost_python-mt --boost-thread-libname=boost_thread-mt make 7
  • 8. make install インストール完了後に make tests を実行してテストをパスすれば OK. 実行 pycuda モジュールを使用し、CUDA Thread を 64 * 64Thread 生成し並列で行列計算処理を行 う。 ソースコードは pycuda_execute.py に示す。 考察 C/C++を使う必要がある CUDA プログラミングにおいて、HOST 側のメモリやデバイス側のメモリ確保 など実際の計算処理の準備段階が非常に煩雑になりがちだが、pycuda を使うことによりかなり簡単に (スクリプトっぽく)CUDA 計算処理が利用できるようになった。 CPU を使った計算処理(大規模なソートなど)をとりあえずの処理として行いたい場合は python + CUDA で書くというのも選択肢だと感じた。 今後は pyOpenCL などの動向に注視していきたい。 8