« 2chparty2009 | メイン | 2chparty2009投票受付中 »

2009年08月30日

OpenCL AO Bench

9/11 update - add animation version.
9/6 update - optimized.

8/28発売のMacOSX 10.6 Snow leopardをさっそくインストールして
OpenCLのプログラムをかいてみたぜっ!
I installed MacOSX 10.6 Snow leopard and coded the OpenCL program.

いつものごとくAO Benchです。


Source code and Binaries(MacOSX 10.6 Only) (280KB)


CPU or GPUで動いています。CPU版は
AO BenchサイトにあるC言語版のパフォーマンスとくらべると
特に最適化はしてませんが、そこそこのパフォーマンスはでてるのかと思います。
GPU版はもう少し早いと予想していたのでややガッカリです。
一度メインメモリにリードバックしてるので、遅いのはそのせいかもしれません。
そのうち時間があれば、メインメモリにリードバックせずにやってみたいと思います。

今回は、OpenGLを表示用につかってるんですが(画像転送するだけ)
OpenCLより先にOpenGLの初期化をしていると、なぜかOpenCLのデバイスの初期化で
こけることがあります。(gccの最適化しなければ動くけど、最適化すると動かないみたいな・・)
もしかしたら、gccの最適化がアホなのかもしれませんが・・。詳細不明です。
とりあえず、先にOpenCLの初期化をしておきましょう。

現在のところCPU(Intel Core2uo)で動かそうとするとOpenCLのワークグループの数が1でないと
動かないようです。GPUの場合は最大512。(GeForce9400M)
アクティビティモニタでは2コア動いているようなのでいいのかな・・・。
ちなみにintelのCLコンパイラは
cvmsErrorCompilerFailure: LLVM compiler has failed to compile a function.
というようなエラーをはいてきました。どうやらLLVMで動いているようですね。
しかし、今回はこのコンパイラのエラーに悩まされました。
関数の関数からグローバル変数にアクセスすると、このエラーでおこられるので
一度ローカル変数に代入してやるとちゃんと動くという・・・なぜ・・?
全体的にGPUとCPUでコンパチのOpenCLプログラムを書くのにやたら時間がかかりました。
まぁこの辺りはゆくゆくは良くなっていくのかなぁ

つっこみ募集中〜♪

---
9/6 追記です。

このエントリをあげたら、早速メールでのフィードバックをいただきました。
おたより紹介です。
メールの差出人は・・・なっ! AppleのMunshiさんです!?
中の人キター!!

内容ですが、呼び出す関数を高速版に書き換えたぜって内容でした。
normalize -> fast_normalize
sin, cos -> native_sin, native_cos

これにより、CPU版が10%程度、GPU版が20%程度早くなるようです。
native_xxxはOpenCL仕様書には実装依存と書いてありましたが、
MacOSXにおいて,Intel CPUとNVIDIA GeForceにおいては実装されてるようですね。

というわけで、精度を要求されない計算においては、高速版の関数を使うことをお勧めします。


ソースとバイナリを更新しておきます。
I updated the source code and binaries.
Source code and Binaries(MacOSX 10.6 Only) (280KB)

ちょっとOpenCLのデモをしたい人のためにアニメーションバージョンを作成。
球がおいてある周りを視点が回ります。
This is Animation demo version.

投稿者 kioku : 2009年08月30日 21:15

コメント

OpenCL 移植ありがとうございます.

aobench のサイトアップデートさせていただきました.

グローバル変数は、__kernel 関数でのみしかアクセスできない、という制約をどこかで見たような気がします.

投稿者 syoyo : 2009年08月30日 23:03

iMacが届いたので動かしてみました。
CL_DEVICE_NAME: GeForce GT 130
CL_DEVICE_VENDOR: NVIDIA
fps = 2.06702
fps = 2.21402
fps = 2.27020
fps = 11.95156
fps = 14.10101
fps = 14.59812
fps = 12.59906
fps = 9.95905
fps = 11.96202
fps = 12.07161
fps = 11.98451
fps = 12.02675
fps = 12.04381
fps = 11.94642
fps = 12.01593
fps = 12.00321
fps = 12.03486
fps = 11.95974


CL_DEVICE_NAME: Intel(R) Core(TM)2 Duo CPU E8335 @ 2.93GHz
CL_DEVICE_VENDOR: Intel
fps = 1.68164
fps = 1.68597
fps = 1.69427
fps = 1.70552
fps = 1.69089
fps = 1.67977
fps = 1.69969
fps = 1.68018
fps = 1.68713
fps = 1.68757

なかなかの速度が出てますね.

投稿者 hiro→ki : 2009年09月06日 01:15

ほぅ。なかなか早いですね>iMac
GPU -> メインメモリの転送を無くしたら
もっと差がつきそうですね。

更新した高速版もおためしあれ!

投稿者 kioku : 2009年09月06日 16:12

高速版試してみました.
CL_DEVICE_NAME: GeForce GT 130
CL_DEVICE_VENDOR: NVIDIA
fps = 2.93267
fps = 3.04212
fps = 2.73655
fps = 18.71012
fps = 18.66441
fps = 14.55052
fps = 11.93632
fps = 14.81458
fps = 15.20149

平均15fps 最大18fpsくらいみたいですね.
話はそれますが,Snow LeopardでCUDAを動かすのに苦戦中です.

投稿者 hiro→ki : 2009年09月07日 01:15

アルミ Macbook (2008)

CL_DEVICE_NAME: Intel(R) Core(TM)2 Duo CPU P7350 @ 2.00GHz
CL_DEVICE_VENDOR: Intel
fps = 1.12701
fps = 1.16788
fps = 1.16871
fps = 1.01538
fps = 1.17485
fps = 1.15946
fps = 1.14347
fps = 1.16990
fps = 1.07670
fps = 1.09367
fps = 1.14266
fps = 1.14939
fps = 1.16942
fps = 1.14951
fps = 1.17089

CL_DEVICE_NAME: GeForce 9400M
CL_DEVICE_VENDOR: NVIDIA
fps = 2.29902
fps = 3.70479
fps = 3.44582
fps = 2.12959
fps = 2.95115
fps = 3.54346
fps = 3.33456
fps = 3.36671
fps = 3.37532
fps = 3.55206
fps = 3.46433
fps = 3.43630
fps = 3.57461
fps = 3.52977
fps = 3.85360


どうでも遅いみたい,何が違ったかな?

投稿者 怖い外人 : 2009年09月10日 23:44

glutCreateWindow() のあとに glutInitDisplayMode() を呼んでいるのが気になります(Init してから Create しないと不定な?動作になります). Win だとうまく動かなかったので、GL 周りはこれが原因ではないでしょうか?

投稿者 syoyo : 2009年09月11日 22:28

CL_DEVICE_NAME: GeForce 9600 GT
CL_DEVICE_VENDOR: NVIDIA Corporation
fps = 5.75281
fps = 6.16869
fps = 6.24391
fps = 6.16869
fps = 6.09526
fps = 6.16866
fps = 6.16868
fps = 6.16869
fps = 6.24387
fps = 6.24391
fps = 6.24391
fps = 6.16869
fps = 6.24391
fps = 6.16865
fps = 6.16869
fps = 6.09522
fps = 6.16868
fps = 6.16865
fps = 6.16869
fps = 6.16868
fps = 6.16865
fps = 6.16868
fps = 6.16865
fps = 5.95348
fps = 6.02355
fps = 6.09522
fps = 6.09526
fps = 6.16866
fps = 6.16869
fps = 6.16865
fps = 6.09526
fps = 6.09522

win7 32bit+190.89

i used size_t local2[] = {8,8};
when i used {16,16} will error

投稿者 Anonymous : 2009年09月12日 22:32

Everyone, thank you for benchmarks;)
皆さんベンチの報告ありがとうございます。

>syoyoさん
ソースコードを訂正しました。macで問題ないのはなんでだろ・・・
前にGLの初期化とCLの初期化でバグっていた問題ですが、
いろいろやってみたのですが再現できませんでした。
まぁGLコードのバグとか関係なくCLは動作してほしいですねぇ。
(将来的にどちらの問題かわからなくなったりすると泣きそう)

投稿者 kioku : 2009年09月14日 20:11

OpenCL移植版と聞きテストさせていただきました。
Early2009 MacPro 10.6.1 with HD4870ですが
VENDER名ではじかれているのか?プログラムが走りませんでした。

同じマシンにGeForceを入れると動きました。

もっ、もしかしてRadeonはOpenCL未対応!?!
---
Last login: Wed Sep 16 07:30:51 on ttys000
demo01:~ admin$ /Users/admin/Downloads/openclao_omake/opencl_ao_gpu512x512 ; exit;


CL_DEVICE_NAME: Radeon HD 4870
CL_DEVICE_VENDOR: AMD
Error: Failed to build program executable
cvmsErrorCompilerFailure: LLVM compiler has failed to compile a function.
logout

[プロセスが完了しました]

投稿者 KM : 2009年09月16日 07:40