OpenCLプログラミング#1

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

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

公式ページにはAPIのヘッダファイルが公開されており、
まだ実際に動かす事はできないもののプログラミングすることは可能となっています。
ということで、公開に先んじてプログラミングを始めてしまいましょう。
2011/03/08(火) 07:32:39.91
昨日1日使ってボトルネックをOpenCLに移植したけど、
余計遅くなったわ。やれやれ
2011/03/08(火) 08:28:07.93
ボトルネックを移植するんじゃなくてOpenCLに向いている部分を移植しろよ
または並列性を極大化したりif文などの分岐を全部排除するなどアルゴリズム最適化をしてみれば?
2011/04/07(木) 03:06:36.77
VLIW5のtパイプ埋まらん
2011/04/13(水) 04:08:44.89
深く考えずに2^26スレッドenqueueしたらひどいことになった。
2011/04/21(木) 23:37:32.85
なんでこれ有料なんだ?
ttp://web.me.com/cducommun/CLBuilder/Home.html
2011/04/22(金) 00:28:47.04
Appleが提供しているツールならまだしも第三者が開発しているツールを無料にしろってのは横暴だろ
シェアウェアや市販ソフトを完全否定なお人ですか?
2011/04/23(土) 23:18:19.02
AMD APPのOpenCLについてご存じの方がいたら教えて欲しいんですが、
wavefront=64 って事は、例えばwork_group = 128 の場合 work_itemが64ずつ完全に並列実行って認識で合ってるでしょうか?
(wavefront内のやりとりは同期が必要ないかどうかを知りたいです)
432デフォルトの名無しさん
垢版 |
2011/04/24(日) 03:56:08.00
>>431
何の保証もないけど、今のところ大丈夫な気がする。
2011/04/24(日) 05:50:16.61
最大3クロックのタイミング差があると思うんだけど。
2011/05/26(木) 04:58:19.55
XOR_INT*4とMULADD*4が同じ時間食うって納得いかん…
2011/06/14(火) 22:58:32.16
for(d=0;省略){
clSetKernelArg(省略&d);
clEnqueueNDRangekernel(省略);
clEnqueueReadBuffer(省略);
for(省略){読み出したメモリ合算}
}
で1024*dで実行して
読み出して合算して再度実行・・・の形にしてもアドレス違反が起きてしまう・・・
イベントリストもバリア同期も意味なし

GPU実行でアドレス違反は画面だけ真っ黒になってびっくりした
デバックはCPUデバイス使ったほうがいいよ
2011/06/26(日) 01:59:15.81
最近OpenCLに興味もったんですが皆さん楽しいですか?
2011/06/26(日) 14:59:58.32
楽しいとか楽しくないとか問題じゃねえよ
2011/06/26(日) 15:03:37.91
でっかいうんこかどうかだな
2011/07/04(月) 00:47:28.82
AMD gDEBugger
ttp://developer.amd.com/tools/gDEBugger/Pages/default.aspx
いろいろ便利かもな
2011/07/04(月) 00:50:00.35
nsightもOpenCLデバッグ対応してなかったっけ?
2011/07/04(月) 06:50:33.14
2011年になっても未だにJAVA使い続けてる奴ってさ
仕事で仕方なくならわかるけど

家でもJAVAやってるなら本当にバカだよね。哀れ

ゴミだし
2011/07/04(月) 07:59:16.86
最近みかける天使うぜー死ねと思っていたが
松本龍の阿呆発言と比べると実害無いだけマシだと思った
2011/07/05(火) 22:49:02.30
つまんねー書き込みしてないでとっととNG登録しろよ
2011/07/05(火) 22:51:03.29
このコテハン「天使 ◆uL5esZLBSE」は天才チンパンジー「アイちゃん」が
言語訓練のために使用しているハンドルです。

アイと研究員とのやり取りに利用する書き込みなので、
関係者以外はレスしないで下さい。

                  京都大学霊長類研究所
2011/07/06(水) 01:40:07.31
intelのopencl SDKをlinuxにインスコったけどコンパイルのやり方わからん
gcc使ってどうにかならんの?
2011/07/06(水) 09:49:42.54
OpenCLってもう1年もバージョン変わって無いけど、開発中止したの?
2011/07/06(水) 11:06:10.67
バージョンUPしなくていいほど今の版が完成されたすばらしい出来だという事なんだよ



という事にしておきたい
2011/07/06(水) 11:57:01.57
グラボはどんどん進化してるのに、ライブラリは完成されてるとかねーよ
2011/07/06(水) 18:08:10.55
進化しても演算部分のコンパイラが底まで進化する必要があるか?

MSのCPUコンパイラさえ基本的には10年以上前のCPUでも動くような最適化レベルで止まっているしな。
GPUとして使うならまだしもGPGPUとして処理するならコンパイラは基本部分だけで、あとはドライバの進化で十分かと
2011/07/09(土) 07:08:13.67
>>439
それってGPU1枚だけでも使えるの?
requirementsにはハードウェアのことが書いてない
4511
垢版 |
2011/07/26(火) 06:44:48.46
http://toki.2ch.net/test/read.cgi/dataroom/1309855042/
2011/07/27(水) 23:22:22.79
HD4850が最新のドライバではOpenCL動かないし、古いドライバでは動くがゲロ遅
アムドはあかんな
2011/07/28(木) 01:08:32.77
>>452
4870 + CCC 11.6 で OpenCL 動いてるけど、
もしかして 11.7 では動かなくなるのかな ?
2011/07/28(木) 14:50:27.81
HD4850, APP 2.4, CCC 11.6で動かず(カーネルコンパイルエラー)。
ググったら4xxxは11.6じゃ動かないから11.5にしろと言うことで11.5にしたら動いた。
2011/07/28(木) 15:07:33.48
アムドとか言ってるあたりでお察し・・・
2011/07/28(木) 20:28:57.67
アムドいうただけでレッテル貼りとかどんだけ・・・
ヌビディアはOpenCL対応あかんね
1.0のくせに1.1用の関数を使ってもコンパイル・リンクが通る
でも、clEnqueueWriteBufferRectとか実行したらセグメンテーション違反
なめとるで
2011/07/29(金) 09:43:45.32
どっちも自社ライブラリ使えってことだよ
2011/07/29(金) 12:23:00.19
data parallelで簡単な2重forならできるけどそれ使って複雑な計算するのが
できぬ・・・CUDAと違って1024が最大なのがネック
459452
垢版 |
2011/07/30(土) 22:03:20.57
職場のC1060に家パソのHD4850が10倍以上の大差で惨敗してムカついたのでHD6950買ってきた。
2倍以上でHD6950の勝利!
アムド最高やで
2011/07/30(土) 22:25:54.10
6970や6990じゃなくて6950なのか。てかC1060はもうどうでもよかろう。
2011/07/30(土) 23:10:14.10
>>460
C1060はどうでもええことないよ。
だって、職場の計算機の貴重な戦力だし。
6950にしたのは家パソ用に高い板を買う気はないから。
2011/08/01(月) 20:49:14.86
いつの間にか WebCL とか出来てて驚いた。
WebGL は色々使い道あるけど、WebCL は需要が分からん。
2011/08/01(月) 21:47:49.14
WebGLについてはこちらでお願いします
【O3D】HTML5用 3D API WebGL 【Canvas:3D】
http://hibari.2ch.net/test/read.cgi/tech/1308761577/
2011/08/01(月) 22:13:20.26
WebGLの話なんてしてないが
2011/08/01(月) 23:26:04.83
サイトを開くだけで分散コンピューティングに参加…胸熱。
2011/08/02(火) 10:29:42.77
http://www.infoq.com/jp/news/2011/07/WebCL

これか
確かにブラウザ上で並列処理する必要性がよくわからんな
2011/08/02(火) 14:03:26.64
頻繁にメインメモリと同期するような計算にはJavaScriptが遅くて使い物にならないだろうし
重い処理を単発でやるだけならサーバーでやればいいだけな気がする
わざわざWebで激しく環境依存するようなことをやる意味が分からん
2011/08/02(火) 15:29:27.41
技術というのは、早い者勝ちでなぁ
仕様などをはやめに決めておかないと、特許やらパクリと言われたりとかなんやらで面倒な事になってしまうんだ
あと名を残したい人が作ったりするんだ
役に立つとか使えるとか、そんなの関係無いんだ
2011/08/02(火) 16:18:14.25
それはわかるんだが、特許を取るタイミングとかが難しいよな
取得にも維持費もかかるし、早すぎると普及した一番儲かる時期に特許権が切れて利益にならないとか

まー特許引き延ばしって裏技もあるけど
2011/08/02(火) 19:41:55.79
まあ、あれや
OpenCL CはJITやから、LL言語からでもグルーライブラリを組めば簡単に使える。
そら、試してみたくもなるわな。
しかし、実際はOpenCL Cを使いこなさなあかんわけで、それほどハードルが低いわけやないと。

んで、環境依存しまくりいうけど、マルチコアプロセッサ用のOpenCLライブラリもIntel, AMDから出てるわけで、もはや大概の環境でOpenCLは使えまっせ。
2011/08/03(水) 01:09:07.14
ブラウザで超広大なライフゲーム
2011/08/04(木) 04:52:42.94
APP SDK 2.5 で BFI_INT が使われるようになったけど、
bitselect() 使うとだめで、 (x & 0xf0f0f0f0) | (y & 0x0f0f0f0f) の型だと OK みたい。
2011/08/04(木) 18:42:12.38
CAL ILコンパイラはもう誰もメンテできないんだろうな。BFI_INT を付け足すのがそんなに苦痛かね?
AMDはLLVMのラデバックエンドに挑戦しているようだけど、果たして新アーキに切り替わる前に
モノにできるんだろうか?
2011/08/04(木) 23:21:28.44
OpenCLってCellみたいなプロセッサが普及しないと面白くないよね。
GPU型の抽象化だけじゃ。
2011/08/05(金) 09:45:21.35
そのCellがコケたからなー
発想が速すぎた
今の技術で開発していれば、大人気だったかもしれないのに
2011/08/06(土) 00:40:12.65
i7であえてOpenCL
2011/08/06(土) 02:51:44.01
OpenCLのアプリを配布するときってAMDとnVidiaで別に実行ファイル作らなきゃいけないの?
2011/08/06(土) 03:08:35.23
何でんなこと思った。
2011/08/06(土) 03:57:16.00
今のところ、OpenCLなアプリケーションを"配布"するための良い方法は無い。(除 MacOS X)
2011/08/06(土) 07:16:37.83
*.cl カーネルを露出させるのがそんなに恥ずかしいか!

難読化するだけだったら gzip してバイナリに埋め込んどくのが楽かもね。
2011/08/07(日) 08:06:38.42
nVidiaから最新ドライバでOpenCL1.1対応とかメールきたんだけど、
ドライバとりに行ったらLinux用はまだじゃねーか。
ざけんなー。
2011/08/07(日) 08:08:49.28
>>480
恥ずかしいというよりノウハウの塊だから出したくない人はいるだろう。
2011/08/08(月) 05:22:20.10
Windows用OpenCL1.1ドライバを試してみたが、
どうも上手く動かないのでもう一寸待った方が良いと思う
2011/08/09(火) 01:37:46.04
>>428
門外不出のノウハウ=世間一般には知られていない。
つまり各分野の研究者すら出し抜く大発見ってことだぞw
2011/08/11(木) 20:59:03.48
>>484
ノウハウが全て開示されているとでも思っているのか?
2011/08/11(木) 22:05:51.96
世間一般に知られていなければ十分じゃん
2011/08/12(金) 21:31:49.60
世間一般に知られないようにするためにカーネルを晒したくないわけだろ
2011/08/14(日) 01:34:57.52
>>473
CAL ILコンパイラ自体はいまだに新命令追加されているよ。
64bitINT除算とかはドキュメント化までされている。
ドキュメントにはなっていないけど、wave_idとかは
Appendix Bにはこっそり追加されて、実際テキストで
1OP命令として書けば使える。


でもBFI_INTは置いてけぼり
2011/08/14(日) 09:57:57.76
マスクが定数なら、iand,iand,ior で BFI_INT になるとおもうけど、
そうじゃないときになー。
2011/08/31(水) 17:10:54.28
初心者です。
Cで書かれた演算プログラムを高速化させたいと思っています。
この元のプログラムをホストプログラムとして、OpenCL用に書き換えて、高速化させたい演算部分を引っこ抜いてカーネルプログラムとして書き換えるというやり方でいいのでしょうか?

また、このようなCのプログラムをOpenCL用に書き換える作業を解説しているサイトや書籍はあるのでしょうか?

当方LINUXでのプログラミングをしております。
2011/08/31(水) 21:06:58.51
並列化はアルゴリズムをかなり選ぶよ。GPGPUなんて尚更。
まず普通にマルチスレッドで並列化してみたら?
2011/09/15(木) 10:02:24.21
opencl用の自動並列化コンパイラってある?
2011/09/16(金) 05:07:07.00
>>490
そのやりかたでいいさ。
2重ループを1重ループ2つにわけるとか。
あとはほとんどC言語と同じだから書き換えるところも少ないんじゃないか?
2011/09/16(金) 18:41:47.81
「Ivy Bridge」プロセッサ、「OpenCL 」をサポート
2011/09/16(金) 23:43:18.97
OpenCLを使ったおぉっとなるアプリってありますか?
2011/09/17(土) 08:21:50.52
うわぁってなるあぷりならある
2011/09/17(土) 08:36:22.90
たとえば?
2011/09/17(土) 18:08:09.83
まってて、ちょっと調べてくる
2011/09/18(日) 07:57:32.03
つ「http://www.geeks3d.com/20110822/webcl-nokia-extension-for-firefox-6-and-kernel-toy/
2011/09/23(金) 23:20:48.33
なんでAMDのOpenCLってこんなにサポートが糞なの?
2011/09/24(土) 06:50:26.05
OpenCLに関しちゃAMDが一番マシじゃね。
2011/09/24(土) 15:07:51.08
>>500
ヒトイネ
2011/09/27(火) 22:25:38.34
>500
バグレポートしたら、ちゃんと対応してもらえたよ?
2011/10/03(月) 02:47:52.78
もしかして関数呼び出しはOpenCL Cで記述出来ない...?
cudaでいう__device__のように記述出来るかと思ったらそんなことはないのかひどいぞこれは
2011/10/03(月) 02:54:10.32
そんなことはなかったすみませんでした
2011/10/03(月) 22:18:02.72
>>503
バグレポートなんか出来るの?
2011/10/04(火) 00:03:56.22
コンパイル時に死ぬバグだけどコンパイラのサポート窓口は分からなかったので
KernelAnalyzerのAboutにあるメアドに「KernelAnalyzerが死ぬんだけど」
って送った。(嘘はついてないつもり)
コンパイラチームに転送してくれて11.10/2.6で直るって連絡来たよ。
実行時に死ぬのとか結果が変なのもForumに書けば結構みてくれるよ。
2011/10/05(水) 23:41:21.79
>>507
Forumに書いても放置が多いみたいで困る。。
509デフォルトの名無しさん
垢版 |
2011/10/06(木) 05:23:23.41
俺が今書いてるJavaプログラムの中で
2つのbyte配列に対する100〜5万回くらいの論理積(単にforループで2つの配列の論理積をとる)が頻繁に発生するんだけど
そういうとこでOpenCL使ったら高速化期待できる?
まとめて100万回くらいならGPUが速そうなんだけど
100回で済むとかだとオーバーヘッドがでかいのかなと思って躊躇してる
2011/10/06(木) 18:38:50.63
aparapiでも使ってみたら?
2011/10/17(月) 07:38:26.26
C++のラッパーを最近使い始めたけどかなり使いやすいね。
とくにメモリ解放が楽になった。
2011/11/02(水) 21:22:05.07
OpenCLは構造体のメモリオブジェクトを作成できますか?

CUDAだったら
typedef struct {
float *num;
} DATA;

DATA data;

cudaMalloc( &data.num, sizeof(float) * 1024 );

みたいにできるんですけど
2011/11/02(水) 23:38:01.05
>>512
例が意味不明
それじゃGPU上に単なるfloat型の配列を確保して、
そのdeviceポインタをCPUの構造体メンバに代入しているだけ。

OpenCLでもGPU上にfloat型の配列をbufferとして確保して、
それをCPUの構造体メンバに代入することは出来る。
メンバ変数の型はfloat*では無く、cl_memだけどね。

でも、その配列自体をGPU側にコピーして、
間接アクセスしようとするとCUDAとOpenCLでは全く違う。

OpenCLではGPU上のポインタは1つのカーネル呼び出し内でしか
一貫性が保証されないから、ポインタを保存しておいて
次のカーネル呼び出しで使うという事が不可能
(cl_memはハンドルに過ぎず、OpenCLのランタイムは
GPU上のオブジェクトを再配置する可能性があるから)
まあ、やるとしたら大きなbufferをメモリプールとして生成して、offsetをポインタの代わりに保存
後でアクセスするときにはbufferを引数に渡して、それにoffset足した位置を触るという
形にするしかない。

まあ、CUDAでも実際にはこの方がCPUとGPUで同じデータを扱えるし、
性能面でも悪くないやり方なんだけど。
2011/11/03(木) 01:23:08.95
ラデ外付けGPUに大量にデータを送りたいんだけど、1/4までって制限どうにかならないの?256MBまでしか送れん
2011/11/03(木) 10:05:29.53
いや、1/4なのではなく 256MBまでという制限。
sizeof(float4) * 4096 * 4096.
2011/11/03(木) 10:38:23.81
>>515
これって変えられないの?
2011/11/04(金) 11:46:02.78
馬鹿には無理
2011/11/07(月) 02:56:58.68
並列化させるのも結構苦労するよね。
簡単な演算ならいいけど、データ依存がちょっとでも複雑になると
動かすカーネルの順番とか数とか
気にしなきゃいけないことイパーイ
2011/11/15(火) 23:57:17.03
OpenCL 1.2
http://www.khronos.org/news/press/releases/khronos-releases-opencl-1.2-specification
2011/11/16(水) 00:44:39.04
NVIDIAのドライバがカオスになるな
gdgdの果てに漸く1.0対応が落ち着いたと思ったら
28x世代の1.1対応でまたおかしくなってまだ終息してないのに
2011/11/16(水) 01:54:02.46
彼らにはCUDAがあるからなぁ。。
頑張る必要が無いのだろう。
2011/11/19(土) 02:59:11.80
nVidiaはどこに向かっているんだ…

OpenACC : 新しい並列コンピューティングのためのプログラミング環境
http://www.shader.jp/?p=466
2011/11/19(土) 19:26:18.05
それはOpenMPのGPU版みたいなものなので、CUDAやOpenCLとは衝突しない
2011/11/19(土) 20:50:05.10
AlteraがFPGAでOpenCLを、とか言い出してて面白そうな感じ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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