X



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

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

公式ページにはAPIのヘッダファイルが公開されており、
まだ実際に動かす事はできないもののプログラミングすることは可能となっています。
ということで、公開に先んじてプログラミングを始めてしまいましょう。
0649デフォルトの名無しさん
垢版 |
2012/09/08(土) 18:07:21.58
OpenMankoはよ
0660デフォルトの名無しさん
垢版 |
2012/12/20(木) 01:25:19.05
>>615
vetor extension記法でゴリゴリかく。
若しくは、-O3 -ftree-vectorize
但し、後者はまだまだ未熟なのは確かだね。
0661デフォルトの名無しさん
垢版 |
2012/12/21(金) 09:03:58.99
最近OpenCLを本格的に始めたんだが、
OpenCLのいいところは、コンパイラを選ばない、
カーネル以外はC++で書けるといところかな。

CUDAだと同じことができるけど、ホスト側でNVCC以外使おうとするとちょっと面倒だ。
ただ、カーネルの最適化がコンパイラでもできるから、
パフォーマンスは出やすいな。

LLVMで最適化レベルって設定ができるのかな?
0662デフォルトの名無しさん
垢版 |
2012/12/22(土) 01:07:39.90
>>661
アーキテクチャが何にでも対応できるが、
アーキテクチャによって最適なWARP(に相当するもの)の数が違ったり、
コアレセンスアクセスできる条件が違ったり、キャッシュの有無だったりで
結局はアーキテクチャ依存の最適化をしないと速くならないよ。
0665デフォルトの名無しさん
垢版 |
2013/01/13(日) 19:49:11.31
Trinity APUで使ったらCPU使用率が50%(2コアなので1コアがフル稼働状態)になったが、こんなもんなの?
GPUで計算してるはずなんだが。
0670デフォルトの名無しさん
垢版 |
2013/01/15(火) 12:44:28.36
ちゃんとGPUで計算されてないだけじゃね
afterburnerかなんかでGPU側の使用率も見てる?
0671665
垢版 |
2013/01/20(日) 11:45:47.76
Catalystのバージョン上げたらCPU使用率下がりました
0672デフォルトの名無しさん
垢版 |
2013/01/21(月) 06:12:45.45
AMDのOpenCL SDKはCPU(SSE)デバイスもサポートしてるから
そっちで動いてたってことかな
0677デフォルトの名無しさん
垢版 |
2013/01/26(土) 18:02:42.38
いくつか本読んで基礎的なことは
わかったんだけど、openclでmpegのエンコーダー
作ってみたいから何か参考になる情報ないかな
0678デフォルトの名無しさん
垢版 |
2013/01/26(土) 21:16:57.04
CUDAでこれだからOpenCLはチューニング大変だな
pc.watch.impress.co.jp/img/pcw/docs/584/977/html/7b_prometech_32.jpg.html
0679デフォルトの名無しさん
垢版 |
2013/01/26(土) 22:38:20.74
>>677
MPEGってどれよ?
MPEG4(H.264)のことならx264がSSE、AVXアセンブリ含むソースコードが読めるからオススメ
0680デフォルトの名無しさん
垢版 |
2013/01/30(水) 22:41:00.14
試しに↓使ってみたんだがローカルメモリ使ったら速度が3割落ちた。
www.aocplan.com/gpgpu/gpgpu-benchmark
0685デフォルトの名無しさん
垢版 |
2013/02/11(月) 23:11:22.51
標準のC++に替わり今後はOpenCLが標準に確定したな
OpenCLでパフォーマンスが激向上するから当然か
0687デフォルトの名無しさん
垢版 |
2013/02/17(日) 21:21:57.05
>>684
ありがとう。VLIW4だとスレッド数1/4にして、1スレッドで4つずつ処理するようにしたら倍速になった。
0688デフォルトの名無しさん
垢版 |
2013/02/18(月) 04:23:25.11
R600のISA解説したpdfもどっかにあって、あれ読むとKernel Analyzerの右側の命令が読めるようになって捗るぞ。
0690デフォルトの名無しさん
垢版 |
2013/05/10(金) 23:28:13.87
CUDAが動かない古いNvidiaのビデオカードでも
OpenCLなら動いたりするものなのでしょうか?
0691デフォルトの名無しさん
垢版 |
2013/05/11(土) 17:38:28.19
確かnvidiaがOpenCLサポートしているのは、
チップがGeforce8以降かつ、ドライバの対応も必要だったと思う。
でもgeforce8以降はほとんどCUDA(とPhysXが)乗ってたはず。
それ以前はサポートされていないから動かないんじゃないかな(機材とドライバがないから検証できん)
0692デフォルトの名無しさん
垢版 |
2013/05/11(土) 23:50:31.95
CUDAにせよ、OpenCLにせよ古いマシンでやろうとする奴はなんなんだ?
古いGPUじゃ大して効果がないし、アーキテクチャがどんどん変わって
いるから使えないものが多いのに。
最新のアーキテクチャでも1万円も出せばそれなりのものが買えるのになあ。
0693デフォルトの名無しさん
垢版 |
2013/05/12(日) 10:11:53.81
研究目的なら最新ので良いけど、実用だと4年前に導入した
数百台の計算機で高速化したい、とかもあるからな。
0694デフォルトの名無しさん
垢版 |
2013/05/13(月) 17:15:31.08
GeForce8以前って、どんだけ古いカード使っているんだよw
いろんな意味で、無理無理。
0695デフォルトの名無しさん
垢版 |
2013/05/15(水) 13:05:11.17
とりあえずGPGPU普及させたいならGPU各社ともミドルレンジ以下でFP64対応切るのやめてくんないかな
性能出るかどうかより使えたり使えなかったりってのが一番困る
0696デフォルトの名無しさん
垢版 |
2013/06/05(水) 08:17:39.89
OpenCLのチューニングって、まずどのあたりから手を付ければいいかな?
ワークグループ分割数で結構変わるという話は聞くけど、やっぱり
おまかせより明示的に指定した方がいいんだろうか?
0698デフォルトの名無しさん
垢版 |
2013/06/05(水) 20:55:53.52
ハードに合わせて適当な値を選んでくれると思ってたんで自分で下手な値を設定するより
いいかと思ってたんだけど、たしかに明示的に指定した方がよくなるケースが多いですね。
目安としてはCL_DEVICE_MAX_WORK_GROUP_SIZEに合わせておけばいいんだろうか?
それ以外、これは押さえておけ、というようなチューニングポイントってありますか?
0699デフォルトの名無しさん
垢版 |
2013/06/06(木) 22:37:43.71
アドレスモードが便利そうなのでイメージオブジェクトを使ってみようと思ったんだけど、
これって4ch固定なんですかね?できれば1chで使いたいんだけど。
0700デフォルトの名無しさん
垢版 |
2013/06/17(月) 09:44:11.96!
>>698
> 目安としてはCL_DEVICE_MAX_WORK_GROUP_SIZEに合わせておけばいいんだろうか?

これだとスピードでないよ。
Radeonだったら>>684の最適化マニュアルを、NVIDIAだったらCUDAの
説明書を読め。
0706デフォルトの名無しさん
垢版 |
2013/08/01(木) NY:AN:NY.AN
今AMDの環境で開発しているんだけど、NVIDIAの環境でもビルドできるよう
1.1の機能に限定することってできないんですかね?
CL_USE_DEPRECATED_OPENCL_1_1_APISみたいな。
0707デフォルトの名無しさん
垢版 |
2013/08/18(日) NY:AN:NY.AN
OpenGLとの連携やっている人いますか?
OpenGLのHGLRCからcl_device_idを得るのにclGetGLContextInfoKHRというのが
ありますが、これを呼ぶ際、properties引数にCL_CONTEXT_PLATFORMを含めないと
エラー(CL_INVALID_PLATFORM)になります。
Platformを決め打ちで入れてやれば成功はしますが、cl_device_idを得る前にそれが
含まれるcl_platform_idを本来どうやって求めるのでしょうか?
0708デフォルトの名無しさん
垢版 |
2013/08/18(日) NY:AN:NY.AN
>>707
clCreateContext に渡した properties と同じもので GL context を1つに特定できるものを渡せって書いてあるだろうに
clGetGLContextInfoKHR で指定せずにエラーになるなら clCreateContext ではデフォルト値以外の cl_platform_id を指定したんだろう
gl_sharing が有効な CL context は作成済みなのになんで cl_platform_id だけ行方不明なんだよ
余所のライブラリが作った CL context に問い合わせたいなら clGetContextInfo で CL_CONTEXT_PROPERTIES
0709デフォルトの名無しさん
垢版 |
2013/08/18(日) NY:AN:NY.AN
回答ありがとうございます。
ただ、clCreateContextはclGetGLContextInfoKHRでデバイスを得た後に呼ぶことに
なると思うのですが?
手順は以下で間違ってますかね?

GLコンテキスト(HGLRC)作成
→clGetGLContextInfoKHRで関連付けられているCLデバイスを取得
→clCreateContextでCLコンテキストを作成

いずれにしても、どのデバイスを使っているかがわからないとプラットフォームも
決まらないと思うのですが。
0711デフォルトの名無しさん
垢版 |
2013/10/24(木) 21:28:52.21
vloadはアラインメントの制約がゆるい。要素でそろってればOK。
速度は実装によるだろうけど同じか制約がゆるいvloadのほうが少し遅い。
0712デフォルトの名無しさん
垢版 |
2013/10/24(木) 22:48:45.60
なるほど。

アラインメントの制約のせいで、ちょっと冗長になってたあのコードとかを小さく綺麗に書き直せるかも。
これは良いことを知った。サンクス。
0715デフォルトの名無しさん
垢版 |
2013/11/22(金) 20:47:48.41
OpenVXってのが気になる
0717デフォルトの名無しさん
垢版 |
2013/11/30(土) 20:57:20.27
OpenCLって初期化とかやたら面倒なんですが、
OpenGL に対する glfw や GLUT みたいなライブラリはないんですか?

勉強してみたい(というか、勉強しかけた)のですが、
計算処理を楽しむ前に挫折しそうです。
0718デフォルトの名無しさん
垢版 |
2013/11/30(土) 21:26:47.63
あるけどない
独自API、英語のみのマニュアル…

初期化なんて一度書けば使い回しだからとりあえずやってみるべき
0719デフォルトの名無しさん
垢版 |
2013/11/30(土) 22:18:44.90
マニュアルが英語なのは全く問題ないので紹介していただけないでしょうか。

それでも枝葉末節の部分が面倒であれば、今はそういうものだと諦め、
コピペで使い回してかんばります。


ただ、私はたとえば OpenGL 入門者に対して、同じ理由
つまり「初期化なんて一度書けば使い回しだから」という理由で
ウィンドウ作らせたり、レンダリングコンテキストを作らせたりはしたくないです。
使い回し
幸い OpenGL にはユーティリティライブラリがあり、入門者にはありがたいです。
なので OpenCL にも入門者用にきっと何かあるだろうと思っていました。
0721デフォルトの名無しさん
垢版 |
2013/11/30(土) 22:53:53.35
NVIDIAやAMDのサンプルコードには簡単なユーティリティが入っているよ。
OpenGLみたいに糞面倒なわけじゃないから、わざわざGLUTみたいなものを
作ろうと思った人はいなかったんだろう。
0725デフォルトの名無しさん
垢版 |
2013/12/01(日) 03:47:08.42
c++binding使えば簡単じゃないか。
まあ、プラットフォーム選択する時点で
cudaには必要ない工程だが
0726デフォルトの名無しさん
垢版 |
2013/12/01(日) 07:35:28.28
>>719
intelが最近OpenCLライブラリやGPU向けライブラリのプレビュー版を発表してる
ttp://software.intel.com/en-us/intel-ipp-preview
IPPはこれまで最適化済みCPUライブラリだったけど、それをGPUにも拡張しようとしてる模様
0728デフォルトの名無しさん
垢版 |
2013/12/03(火) 13:47:40.89
amd apu+linuxでaparapi経由で使ってみたんですが面白そうですね。
はるか昔に、javaで配列関係はどうしようかjniにでもしようかと悩んでたんですがこれでやっと悩みは解決できました。
java9.stream.parallelがopenclに対応してaparapiも不要になる(jvmと結合する)ようなので、openclを使えばjavaのままで配列のソリューションが得られるようです。
まだ触って4日ぐらいですが勉強がてらに、行列などの配列依存のライブラリを書き直してみようと思います。
0730デフォルトの名無しさん
垢版 |
2014/01/11(土) 01:38:48.46
>>717
software.intel.com/en-us/vcsource/tools/opencl-sdk/clu-api
CLUとか
github.com/Computing-Language-Utility/CLU/blob/master/simple/simple.c
このぐらいに書ける。
使ったことはないので便利かどうかは知らない。
0731デフォルトの名無しさん
垢版 |
2014/02/24(月) 15:19:36.59
Core iとグラボつんでグラボで画面表示しててもIntelHDでOpenCLの計算をさせることはできるのでしょうか
0733デフォルトの名無しさん
垢版 |
2014/02/24(月) 17:04:11.19
あれ?遅くなる要因あるのでしょうか
使ってないIntelHDも使いたいというイメージだったのですが
0739デフォルトの名無しさん
垢版 |
2014/03/24(月) 20:46:02.33ID:+qxUA/lQ
>>733
俺も今日勉強始めたばっかだから実態よく分からんが、
規格ミニマムだとGPUで実行するバイナリを、
プログラム実行時に動的にコンパイルしてマウントする場合があるらしく、
それだとコンパイルのオーバーヘッドで遅くなりそう。

実行時にコンパイルせず事前にコンパイルしたバイナリを使うこともできるそうで
NVidia, AMDあたりはLLVMで動いてるからまず大丈夫だろうけど、HD Graphicsはどうなるんだろうか?
0741デフォルトの名無しさん
垢版 |
2014/04/23(水) 21:27:46.80ID:Xxk46iNW
質問スレってないかな?
Debian testing 64bit環境でbeignet 0.80をインストールしてclinfoしたら
GPU一個しか積んでないはずなのにPlatformが2個検出されるのですよ
これって正常なの?
0743741
垢版 |
2014/04/23(水) 22:38:07.40ID:Xxk46iNW
はい、haswell(i7-4771)を使っています。
その他のグラフィックボードは積んでいません
0744デフォルトの名無しさん
垢版 |
2014/04/23(水) 23:16:57.80ID:RpkkzUGi
Platformの数とデバイスの数はイコールじゃない。
デバイスはCPUとGPUの2個見つかるはず。ちなみに内蔵かどうかは関係ない。
気になるならclGetPlatformIDs/clGetPlatformInfoで見てみりゃいい。
0745741
垢版 |
2014/04/23(水) 23:39:22.71ID:Xxk46iNW
はしょって書くと以下のように2回出力、Platform IDが一緒でプログラムなどでcl::Platform::getをすると
2個で返ってきます。(DeviceはALLで情報をとってもGPUしか返ってきません。CPUでDeviceをとろうとするとエラーが出ます)

Platform Name: Experiment Intel Gen OCL Driver
Platform ID: 0x7f6ee0ba1a40
Name: Intel(R) HD Graphics Haswell M
Vendor: Intel
Device OpenCL C version: OpenCL C 1.1 beignet 0.8.0
Driver version: 0.8.0
Profile: FULL_PROFILE
Version: OpenCL 1.1 beignet 0.8.0

Platform Name: Experiment Intel Gen OCL Driver
Platform ID: 0x7f6ee0ba1a40
Name: Intel(R) HD Graphics Haswell M
Vendor: Intel
Device OpenCL C version: OpenCL C 1.1 beignet 0.8.0
Driver version: 0.8.0
Profile: FULL_PROFILE
Version: OpenCL 1.1 beignet 0.8.0
0746デフォルトの名無しさん
垢版 |
2014/04/23(水) 23:55:44.68ID:TUgA9FPl
Platform数はドライバの数
汎用のドライバとIntelチューンのドライバの2つが入っていたら2つのプラットフォームが出てくる
少なくともWindowsだとそんな感じ

あと745の結果でPlatformIDが同じなのはおかしい
多分745のプログラムはバグってる
0747741
垢版 |
2014/04/24(木) 00:06:20.94ID:T0adDPXi
ドライバの数ですか・・・Debianのパッケージを入れる時にたしかに
汎用ローダとか言うのとintelドライバを入れた記憶があります
それで2つ出ているのか、入れたのは以下のパッケージだったような

opencl-headers - OpenCL (Open Computing Language) header files
beignet - Intel OpenCL library
beignet-dev - Intel OpenCL library
ocl-icd-dev - Development files to build a ICD Loader
ocl-icd-libopencl1 - Generic OpenCL ICD Loader
clinfo - Query OpenCL system information
■ このスレッドは過去ログ倉庫に格納されています

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