OpenCLプログラミング#1

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

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

公式ページにはAPIのヘッダファイルが公開されており、
まだ実際に動かす事はできないもののプログラミングすることは可能となっています。
ということで、公開に先んじてプログラミングを始めてしまいましょう。
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 で。
2010/06/04(金) 22:55:03
ワープサイズに依存しない機種の場合はワープサイズ1でも返してくれればいいんだけど。
344デフォルトの名無しさん
垢版 |
2010/07/01(木) 23:02:44
コードのコンパイル、デバイスの生成、データ転送に喰われてスケールしないんだが。
ありがた味のわかるサンプル教えてくれ。
2010/07/01(木) 23:05:51
コンパイルやデバイスの生成やデータ転送と比べものにならないくらい長時間のデータを計算させる。
346デフォルトの名無しさん
垢版 |
2010/07/03(土) 00:48:14
openclでGPGPUするかどうかの判定ラインって何?
やってみないとわからんのか。
2010/07/03(土) 12:42:13
計算量がNの3乗くらいなら有効だと思うよ。
ループが3重にネストしているような奴。
2010/07/24(土) 22:38:24
水を差すようだけど,OpenCLだからと言ってO(N^3)がO(N^2)に落ちる訳ではないんだから
それだけでは何の基準にもならないよね.
滅茶重い計算だとNも単純に大きくてデバイスローカルなメモリに収まらなかったりするし
対象デバイスのwarp sizeを想定しながらブロック化とか,結局ifdef祭り.
2010/07/24(土) 23:00:12
うるせえだまってろ
2010/07/25(日) 08:00:33
でっていう
2010/09/02(木) 01:36:07
もう少しなんかあっても良いよね。
2010/10/10(日) 01:30:39
文字列処理のサンプルってないですか?
2010/10/24(日) 00:50:26
新しいMacBookPro買ったんだけど
clCreateContextFromTypeでGPU指定したら、そこからCL_SUCCESSが返ってこない・・・
Appleのサイト見てもGeForce GT 330Mはサポートされてるのに
2010/10/24(日) 01:04:56
>>353
nVidiaが公開してるCUDAドライバ入れた?
2010/10/24(日) 01:33:46
>>354
SnowLeopardはOSでサポートされてるんじゃないの?
ちょっとぐぐってきます・・・
2010/10/24(日) 10:40:54
ドライバもなしにハードを動かそうとな?
2010/10/24(日) 16:18:23
http://yanoshin.jp/entry_154.html
いつのバージョンかわからんけど
>*必ずToolkit、Driver、SDKの順にインストールすること!(なぜか?)

ドライバだけで、他は必要ないのかな?
http://journal.mycom.co.jp/column/osx/335/index.html
http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/OpenCLontheMacPlatform/OpenCLontheMacPlatform.html
2010/10/24(日) 16:21:17
今までRadeonユーザーにOpenCL使ってもらうには
SDKインストールしてもらわないといけなかったんだが、
最新ドライバから、OpenCLランタイムをインストールできるようになったらしい。
めでたいことだ。
2010/10/24(日) 17:39:16
Radeonって全然高速じゃないし使う意味ないよなぁ
2010/10/24(日) 18:35:46
Radeonユーザーの場合はDirectCompute使った方が良いね
2010/10/24(日) 18:41:34
Core i …… RADEON HD 6xxx
Phenom II …… GeForce GTX 4xx
2010/10/24(日) 19:48:56
RadeonだとN体 24Gぐらいしかでないしな
Geforceだと500Gぐらい平気で出るんだけどねぇ
2010/10/24(日) 23:22:24
>>356
秀和システムのOpenCL入門を読んだら
Mac:Xcodeあればいい
Win:ドライバダウンロード必要
としか書いてなかったからてっきり。
>>357
インストール順番さっそくミスった
実はMacは初めてだからアンインストールの仕方ぐぐらんと
364363
垢版 |
2010/10/27(水) 09:01:28
やっぱり動かない・・・
よく見たらApple英語サイトはGeForceGT330M書いてあるけど
日本語のほうは載ってないし
http://www.apple.com/macosx/specs.html
http://www.apple.com/jp/macosx/specs.html
2010/10/27(水) 11:20:00
それ、OSの必要条件じゃん。だから何?
2010/10/29(金) 07:17:55
http://developer.apple.com/library/mac/#samplecode/OpenCL_Hello_World_Example/Introduction/Intro.html
> __kernel square

> __kernel void square
に置換。

のサンプルも動かない?
2010/10/29(金) 16:50:26
>>365
ごめん それは関係なかった
>>366
カーネル以前にclGetDeviceIDsでGPU指定だと止まる。CPUでは動く。。。
試しに>>357の参考してCUDAのサンプルも動かしてみたら
CUDA使用可能なデバイスが見つからないというエラーがでる(´・ω・`)
でも動くのもあって、oceanFFTとかnbodyとかは動いてくれるんだけど
2010/10/29(金) 19:14:57
そりゃ変だな。ちなみにこちらは Radeon HD 5670 の iMac だが普通に動いてる。
CUDAのドライバにSDKは入れてる(入れただけで放置してたが)。
2010/11/06(土) 16:01:55
gccはOpenCLに興味ないみたいだね
代わりにclang使うしかないのか?UNIXでは
2010/11/07(日) 00:02:23
>>369
gccは開発技術レベル落ちまくってて
本業のコンパイラもLLVM連中やMSに
抜き去られてやばいらしい
2010/11/07(日) 00:11:37
つってもGCC死んだらUNIX系が基盤から崩壊するから、
どうにかしなきゃいかんだろうしどうにかするだろ
2010/11/07(日) 00:29:49
マルチアーキ型のgccの最適化処理がx86特化型であるmsのソレ以上だったことなんてあったか?
2010/11/07(日) 00:30:00
GCCってそんな立ち位置だったっけ?
広く愚直にというイメージがあるんだが
2010/11/07(日) 01:03:36
GNUソフトウェアはいつだって言いだしっぺの法則が適用されるんだぜ。
Cell B.E.だってSCEが自らABIを公開してGCCやLinuxカーネルのパッチをコミットした。

NVIDIAやAMDがGCCにコミットしない限り動かんだろ。
2010/11/07(日) 05:02:21
>>371
もうどうにもならん
ORACLEのせい
2010/11/07(日) 05:21:45
なんだかんだでHPCなんて所詮はサーバ市場の1%未満のニッチ市場だよ。
そのなかのGPGPU用の言語の一つのために必死になる奴もそうそういない。
なんならRailsやZend使ってWebサービスを構築してるSIerにでもGPGPUの素晴らしさを説いてくれw
2010/11/07(日) 10:51:44
>>376
動画のエンコード・デコードはダメなの??
2010/11/07(日) 13:34:36
ffmpegと同等の画質を達成すればGoogle様が興味を示す

かも
2010/11/07(日) 13:44:30
なんでGPUを使う→低画質という思考になるの?
2010/11/07(日) 14:24:23
馬鹿だから
2010/11/07(日) 15:08:22
ブロックサイズを細かく分けて並列処理しないとGPUのスループットの強みを生かせないから。
CPUで処理するレベルの高画質エンコードは構造的に不向き。せいぜいフィルタだけやらせておけというレベル。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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