OpenCLプログラミング#1

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

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

公式ページにはAPIのヘッダファイルが公開されており、
まだ実際に動かす事はできないもののプログラミングすることは可能となっています。
ということで、公開に先んじてプログラミングを始めてしまいましょう。
2009/12/24(木) 20:20:23
>>241
>著者からのコメント
>"The free lunch is over."

そんなこといわれてもな・・・
2009/12/26(土) 01:03:24
>>238
ソースレベルの互換性しかないので、バイナリは非互換。
ただしランタイムにカーネルのソースをコンパイル出来るので、恰もバイナリ互換があるかのようにコーディング出来る。
とはいえ、そうするとCELLみたいに特殊な構造だとパフォーマンスを発揮するようにコードを書くのがたいへんだろうけど。
2009/12/26(土) 13:46:36
Radeonの4650で遊んだ感じでいうとCellのが楽だな
2009/12/28(月) 09:34:55
>>242
そこには触れてやるな。みんなおかしいとは思っているがしゃちょーには逆らえない
2009/12/28(月) 19:37:20
>>245
http://techreport.com/discussions.x/18201
2009/12/30(水) 03:30:14
今年(来年?)はプログラミングコンテスト開かないの?
2010/01/01(金) 10:53:23
うっせー糞して寝ろ
2010/01/05(火) 20:45:23
どっちかっていうと、OpenGL内部のメモリ内容を直接書き換えれるのが大きいな。
描画内容に変更加えて再描画とか、データの高速可視化とか。

個人的にCPUに付加かけずにリアルタイム可視化ができるのがいいな。
2010/01/18(月) 19:22:26
OpenCL並列プログラミングって本が25日に出るみたい。
2010/01/18(月) 22:04:56
しってるしってる、と思ったらフィクスターズのやつとは別か
ソースキボンヌ
2010/01/18(月) 22:14:14
>>252
今日の日経の朝刊1面下の広告
2010/01/18(月) 22:18:22
出版社:カットシステム
著者:池田成樹
http://www.cutt.co.jp
255デフォルトの名無しさん
垢版 |
2010/01/18(月) 22:19:55
JAL株5円まで来たか
いよいよ明日はクライマックス
2010/01/18(月) 23:48:45
うっせー糞して寝ろ
2010/01/19(火) 00:15:14
便秘で出ないっす
2010/01/19(火) 20:00:15
ケツに目薬をさすと便秘が治るという噂を聞いたことがある
2010/01/21(木) 15:08:18
最近GPGPUを始めようと調べ始めたのですが、
cudaとCLの違いって、CUDAはCPU部分もカーネル部分も混在したプログラムを書いてnvccが両者を分離してくれる、
CLはプログラマ自身が最初からCPU用とカーネル用とを分けてプログラムを書く
という認識でよいですか。

カーネルとかグローバルメモリとかの概念はほぼ一緒と考えてよいのでしょうか。
CLの方が拡張言語っぽくないのと共通規格な分気持ちがいいですが、カーネルのコンパイルとか引数設定を明示的にしないといけない分どんくさい感じですね。
2010/01/21(木) 15:14:41
OpenCLはまだまともに動かないからCUDAにしとけ
261250
垢版 |
2010/01/21(木) 18:20:06
cudaとopenclの決定的な違い?

cudaはGPGPU
openclは計算機資源API
GPUに限らず、CPU,(故)Cell/BE,DSPチップ等の演算装置を汎用的な計算機資源として使うためのAPIがCL
GPUを使うならメモリ概念はCUDAとだいたい同じ。

完全にホストプログラムとカーネルプログラムおよび両者間通信を手作業で作らないといけないどんくささ(?)はあるものの
「メインプログラムはホスト実行で,計算機資源だけ別のハードウェアを使う」設計APIなので自由度はかなり高い

ただOpen○○のくせにMac10.6以外はまともに動く環境が少ないとか
JITコンパイルなので実行するまでソースのバグがわからない上に資料がまだ充実してないとか、
けっこうまだまだ問題も多い。
>>260の言う通り今やるならCUDAが良いと思うぞ。
262259
垢版 |
2010/01/21(木) 18:49:08
セルとかララビーとかアムドが本気を出すとか色々可能性があるからCLの方がいいかなと思ってたけど
CUDAの方がいいのかな。
拡張言語ってのが言語仕様的にOpenMPあたりと干渉しそうなのもCLを考えていた要素なんだけど。
2010/01/21(木) 22:57:22
どっちもたいして変わらん どっちもやれ
2010/01/22(金) 18:58:59
OpenMPとOpenCLが干渉?
ホスト管理スケジューリングぐらいじゃねーの?
2010/01/22(金) 23:44:42
radeonでCUDAって出来ないの?
2010/01/23(土) 01:25:03
無理。Stream使え。
でも、技術デモ程度ではなく実用したいならゲフォ使え。
2010/01/23(土) 10:59:33
スレ違い
268デフォルトの名無しさん
垢版 |
2010/01/26(火) 01:24:10
ふぃくすたのOpenCL入門買ったぞ、LinuxでSDKについてきたサンプルコードがコンパイルできなくて死んだ
っていうか普通にアルゴリズムの勉強してからやれクズ
2010/01/26(火) 01:27:54
二行目どういう意味?
2010/01/26(火) 05:29:18
268 said s/he was kuzu.
2010/03/10(水) 22:33:57
>>266
GPGPU目的だと、ATI<nVidiaなの?
2010/03/10(水) 22:52:32
2010/03/11(木) 20:16:16
CUDA(nVIDIA)/Stream(AMD) = GPGPU環境
OpenCL = 計算資源利用API ≠ GPGPU

GPGPUのみのなら別スレへ。
とりあえずOpenCL<CUDA(nVIDIA)/Stream(AMD)
かつ開発環境の整備具や資料面ではGPGPUでもnVIDIAに軍配が上がるのが一般論
2010/03/12(金) 01:13:55
CUDAを使った実績はかなりあるけど、
OpenCLをつかってパフォーマンスが上がるって結果はあるのか?
2010/03/12(金) 13:56:03
FLOPSのベンチとか調べればちらほら(程度は)ある。ただFLOPSが高くても転送コストが重かったりする。
実行結果をそのままOpenGLとかで可視化するとか転送コストを挟まない場合には向いてる。レイトレとか。
ただ開発/デバグにかかる時間と労力はCUDAと比較にならないと思うぐらい悪い。慣れれば別。

俺はOpenCL好きだけどね。
2010/03/13(土) 13:19:47
昔の超不安定なRadeonのせいでRadeonを買うことにトラウマがあるから
GPGPUもGeForceしかしたくない
2010/03/13(土) 21:40:13
いまノートPCでRadeonHD3200
OpenCL使ってみたいけど、使える環境にするにはPC一式を新しく買うしかないよね?orz
2010/03/13(土) 22:12:04
ATIStream版OpenCLのCPUデバイスで我慢すれば
2010/03/14(日) 04:36:42
ATI、各GPUのドライバまで手が廻らな過ぎ。
2010/03/14(日) 10:20:38
正直どこのベンダもOpenCLにそんなに力入れてない気がしてきた。。。
2010/03/14(日) 12:58:43
いつまでnVidiaに夢見てんだよ
282デフォルトの名無しさん
垢版 |
2010/03/14(日) 15:29:40
GeForce GT 240 でOpenCL SDK V2.3のサンプルが動かない。
というかSDKでビルドは成功するが全然動かない。
ドラバは最新の 196.21
GPU-Z.0.3.9で確認するとOpenCLはチェックが入っている。
2010/03/14(日) 15:41:44
現状CUDAで十分な気がする
2010/03/14(日) 18:08:04
CUDAもOpenCLもこのまま消えそうだね
2010/03/14(日) 21:15:50
ほかで何が残りそうなの
2010/03/14(日) 23:21:11
調べてないけど、OpenGL 4は、OpenCLと連携するようになってるらしいから
徐々にOpenCLも使われるようになっていくんじゃない
2010/03/15(月) 18:48:08
POWERVR SGX545を採用したモバイル機器での普及の方が先かも知れない。
2010/03/15(月) 20:09:26
>>286
既にOpenGLと連携できるよ。頂点バッファとかテクスチャとかだからGL2.x以降とかな?
289デフォルトの名無しさん
垢版 |
2010/03/18(木) 17:36:26
NVIDIAのOpenCLのダウンロードから一通りダウンロードしてきたけど、
コンパイルとかは、どのコマンドを使うの?
OSはLinuxです。
2010/03/18(木) 19:40:13
何のコンパイル?
291デフォルトの名無しさん
垢版 |
2010/03/20(土) 03:12:14
>>290
OpenCL file
292デフォルトの名無しさん
垢版 |
2010/03/20(土) 05:50:48
nvcc
293290
垢版 |
2010/03/20(土) 08:02:27
fileてのが何かよくわからんが
NVIDIAサンプルに含まれるホスト側のCソースなら/OpenCL/makeでいけるかと。
カーネル用のCLソースならclBuildProgram()関数でどうぞ。
2010/03/20(土) 17:29:53
CUDA 3.0 Downloads
http://developer.nvidia.com/object/cuda_3_0_downloads.html
295デフォルトの名無しさん
垢版 |
2010/03/20(土) 18:17:46
Mac OS X 10.6を手に入れたんだけど、OpenCLの使い方を教えてください
とりあえず、ドライバだけは入れました。
2010/03/20(土) 19:11:03
ソース書く→コンパイル→実行→happy
2010/03/20(土) 20:03:11
>>295
ttp://developer.apple.com/
2010/03/20(土) 20:08:14
あと
ttp://developer.apple.com/mac/library/navigation/index.html?section=Resource+Types&topic=Sample+Code#section=Frameworks&topic=OpenCL
299デフォルトの名無しさん
垢版 |
2010/03/21(日) 13:14:54
LinuxでOpenCLやってるんだけど、倍精度は使えへんの?
300デフォルトの名無しさん
垢版 |
2010/03/21(日) 14:28:18
282だけど
CUDA 3.0 Downloads
で上手くいきました。
ありがとう。>294
2010/03/22(月) 12:45:47
Linuxと倍精度になんの関係が
2010/03/22(月) 13:16:38
CL C言語での倍精度浮動小数点はGPUベンダーにより任意サポート
303デフォルトの名無しさん
垢版 |
2010/03/26(金) 00:59:44
よくわからんけど、倍精度を有効にするスイッチとかあるの?
CUDAだとsm13だけど
2010/03/26(金) 08:06:27
>>303

あるよ

対応しているかは実装依存だけど。

http://www.khronos.org/opencl/sdk/1.0/docs/man/xhtml/cl_khr_fp64.html
2010/04/01(木) 22:53:00
struct {
int I;
} tA;

struct {
tA * pa;
} tB;

__kernel void Func (__global tB *b) {
int idx = get_global_id(0);

int B = b[idx].a->I;
}

みたいにすると、int B に値が入らないのってなんで?
書き方が悪いのかな?

教えてエロい人。
2010/04/02(金) 00:52:35
>>305
君にOpenCLは向いてないよ。。。

ちなみに
b[idx].pa の参照先が不定もしくは管理領域外だと思われ

通常であればアクセス例外
2010/04/02(金) 01:07:15
これはコンパイル通るのか?
2010/04/02(金) 02:12:02
tAの実体はいずこ?
tBのメンバpaはポインタだぞ。
ポインタは実体ではないぞ。
やるなら、

__kernel void Func (__global tB *b) {
int idx = get_global_id(0);
tA C;
C.I = 1;
b[idx].pa = (tA *)(&C);
int B = b[idx].pa->C;
}

じゃないか?
OpenCLより、ポインタを先に勉強した方がいいぞ。
2010/04/02(金) 02:33:18
>>308
あ、間違えた。
int B = b[idx].pa.I;
だった。
そもそも根本的におかしいね。
悪い、俺もポインタの勉強が必要だわ。
それ以前に構造体の勉強が必要だ。
2010/04/02(金) 08:10:34
305だけど、306の話で知りたいことはわかった。
変な質問でごめんね。みんなありがとう。

2010/04/23(金) 01:47:27
ラデですまんが、vista64でATI Stream 2.01にしたらopen CLのサンプルがVC++ Expressでコンパイルできても動かない(clGetPlatformIDsが-1001を返す)んだけど、こんなことなた人います?
2.0bだと動いたのだが。
Platform SDKの64bitコンパイラを使えばちゃんとサンプルも動かせるけど、MS流儀のコンパイルオプションやmakefileの書式が面倒くさい・・・
LinuxのCUDA機を購入する前にPCでOpen CLのお勉強をしようと思ったのにつまらんところで時間をくってしまった。
312デフォルトの名無しさん
垢版 |
2010/04/23(金) 11:34:25
SDKサンプルのoclBandWidthTestやったらホスト・デバイス間で5300MB/sくらいだったんだけど
この数値ってグラボだけじゃなくマザーとメインメモリも影響するよね?
GPGPUの処理がハードウェア的にどう依存してるのか良くイメージ出来てないんだけど
i7のQPIとかは影響するの?
2010/04/23(金) 12:28:21
>>311
http://developer.amd.com/support/KnowledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=71
2010/04/24(土) 00:44:55
>>313
そこを読んだけど、それにはデフォルトを呼び出すんじゃなくてclGetPlatformIDsを呼び出してセレクトしろってことでしょ。
で、2.01の64bit版にはちゃんと32bit版のOpenCL.dllが入っているのに、32bitでコンパイルしたらclGetPlatformIDsがなにやら不明なエラーを返してしまうことが問題で・・・
2010/04/24(土) 01:01:40
SDKを削除>再インストールしてみたらどう?
こんな話があるし↓

ttp://absolutearea.blogspot.com/2010/04/opencl-ati-stream-sdk_05.html
2010/04/24(土) 01:06:52
>>315
それはビルドができないってことでしょ。
ビルドはできるんだよねぇ。実行もできる。ただOpenCLの関数が怪しい物を返すので。
OpenCL.dllの日付は32bit版と64bit版も同じだからバージョン違いが残ってるわけでもないしなぁ。
2010/04/24(土) 03:20:56
>>316
中身読んでくれてないのね…
この人も-1001 返ってるって書いてあるし、
貴方とおんなじかなって思ったんだけど

> 「デバッグ」メニューから「デバッグなしで開始」を選択
> HelloCL!
> Getting Platform Information
> Platform::get() failed (-1001)
> 続行するには何かキーを押してください . . .
> ありゃ?なんでじゃ?
>
> ATI Stream SDK をインストーラでリペアしてもだめだった。
> しかたがないので、ATI Stream SDK をアンインストール後、再びインストールした。
> サンプルをコンパイルして動作確認。うまくいった。
2010/04/24(土) 03:37:42
>>317
あら、本当だ。
ごめんなさい。
ダラダラとビルドできないことが書いてあったからこれはちゃうなと。
-1001なら同じだわ。
2010/04/24(土) 10:55:01
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
2010/04/24(土) 15:07:22
そんなwwwとか書くなよ・・・実際のところ既にアンインストール後再インストールは試してるしなぁ。
2010/04/24(土) 17:53:49
なんで出されたもの読まずにコメント出来るのか理解不能ではある
322デフォルトの名無しさん
垢版 |
2010/04/25(日) 01:04:34
>>320
後だし情報で言い訳wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
2010/05/09(日) 03:00:01
>>321
出されたものを読まないでコメントするようだから
結局解決まで時間がかかる人なんだよ。理解できる。
2010/05/09(日) 09:39:11
ヤギだからじゃないのか?
2010/05/14(金) 23:31:43
GF9400 (CUDA 3.0)のマシンとHD4850 (ATI Stream 2.1)のマシン両方で起こっているのだけれど、
clEnqueueNDRangeKernelで実行したカーネルのイベントがclGetEventInfoで状態を見るとCL_QUEUEDのまま変わりません(queueはインオーダー実行にしてあります)。
kernel自体はきちんと実行終了して希望の結果が得られて、clEnqueueWaitForEventsにイベントを入れて待ってもきちんとCL_SUCCESSで戻ってくるのに、そのイベントの状態を見るとCL_QUEUEDのまま。
そのために、clGetEventProfilingInfoでカーネルの実行時間を調べようとしてもCL_PROFILING_INFO_NOT_AVAILABLEが返ってきて調べられない始末(CL_COMPLETEになっていない証拠)。
clEnqueueWriteBufferなどのイベントはちゃんとCL_COMPLETEになっている。

なんか再現する簡単なプログラムを付けたいけれど、OpenCLはカーネル動く例を書こうとしてもオマジナイが多すぎて改行多すぎで載せられないし・・・

・kernelは正しく実行されている
・WaitForEventも正しく戻る
・でもイベントはqueuedのまま
2010/05/14(金) 23:59:03
うpろだに上げればよかろうよ
2010/05/16(日) 13:46:46
並列処理の基本であるキューにためつつキューの中身を取り出して処理するみたいなことは出来るの?
2010/05/16(日) 21:32:19
えっ
2010/05/16(日) 22:10:17
そのためのキューです
2010/05/17(月) 00:17:50
キューはCPU側で実装すればいいのか
331325
垢版 |
2010/05/17(月) 10:55:56
clEnqueueWaitForEventなんか使ってちゃダメだな。
clWaitForEventで待機したらeventがCL_COMPLETEになりました。

queueのインオーダーだと勝手にブロッキングになると勘違いしていてwaitなんて入れても入れんでも一緒ダロとか思ってました。

ところで、アウトオブオーダーの時にclEnqueueWaitForEventなんか使ったらqueue内の順序無視してwaitを先にやっちゃって止まるなんてことにはならんのだろうか・・・
2010/05/17(月) 23:56:26
windowsのリモートデスクトップ経由でOpenCLのプログラムを実行するとplatformの取得に失敗するのな。
びっくりした。windows使えねぇw
2010/05/18(火) 00:18:59
それはNVIDIAのドライバのせいでは?
ATIのOpenCLでもそうなる?
2010/05/18(火) 00:39:34
そうなる。Windowsの仕様。
公式でもVNC使えって言ってる。
ttp://developer.amd.com/gpu_assets/App_Note-Running_ATI_Stream_Apps_Remotely.pdf
2010/05/18(火) 05:11:24
NVIDIAのドライバのせいだなw
2010/05/18(火) 09:44:11
VNCは遅い上にリモートの画面のロックは解除されたりキーボードやマウスでいじり放題になるので目の届かないコンピュータをいじるもんじゃないわな。
迂闊にエロサイトなんて見てしまったら・・・
2010/05/18(火) 10:36:11
cygwinでsshdを起動してssh経由でやっても動かないぜ。
mpiでやっても当然ダメなんだろうな。
こんな状態でHPC市場を狙ってるんですかねマクソさんは。
2010/05/19(水) 13:04:33
スクリーンセーバーにしてしまおうかと真剣に考えたw
2010/05/20(木) 22:39:47
個人的な覚書

ATI Stream 2.1のcl_platform.hはこのままだとmingw-gccで使えない。
38行目の#include <stdint.h>を削除して
77行目 #else /* !_WIN32*/の次の行に入れる必要あり。

khrnosの配っているcl.hpp (\date $Date: 2010-04-23 10:16:50 -0500 (Fri, 23 Apr 2010) $は
namespace cl のなかでstd::pairと呼び出してる箇所を全て ::std::pairと修正、
#if defined(__CL_ENABVLE_EXCEPTIONS)
#include <exception>
#endif
をnamespace clの外側に移動する必要あり。
340デフォルトの名無しさん
垢版 |
2010/06/03(木) 07:06:02
ワープって何よ。
亜空間跳躍となにか関係あるのか?
2010/06/03(木) 23:01:30
OpenCLはワープサイズやウェイブフロントサイズをとってこれないのが難点だな。
これが取れないとポータビリティのある最適化はできないよ〜。
2010/06/04(金) 13:26:57
ワープとかの概念が無用なプラットフォームも OpenCL の対象範囲。
どうせハードウェアごとの最適化が入る部分は、CL がどうこうする部分じゃないよ。
その辺は #ifdef で。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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