OpenCLプログラミング#1

■ このスレッドは過去ログ倉庫に格納されています
1a36 ◆K0BqlCB3.k
垢版 |
2008/12/10(水) 15:38:25
さてついにOpenCLの仕様が公開されました。

http://www.khronos.org/opencl/

公式ページにはAPIのヘッダファイルが公開されており、
まだ実際に動かす事はできないもののプログラミングすることは可能となっています。
ということで、公開に先んじてプログラミングを始めてしまいましょう。
2011/11/30(水) 00:50:42.75
>>536
OpenCLの機能実現するのに都合がいい命令がSSE4.1にあるからインテルの開発ツールはSSE4.1対応の世代以降でないと使えないんだよ
どうせ普及する頃には古い世代のCPUいなくなってるよねって方針なんだろ
2011/11/30(水) 00:58:02.95
GPUが使えない環境での互換性用と割り切って広くサポートしてくれたほうがまだ有用なのにな
2011/12/05(月) 06:55:31.93
構造体そのままカーネルに放り投げられない・・・
x.yに配列分けなくちゃだめか・・・
GPU正直CUDAのほうが楽だよね・・・
CPUとGPU同時並列に魅力感じてたけど
両方ともスレッドが少なすぎて・・・
2011/12/05(月) 09:48:13.49
なにいってるんだ?
2011/12/05(月) 11:51:31.75
構造体 a
int x;
int y;
の配列をそのままメモリバッファにコピーしても
うまくいかなかったので・・・
AMDのカーネルアナライザーでエラーがでてたんです
if(a[id].x-a[id].y){}
結局配列分割してコピーしました・・・
2011/12/05(月) 12:04:37.78
組み込みのint2でいいじゃない。
2011/12/05(月) 16:36:44.62
そうですね
それで組み込んでみます
544542
垢版 |
2011/12/05(月) 21:49:58.78
>>543
まず無いだろうけど、別スレッドで
同じ添え字のxとyをバラバラに更新すると嵌るよ。
545543
垢版 |
2011/12/06(火) 04:05:54.65
>>544
xを固定してyの値すべて計算して次のxへという
九九を生成するようなマニアックな使い方をしてるんです・・・
546542
垢版 |
2011/12/06(火) 07:51:19.62
それなら分けた方がいいと思う。
547543
垢版 |
2011/12/06(火) 09:23:20.52
そうしてみます!
2011/12/07(水) 22:41:57.13
ふう・・・ついに完成しました
ちまちま25%使うよりフルロードはいいですね
ただ、オーバーヘッドがいくらあるからはわかりませんが・・・
2011/12/08(木) 07:31:00.39
256MBの制限に引っかかって処理が止まるorz
これの上限増やせないのか?
2011/12/08(木) 10:09:58.25
>>549
グローバルメモリが足りない・・・のかな?
ttp://www.ozone3d.net/gpu_caps_viewer/
これで確認してみて

それかワークスレッドの設定が悪いのかも
2011/12/08(木) 11:03:39.84
>>550
なんでダメか分かった、ありがとう
ローカルメモリ32kbしかないのに2mb使おうとしてたwww
2011/12/08(木) 14:28:54.91
>>551
使い捨てる変数の宣言くらいがちょうどいいよ
NVIDIAはローカルメモリ使わないと倍ぐらい遅くなるけど
他はそうでもないから(OpenCL入門に比較があったよ)
グローバルで問題ないと思うよ
2011/12/15(木) 20:39:38.90
http://www.4gamer.net/games/076/G007660/20111214033/

おまいらこれからもOpenCLにしがみついて行くの?
2011/12/15(木) 20:44:38.54
CUDAはGPUしかできないけど一度により多くの処理ができる
OpenCLはCPUとGPUを同時並列処理ができるのが魅力
どっちにも特化した特性があるからプログラムしだいだよ
2011/12/15(木) 22:16:31.17
GPUには留まらない図が載ってるよ、ヌフォの所に
2011/12/15(木) 22:40:09.72
もうGPU固有じゃなくなってきたのね・・・
カーネル丸出しのCLは論文すら少ない・・・
2011/12/26(月) 03:28:48.61
引数の渡し方が面倒なんだよなー
思わぬところでバグが出たりする
2012/01/18(水) 10:01:49.46
openclを実用的に使うにはどんな環境がおすすめでしょうか
2012/01/18(水) 10:11:34.51
いつでもCUDAに逃げられる環境
2012/01/18(水) 22:05:36.88
nVidiaってこと?
2012/01/19(木) 09:51:18.68
グラフィックボードは倍精度不動小数点数(cl_amd_fp64)が利用可能な
Radeon HD 7900、6900、5900/5800 シリーズがおすすめ

http://blog.tommy6.net/archives/74
2012/01/19(木) 16:52:31.76
宗教戦争が始まりそうだな
2012/01/19(木) 17:05:38.23
>>561
紹介thx
2012/01/19(木) 18:25:09.26
どうせおまえらめんどくさい組み込み関数なんか使わないだろってことか?
2012/01/23(月) 19:34:34.31
GCNでアセンブリが変わったのか、動かなくなってしまった・・・
2012/01/25(水) 02:58:13.00
変わる以前にGCN対応ドライバ&ランタイムまだ出てないでしょ
CCC12.1Previewが出回ってるからそれ付属のSDKランタイムなら動くんじゃないの
2012/01/25(水) 03:08:02.37
Kernel AnalyzerもTahiti対応版出てないしな
568デフォルトの名無しさん
垢版 |
2012/02/01(水) 22:06:59.00
RADEONとGeforce、ガチンコ対決ではごっちが速いの?
2012/02/01(水) 22:33:40.43
ごっちかな
2012/02/01(水) 23:52:53.73
そもそもガチンコな応用でOpenCLってまともに実績あるの?
2012/02/02(木) 00:02:24.64
無ければなんだっての?
2012/02/02(木) 15:35:32.54
いや別に問題ない
573デフォルトの名無しさん
垢版 |
2012/02/10(金) 23:47:32.03
とりあえず齧る分には公式のプログラミングガイド買っとけばおk?
2012/02/13(月) 02:50:23.08
OK
C言語と同じ
2012/02/22(水) 23:40:42.01
サブルーチンみたいにカーネルに直接引数渡して処理できればなぁ
アドレスを渡す時とかすげえ面倒。
2012/02/23(木) 01:38:17.77
そんな気軽にあちこちで使うようなもんじゃないっしょ
2012/03/08(木) 16:45:33.65
カーネルソース丸出しか
特定デバイス用にコンパイルしておかないと
いけないのがなあ
2012/03/08(木) 16:57:57.20
大したことないやつほど隠したがる銭湯の法則
2012/03/08(木) 22:38:56.05
BOINC的なもので使うと不正対策必要で、既知の答えも一緒に計算させたりして対策するんだけどエコじゃないて悩ましいよ
2012/03/11(日) 01:23:31.48
それなら同じWU他のやつに配って結果一致したやつだけ採用、
合わなかったら更に配布して一致した方採用でいいんでないかね
どのみち普通にやったって計算エラーになるのもいるし
2012/03/11(日) 02:45:56.59
つーかカーネルがソースコードだから
改竄される恐れがなんて懸念するような
プログラムなら、どんな形態で配るにせよ
ディスアセンブルされりゃ同じだって。
2012/03/17(土) 16:17:03.96
個人PCでスパコンの1/1000の計算速度(10テラFLOPS)だってよ。スゲーな。

http://dualsocketworld.blog134.fc2.com/blog-date-201202.html
2012/03/18(日) 17:23:23.96
10TFLOPSっていうと10年前のスパコンの性能と同じくらいだな
2012/03/18(日) 20:53:01.85
10年後に京の性能がご家庭に来るかというと、さすがにそうでもない感。
2012/03/18(日) 21:28:00.64
物理的限界が近づいてきたからこれまでとは事情が違うよね。
無知な人は技術でなんとかなるって言っちゃうだろうけどw
2012/03/18(日) 23:15:06.83
一般家庭にベクトル演算ってそんなに必要ない気が。。。
2012/03/19(月) 10:47:53.21
O(n^2)の直接法のN体とか本当にベンチマーク以上の意味はないんだがな
実用コードはツリー法やFMM法を使う
2012/03/19(月) 17:14:11.16
O(n^2)がツリー法だとO(n logn)に、FMMだとO(n)になるそうだ

www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1084-12.pdf
2012/04/13(金) 00:11:16.74
AdobeのCS6でOpenCLが使われているという噂を聞いたんだが、カーネルのソースコードとかどうやってるんだろうか
2012/04/13(金) 03:29:06.78
>>589
Adobeのライセンス認証部分のコードだって、一緒にディスクに入ってるわけですよ。
どうにでもなる。
591デフォルトの名無しさん
垢版 |
2012/04/29(日) 15:57:09.88
Intel OpenCL SDKを使って開発をしようとしているのですが、CPUとGPUを非同期で
走らせる方法が分かりません。
サンプルなどないでしょうか?
2012/04/29(日) 20:57:55.38
>>587
必ずしもそうでもない。もちろん限られたケースだが、空間ごとに時間刻みを変えたい場合とか、ツリー方とかだと複雑になりすぎてまだまだ難しい場合も多い。
そもそも、ツリーやFMMでも近傍場の計算は直接法だし、サンプルコードとして無意味ではない。

593デフォルトの名無しさん
垢版 |
2012/05/02(水) 10:33:58.88
>>591
CPU側を並列化してGPUを扱うスレッド/プロセスとCPU側の計算をするものに分ける
並列化、同期はお好みの方法で
2012/06/27(水) 01:05:42.85
質問なんだけど今はAMD/nVidia/IntelどのSDKでビルドしても
AMD/nVidiaのドライバが入っている環境ならGPUが利用できるって理解でok?
2012/06/27(水) 21:29:31.15
>>594
違うというか、根本的に違う
2012/06/30(土) 22:46:38.04
>>594
理論上は合っているよ。
まあ、微妙に非互換だったり、ランタイムの
インストール方法など気を使わざるを得ないのが現実だが。
2012/07/01(日) 01:24:59.44
>>595
2012/07/01(日) 12:56:18.02
>>595
2012/07/05(木) 01:16:06.38
GT440でclinfoしたら
Max compute units: 2
と出たんだけど、この2とGT440のCUDAコア96とはどういう関係にあるの?
2012/07/05(木) 12:03:19.25
NVIDIAの場合
Max Compute unit = Streaming Multiprocessor(SM) = Streaming Multiprocessor eXtreme(SMX)
2012/07/27(金) 10:28:17.75
CPUデバイスのランタイムを有効にするにはAMDかインテルのSDKをインストールしてもらうしかないの?
ランタイムだけのパッケージってある?
2012/07/27(金) 11:10:16.02
>>601
Intel の Windows 用ならあるね。
AMD は知らん。
2012/07/28(土) 14:23:52.35
http://software.intel.com/en-us/articles/vcsource-tools-opencl-sdk/
のダウンロードリストボックスのOpenCL CPU only runtime(Windows* OS)ってやつか。
見落としてた。ありがとう。
2012/07/30(月) 20:27:19.07
CPUでCLやっても遅いだけで意味無いなぁ
2012/07/30(月) 22:03:29.12
>>604
どんなプログラムなのかしらないけど、ボクが試したのは充分速かったけどなぁ。
いやまあ、GPUと絶対値を比べればもちろん遅いけど。w
2012/07/30(月) 22:41:12.50
CPUでOpenCL使うとお手軽にSIMD+マルチコア使えるな。
2012/07/30(月) 22:48:37.20
ベンチも取らずに知ったか
2012/07/31(火) 00:12:55.35
ベンチと言えば Intel と AMD で比べてみたら、Intel のほうがかなり速かった。
いやまあ、その PC の CPU は Intel だったんだけど。w
AMD な CPU だと逆転したりするのかなぁ。
2012/07/31(火) 07:48:58.72
>>606
お手軽じゃねーっつの。
CPUでSIMDとマルチコアを使いたいためだけにOpenCLを使つかうならアホだわ。

2012/07/31(火) 10:50:46.32
phoronixのベンチ見る限りだとAMDのSDKの方が速そうだったけど
2012/07/31(火) 18:30:47.41
少なくともカーネル部分はお手軽だよ。

素のCで使うと準備が面倒だが
C++のラッパーなら大した事は無い。
2012/07/31(火) 22:46:48.26
OpenCL以外でSIMDに自動で対応してくれるのってなにかあるの?
2012/08/01(水) 06:14:34.83
インテルコンパイラ使っとけ。
それかFortranだな。
2012/08/01(水) 13:12:30.64
simdと言っているのがSSEのパックドなインストラクションのことでいいならgccでもOK。
2012/08/01(水) 22:34:10.47
gccじゃ自動ベクトル化は皆無に等しいだろ。
2012/08/01(水) 22:54:07.37
ちょっと前までSSEwとか思ってたけど
これだけ並列プログラミングが普及してきてAVX2とかみると考え変わる
2012/08/01(水) 23:22:54.44
>>611
んなアホな
CL用のメモリとのやり取りが発生するだけ無駄だよ
正直、マルチコアを使いたいならMPIが一番速い。
通信含めても。
OpenMPもなんだかんだであまり速くないな。

>>612
PGI   はあまりコードの品質よくなかったな
2012/08/02(木) 00:32:11.20
>>617
なんか解釈に誤解があるようだが。
マルチコアのどんなプログラムでもOpenCLで書けという話ではない。

OpenCLのカーネルとして記述できるような問題に
適用すれば、なんも考えずにSIMDもマルチコアも
使えるようになるし、そういう用途に限れば
OpenMPやMPIもしくはPOSIX threadとかで
真面目に書くよりお手軽だし、余程の玄人が
書くのでない限り素早く、速いコードが書ける。

CL用のメモリ云々言っておきながら、速度面で
マルチスレッドなOpenMPでなくマルチプロセスになる
MPIをすすめるあたり根本的に理解に問題があるような。
まあ、通信部分はintel MPIとかなら共有メモリ使うから
極端に不利にはならないけど、少なくともこれが最速とは行かない。
2012/08/02(木) 00:45:08.79
てかさ、CL 用のメモリとのやりとりなんかしないよね?
いや、しないようにつくるよね????

>CPUでSIMDとマルチコアを使いたいためだけにOpenCLを使つかうならアホだわ。
うわ、アホって言われちゃった。てへ。
2012/08/02(木) 01:31:56.84
OpenCLとMPIの並列化は全く別もんだし、
OpenCLとOpenMPの並列化もちょっと違う。
正直OpenCLのカーネルを書くくらいなら、
OpenMPを使った並列化の方が圧倒的に楽だわ。
OpenCLを使うメリットは複数のプラットフォームで動かすためだけだろ。
2012/08/02(木) 06:37:43.98
無脳をさらすスレですか?
2012/08/02(木) 07:45:55.61
>>619
CLデバイスとCPUは論理的に別物なんだからメモリ転送はいるだろ。

>>620
GPUがなければOpenMPなりMPIなりで並列動作しているというプログラムを作ればよい。
CPUの並列も面倒くさいのでCLでってのは手抜き杉
2012/08/02(木) 08:05:46.59
>>622
CLで書くほうが手間がかかると思うが。。。
CPU用のコードとNVIDIA用のコード、ATI用のコードを用意するのはかなり大変だし。だからOpenCLが生まれたわけで。
2012/08/02(木) 08:07:44.71
>>623
GPUがあればそっちをつかいたいのならCLを書くこと自体が手間とか言ってる場合じゃないだろ。
それ一本で済まそうというのが手抜きだっての。
CPUでCLつかっても無駄なオーバーヘッドが出るだけだし
2012/08/02(木) 08:13:47.37
論理的に別なのはわかるけど
対象がCPUの時にはメモリコピーしないような実装になっててもおかしくないような気もする
2012/08/02(木) 08:14:10.39
まあ、小さい規模のコードしか書いてない奴には分からんかもしれんが、
複数のハードウェアプラットフォームをそれぞれメンテしないといけなのは、
かなりの工数がかかるからな。
多少のパフォーマンスを犠牲にしても良いことなんて沢山あるんだよ。
2012/08/02(木) 09:23:17.69
えぇ〜・・・・・・。
キミタチは実際につかったことないんだね?

ttp://software.intel.com/sites/landingpage/opencl/optimization-guide/index.htm
の Sharing Resources Efficiently とか読んでごらんよ。
2012/08/02(木) 23:04:54.27
これは恥ずかしいw
2012/08/03(金) 00:10:12.73
どれにレスしてんだか分からんレスがおおいな。
2012/08/03(金) 00:34:42.14
このスレ、99割が誤爆レスだからな。
2012/08/03(金) 19:43:05.27
>>630
> 、99割
0.99 割? 990% ?

どのスレに書こうとしてたの?
2012/08/04(土) 01:06:20.28
だ ー か ー ら ー ぁ 誤 爆 で し ょ
2012/08/08(水) 17:52:37.24
なんでこのスレこの板にあるんだ?
2012/08/09(木) 01:30:40.64
OpenCLハードル高いなぁ
どの機材構成でどのプラットフォームでどう書けば速くなるか
検証すべき項目が多すぎる
2012/08/09(木) 02:10:21.89
逆に考えるんだ
速さをあきらめればすべて解決する
2012/08/09(木) 02:22:49.56
あちらを立てればこちらが立たずですなぁ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況