ArrayFire(GPGPU)を使ってみた

Javaで数値演算をしていて、なんだかスピードを極めたくなってしまった。

そこでなにを計算をするか決まっていないのに、なんかGPGPUを使いたくなってArrayFireというGPGPUのライブラリを入れてみた。

しかし、MinGWから使おうとしたところエラーが出てだめ。

調べると、ArrayFireはVisual Studioじゃないといけないらしい。

え~まじ~~

 

しかたがないのでインストールしてサンプルプロジェクトをコンパイル。

そこは素直に通る。

GPGPUなんてものを使おうとしたらもっと詰まると思ったけど、VisualStudioさえ入れれば特に問題はなかった。

しかし問題は実行。

サンプルを実行しても最後に強制終了が起こる。

一応最後まで走っているっぽいけど、なぜか最後が通常終了じゃなくてエラーが出て終了になる。

まぁいいか……とサンプルのbenchmarkを走らせてみる。

 

■CPU

ArrayFire v3.3.2 (CPU, 64-bit Windows, build f65dd97)
[0] Unknown: Unknown, 12246 MB, Max threads(1)
Benchmark N-by-N matrix multiply
128 x  128:    16 Gflops
256 x  256:    18 Gflops
384 x  384:    24 Gflops
512 x  512:    34 Gflops
640 x  640:    35 Gflops
768 x  768:    35 Gflops
896 x  896:    33 Gflops
1024 x 1024:    36 Gflops
1152 x 1152:    35 Gflops
1280 x 1280:    34 Gflops
1408 x 1408:    34 Gflops
1536 x 1536:    36 Gflops
1664 x 1664:    35 Gflops
1792 x 1792:    34 Gflops
1920 x 1920:    35 Gflops
2048 x 2048:    36 Gflops
### peak 36.4257 GFLOPS

■GPGPU(Radeon HD5770 512MB)

ArrayFire v3.3.2 (OpenCL, 64-bit Windows, build f65dd97)
[0] AMD     : Juniper, 512 MB
-1- AMD     : Intel(R) Celeron(R) CPU G1610 @ 2.60GHz, 12246 MB
Benchmark N-by-N matrix multiply
128 x  128:    40 Gflops
256 x  256:    47 Gflops
384 x  384:    78 Gflops
512 x  512:    23 Gflops
640 x  640:    25 Gflops
768 x  768:    84 Gflops
896 x  896:    25 Gflops
1024 x 1024:    25 Gflops
1152 x 1152:     3 Gflops
1280 x 1280:    26 Gflops
1408 x 1408:    26 Gflops
1536 x 1536:

は!?

実行できたのはいいけど、なにこの遅さ!

たしかに途中で84GflopsとかCPUを上回る性能を出してはいるけど、3Gflopsとかもある。

そして最後はエラーが出て終了。

おそらくメモリが512MBじゃこんな大きな配列を保持できていないんだろう。

そして、その前のパフォーマンスもRAM足りてなくてシステムメモリとシェアしているんじゃないかという疑いが残る。

パフォーマンスもいまいちだし、強制終了とか不安定じゃ実際使いものにならない。

メモリが潤沢な上位GPUを買えば意味があるのだろうけど、HD5770クラスだとGPGPUをやるメリットは薄そうだ。

素直にCPUを使ったほうが良さそう。

 

捨てたものは単一の電池ボックス。

あると、また意味もなくやすい乾電池買っちゃって用途に困りそうだから。

体重は66.1kg

あれ、戻った。

SNSでもご購読できます。

コメントを残す