Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Javaで簡単にgpgpu aparapi

Related Books

Free with a 30 day trial from Scribd

See all

Javaで簡単にgpgpu aparapi

  1. 1. Javaで簡単にGPGPU -Aparapi- 2012/10/13 関西GPGPU勉強会 1
  2. 2. 自己紹介• 先山 賢一 – @ksakiyama134• 同志社大学大学院 工学研究科 M2 – 研究: 人工社会 + GPGPU みたいなこと – T研ではないです• バイクとOpenCLが好き – 最近はRubyとか興味あり 2
  3. 3. GPGPU歴• 2010年10月 – OpenCLを勉強するも難しくて諦める• 2011年1月 – CUDAを勉強• 2011年9月 – OpenCLを再勉強(OpenGLも少し)• 2012年3月 – GPGPU関連で論文発表 3
  4. 4. 発表の流れ• GPGPU – OpenCL• Aparapi – プログラミング – パフォーマンス・チューニング – デモ• まとめ 4
  5. 5. GPGPU• General Purpose computing on GPU – GPUのパワーを画像処理以外に応用• GPGPUを使うためには – CUDA – OpenCL – C++ AMP – OpenACC etc… 5
  6. 6. OpenCL• 並列計算の標準フレームワーク – Open Computing Language• OpenCL C言語 – 並列アルゴリズムを記述するための言語• C/C++ – APIを使用してOpenCL Cのコードを実行 6
  7. 7. OpenCLを勉強したいが…1. C++とかいやなんですけど… – 他の言語を使いたい2. 並列アルゴリズム, データ転送 以外の部分でコード数が多い – もっと簡単に書きたい 7
  8. 8. 1.他の言語でできない?• 賢い方々がつくったラッパーを使おう!! • PyOpenCL • Ruby-OpenCL • PHP OpenCL など• もちろんJavaでもあります! • JavaCL • JOCL 8
  9. 9. た便そく利、さなそんもん のな が 9
  10. 10. 2.もっと簡単にできない? Host• 残念ながら… 最低限の知識は必要 CommandQueue – context – command-queue Context Device – buffer – kernel Buffer Kernel 10
  11. 11. OpenCL Cコードは文字列 ホストコード 例:Rubykernel_source = <<EOF__kernel OpenCL Cvoid square(__global float *dst, __kernel __global float *src) void square(__global float *dst,{ __global float *src) int gid = get_global_id(0); { dst[gid] = src[gid] * src[gid]; int gid = get_global_id(0);} dst[gid] = src[gid] * src[gid];EOF }....省略 結局はCみたいなコードを書く 11
  12. 12. そこでAparapi! 12
  13. 13. Aparapi• A Parallel API – http://code.google.com/p/aparapi/• Javaで並列アルゴリズムが書ける – OpenCL Cを書かなくてよい!• AMDが開発 – NVIDIA GPUでも動きます 13
  14. 14. JavaとOpenCL• Aparapi以外にも – JavaCL – JOCL• しかしAparapiはこれら2つより 圧倒的にコード数が短くて済む 感覚:Aparapi >>> JavaCL > JOCL 14
  15. 15. 使い方import com.amd.aparapi.Kernel;new Kernel() { @Override public void run() { int gid = getGlobalId(); c[gid] = a[gid] + b[gid]; }}.execute(size); 15
  16. 16. すごくシンプル 16
  17. 17. Aparapi, JavaCL, JOCL, 実装してコード数を 比較してみました 17
  18. 18. kernel.execute(size); Yes No 最初の実行? No OpenCLが入ってる? OpenCLが入ってる? Yes Yes バイトコードを NoOpenCL Cに変換できた? Yes Java Thread Poolで実行 OpenCLで実行! 18
  19. 19. バイトコードって?• Wikipediaより – 仮想マシンによる実行のために設計された、 実行可能なプログラムのバイナリ表現である• Javaバイトコード – Javaのコンパイラが生成するコード – JVMのインタプリタによって ネイティブコードに変換されて実行される 19
  20. 20. Aparapiの主な制限• 1次元配列のみ – finalをつける – Primitiveなデータ型のみ • Float, Double, Integerなど使用不可 • ArrayListなど使用不可• switch, break, continueなど使用不可 – JTPで実行される• run()内でnewできない ※詳しく知りたい方はJavaKernelGuidelinesを参照 20
  21. 21. パフォーマンス・チューニング• ローカルメモリ – @Local修飾子 – 1次元配列のみ• 同期 – localBarrier(), globalBarrier()• Range class – NDRangeのサイズを細かく指定 – execute( Range.create2D(w,h,16,16) ) 21
  22. 22. デモ• 正方行列の乗算• バイトニックソート• GUIとの連動 22
  23. 23. 自動でデータ転送されるfor (stage = 0; stage < numStages; stage++) { execute( Range.create(size, 256) );}for (stage = 0; stage < numStages; stage++) { // memcpy: Host -> Device execute( Range.create(size, 256) ); // memcpy: Device -> Host} 23
  24. 24. データ転送を操作するsetExplicit(true);put(array_a).put(array_b).put(array_dst);for (stage = 0; stage < numStages; stage++) { execute( Range.create(size, 256) );}get.(array_dst); 24
  25. 25. まとめ• Aparapiで簡単に並列プログラミング – 深くOpenCLを学ぶ必要がない• データ転送に注意する – setExplicit(true), put(arr[]), get(arr[])• もっと詳しく知りたい人は – http://code.google.com/p/aparapi/ 25
  26. 26. ご清聴ありがとうございました 26

    Be the first to comment

    Login to see the comments

  • YasuhiroYoshimura

    Oct. 16, 2012
  • hirokazuk

    Jan. 15, 2013
  • guutara

    Dec. 3, 2013
  • HiroToHiro

    Feb. 25, 2014
  • TakuyaAsano

    Mar. 30, 2014
  • KazushiUeta

    Jan. 26, 2015
  • takeshi89

    Jan. 30, 2015
  • ssuser576c79

    Feb. 17, 2015
  • takukamata

    Apr. 29, 2015
  • nappa_zzz

    Jun. 18, 2015
  • doridoridoriands

    Aug. 24, 2015
  • SherlockChiang

    Sep. 13, 2015
  • leecgeun

    Dec. 3, 2015
  • UsrNameu1

    Sep. 17, 2016

Views

Total views

11,076

On Slideshare

0

From embeds

0

Number of embeds

999

Actions

Downloads

32

Shares

0

Comments

0

Likes

14

×