OpenCLプログラミング#1

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

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

公式ページにはAPIのヘッダファイルが公開されており、
まだ実際に動かす事はできないもののプログラミングすることは可能となっています。
ということで、公開に先んじてプログラミングを始めてしまいましょう。
647デフォルトの名無しさん
垢版 |
2012/09/08(土) 00:09:32.81
むしろOpenManko実装してくれ
2012/09/08(土) 01:20:37.10
プロプライエタリですので
649デフォルトの名無しさん
垢版 |
2012/09/08(土) 18:07:21.58
OpenMankoはよ
2012/09/08(土) 22:36:50.84
互換フリー0実装のKuperで我慢しとけ。
2012/09/09(日) 23:25:50.57
Mankoは商用製品で我慢しろよ
2012/09/20(木) 15:05:43.24
昔の日本はOpenだろ
653デフォルトの名無しさん
垢版 |
2012/09/27(木) 04:12:39.50
AMD Releases CodeXL Public Beta | SemiAccurate
http://semiaccurate.com/2012/09/25/amd-releases-codexl-public-beta/
2012/10/05(金) 01:09:53.66
http://pc.watch.impress.co.jp/img/pcw/docs/563/431/g02.png
2012/10/05(金) 01:15:43.73
http://engawa.2ch.net/test/read.cgi/poverty/1349151623/
2012/10/05(金) 01:16:52.94
http://prohardver.hu/dl/cnt/2012-10/90356/results/handbrake.png
2012/10/28(日) 20:13:53.12
意外と
658デフォルトの名無しさん
垢版 |
2012/11/30(金) 23:33:09.24
Khronos Releases Significant OpenCL 1.2 Specification Update | techPowerUp
http://www.techpowerup.com/176413/Khronos-Releases-Significant-OpenCL-1.2-Specification-Update.html
2012/12/07(金) 11:27:13.90
OpenCLでパスワード解析
http://securityledger.com/new-25-gpu-monster-devours-passwords-in-seconds/
2012/12/20(木) 01:25:19.05
>>615
vetor extension記法でゴリゴリかく。
若しくは、-O3 -ftree-vectorize
但し、後者はまだまだ未熟なのは確かだね。
2012/12/21(金) 09:03:58.99
最近OpenCLを本格的に始めたんだが、
OpenCLのいいところは、コンパイラを選ばない、
カーネル以外はC++で書けるといところかな。

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

LLVMで最適化レベルって設定ができるのかな?
2012/12/22(土) 01:07:39.90
>>661
アーキテクチャが何にでも対応できるが、
アーキテクチャによって最適なWARP(に相当するもの)の数が違ったり、
コアレセンスアクセスできる条件が違ったり、キャッシュの有無だったりで
結局はアーキテクチャ依存の最適化をしないと速くならないよ。
2012/12/22(土) 02:28:20.85
場合によってはコンパイラのバージョン依存も。
2012/12/24(月) 05:32:34.90
やっとCL使うネタが準備できた
楽しみだー
2013/01/13(日) 19:49:11.31
Trinity APUで使ったらCPU使用率が50%(2コアなので1コアがフル稼働状態)になったが、こんなもんなの?
GPUで計算してるはずなんだが。
2013/01/14(月) 05:46:41.04
ジョブの内容と数によるんでは。
2013/01/14(月) 21:42:22.31
CUDA見たいに結果出るまでぽーりんぐしてんじゃないの?
2013/01/14(月) 22:02:09.36
自分のマシンのFLOPS計るのはどのベンチがお勧め?
2013/01/15(火) 00:36:48.35
クロックとシェーダの数を掛ければ。
2013/01/15(火) 12:44:28.36
ちゃんとGPUで計算されてないだけじゃね
afterburnerかなんかでGPU側の使用率も見てる?
671665
垢版 |
2013/01/20(日) 11:45:47.76
Catalystのバージョン上げたらCPU使用率下がりました
2013/01/21(月) 06:12:45.45
AMDのOpenCL SDKはCPU(SSE)デバイスもサポートしてるから
そっちで動いてたってことかな
2013/01/22(火) 00:13:17.77
デバイス取得時にGPUを指定すればそんな目に合うはずね〜が
2013/01/22(火) 23:13:25.92
デバイスにCPU使ってたらCPU使用率100%になるんじゃないの
2013/01/23(水) 00:21:18.43
>>674
特に設定しないとシングルコアだからならない
2013/01/23(水) 01:32:16.04
CPU版はdevice fissionしないと使えるコア全部使わなかったっけ?
2013/01/26(土) 18:02:42.38
いくつか本読んで基礎的なことは
わかったんだけど、openclでmpegのエンコーダー
作ってみたいから何か参考になる情報ないかな
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
2013/01/26(土) 22:38:20.74
>>677
MPEGってどれよ?
MPEG4(H.264)のことならx264がSSE、AVXアセンブリ含むソースコードが読めるからオススメ
2013/01/30(水) 22:41:00.14
試しに↓使ってみたんだがローカルメモリ使ったら速度が3割落ちた。
www.aocplan.com/gpgpu/gpgpu-benchmark
2013/02/05(火) 22:18:38.26
OpenCLってHyper-Qみたいな機能ってあるでしょうか?
2013/02/05(火) 22:28:21.47
>>678
アーキ毎にカーネルを書きなおさないと性能でないよ。
2013/02/06(水) 21:46:06.32
各アーキテクチャごとの最適化資料ってある?
2013/02/07(木) 05:31:00.88
AMDだとこれが詳しい。NVIDIAのだったらCUDAのマニュアルを読めばいい。
http://developer.amd.com/download/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf
2013/02/11(月) 23:11:22.51
標準のC++に替わり今後はOpenCLが標準に確定したな
OpenCLでパフォーマンスが激向上するから当然か
2013/02/12(火) 06:11:15.51
寝言は寝て言え
2013/02/17(日) 21:21:57.05
>>684
ありがとう。VLIW4だとスレッド数1/4にして、1スレッドで4つずつ処理するようにしたら倍速になった。
2013/02/18(月) 04:23:25.11
R600のISA解説したpdfもどっかにあって、あれ読むとKernel Analyzerの右側の命令が読めるようになって捗るぞ。
689デフォルトの名無しさん
垢版 |
2013/05/09(木) 04:25:55.54
Intel Releases SDK with OpenCL 1.2 Support for Intel Xeon Phi Coprocessors | techPowerUp
http://www.techpowerup.com/183718/intel-releases-sdk-with-opencl-1-2-support-for-intel-xeon-phi-coprocessors.html
2013/05/10(金) 23:28:13.87
CUDAが動かない古いNvidiaのビデオカードでも
OpenCLなら動いたりするものなのでしょうか?
2013/05/11(土) 17:38:28.19
確かnvidiaがOpenCLサポートしているのは、
チップがGeforce8以降かつ、ドライバの対応も必要だったと思う。
でもgeforce8以降はほとんどCUDA(とPhysXが)乗ってたはず。
それ以前はサポートされていないから動かないんじゃないかな(機材とドライバがないから検証できん)
2013/05/11(土) 23:50:31.95
CUDAにせよ、OpenCLにせよ古いマシンでやろうとする奴はなんなんだ?
古いGPUじゃ大して効果がないし、アーキテクチャがどんどん変わって
いるから使えないものが多いのに。
最新のアーキテクチャでも1万円も出せばそれなりのものが買えるのになあ。
2013/05/12(日) 10:11:53.81
研究目的なら最新ので良いけど、実用だと4年前に導入した
数百台の計算機で高速化したい、とかもあるからな。
2013/05/13(月) 17:15:31.08
GeForce8以前って、どんだけ古いカード使っているんだよw
いろんな意味で、無理無理。
2013/05/15(水) 13:05:11.17
とりあえずGPGPU普及させたいならGPU各社ともミドルレンジ以下でFP64対応切るのやめてくんないかな
性能出るかどうかより使えたり使えなかったりってのが一番困る
696デフォルトの名無しさん
垢版 |
2013/06/05(水) 08:17:39.89
OpenCLのチューニングって、まずどのあたりから手を付ければいいかな?
ワークグループ分割数で結構変わるという話は聞くけど、やっぱり
おまかせより明示的に指定した方がいいんだろうか?
2013/06/05(水) 09:35:33.06
おまかせとかやる気無さすぎだろう…
色々変えてみて速さを測れ。
2013/06/05(水) 20:55:53.52
ハードに合わせて適当な値を選んでくれると思ってたんで自分で下手な値を設定するより
いいかと思ってたんだけど、たしかに明示的に指定した方がよくなるケースが多いですね。
目安としてはCL_DEVICE_MAX_WORK_GROUP_SIZEに合わせておけばいいんだろうか?
それ以外、これは押さえておけ、というようなチューニングポイントってありますか?
699デフォルトの名無しさん
垢版 |
2013/06/06(木) 22:37:43.71
アドレスモードが便利そうなのでイメージオブジェクトを使ってみようと思ったんだけど、
これって4ch固定なんですかね?できれば1chで使いたいんだけど。
700デフォルトの名無しさん
垢版 |
2013/06/17(月) 09:44:11.96!
>>698
> 目安としてはCL_DEVICE_MAX_WORK_GROUP_SIZEに合わせておけばいいんだろうか?

これだとスピードでないよ。
Radeonだったら>>684の最適化マニュアルを、NVIDIAだったらCUDAの
説明書を読め。
2013/06/18(火) 23:31:21.64
つか、勉強目的でエミュレータみたいなのが欲しい
遅くていいから
2013/06/24(月) 22:41:41.16
最近のハードなら何でも出来るだろ。
新しいの買えよ。それぐらい自己投資だ。
2013/07/23(火) NY:AN:NY.AN
ついに 2.0 で Dynamic Parallelism きちゃったじゃねぇか!
2013/07/23(火) NY:AN:NY.AN
nVidiaがいまだに1.1なのはどうにかならんのかな。
2013/07/24(水) NY:AN:NY.AN
CUDAがあるから、あまり積極的にやりたくないんじゃね?
2013/08/01(木) NY:AN:NY.AN
今AMDの環境で開発しているんだけど、NVIDIAの環境でもビルドできるよう
1.1の機能に限定することってできないんですかね?
CL_USE_DEPRECATED_OPENCL_1_1_APISみたいな。
707デフォルトの名無しさん
垢版 |
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を本来どうやって求めるのでしょうか?
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
2013/08/18(日) NY:AN:NY.AN
回答ありがとうございます。
ただ、clCreateContextはclGetGLContextInfoKHRでデバイスを得た後に呼ぶことに
なると思うのですが?
手順は以下で間違ってますかね?

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

いずれにしても、どのデバイスを使っているかがわからないとプラットフォームも
決まらないと思うのですが。
2013/10/24(木) 01:02:02.86
vloadn ってあるけど、直接ポインタを p[i] するのと速度違ったりするのか?
2013/10/24(木) 21:28:52.21
vloadはアラインメントの制約がゆるい。要素でそろってればOK。
速度は実装によるだろうけど同じか制約がゆるいvloadのほうが少し遅い。
2013/10/24(木) 22:48:45.60
なるほど。

アラインメントの制約のせいで、ちょっと冗長になってたあのコードとかを小さく綺麗に書き直せるかも。
これは良いことを知った。サンクス。
2013/11/22(金) 19:43:38.99
Khronos Groupが「OpenCL 2.0」を完成、コンピュータビジョン向け「OpenVX 1.0」の暫定仕様も発表
http://sourceforge.jp/magazine/13/11/22/095200
https://www.khronos.org/news/press/khronos-releases-opencl-2.0
2013/11/22(金) 19:46:35.85
タラタラ完成してんじゃねーよ
715デフォルトの名無しさん
垢版 |
2013/11/22(金) 20:47:48.41
OpenVXってのが気になる
2013/11/25(月) 08:28:25.60
JOCLも、早く OpenCL 2.0 に対応しろよ
2013/11/30(土) 20:57:20.27
OpenCLって初期化とかやたら面倒なんですが、
OpenGL に対する glfw や GLUT みたいなライブラリはないんですか?

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

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

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


ただ、私はたとえば OpenGL 入門者に対して、同じ理由
つまり「初期化なんて一度書けば使い回しだから」という理由で
ウィンドウ作らせたり、レンダリングコンテキストを作らせたりはしたくないです。
使い回し
幸い OpenGL にはユーティリティライブラリがあり、入門者にはありがたいです。
なので OpenCL にも入門者用にきっと何かあるだろうと思っていました。
2013/11/30(土) 22:34:05.19
OpenGL ほど広く使われていたらあっただろうね。
2013/11/30(土) 22:53:53.35
NVIDIAやAMDのサンプルコードには簡単なユーティリティが入っているよ。
OpenGLみたいに糞面倒なわけじゃないから、わざわざGLUTみたいなものを
作ろうと思った人はいなかったんだろう。
2013/12/01(日) 02:54:53.01
そんなに面倒か?
必要十分しかないと思うんだが
2013/12/01(日) 03:12:45.40
CUDAの簡単さと比較すると面倒
2013/12/01(日) 03:18:23.16
あほか
2013/12/01(日) 03:47:08.42
c++binding使えば簡単じゃないか。
まあ、プラットフォーム選択する時点で
cudaには必要ない工程だが
2013/12/01(日) 07:35:28.28
>>719
intelが最近OpenCLライブラリやGPU向けライブラリのプレビュー版を発表してる
ttp://software.intel.com/en-us/intel-ipp-preview
IPPはこれまで最適化済みCPUライブラリだったけど、それをGPUにも拡張しようとしてる模様
2013/12/03(火) 07:13:40.30
>>726
ありがとうございます。

調べてみます。
2013/12/03(火) 13:47:40.89
amd apu+linuxでaparapi経由で使ってみたんですが面白そうですね。
はるか昔に、javaで配列関係はどうしようかjniにでもしようかと悩んでたんですがこれでやっと悩みは解決できました。
java9.stream.parallelがopenclに対応してaparapiも不要になる(jvmと結合する)ようなので、openclを使えばjavaのままで配列のソリューションが得られるようです。
まだ触って4日ぐらいですが勉強がてらに、行列などの配列依存のライブラリを書き直してみようと思います。
2013/12/30(月) 11:40:26.21
kaveriが販売される模様
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
このぐらいに書ける。
使ったことはないので便利かどうかは知らない。
2014/02/24(月) 15:19:36.59
Core iとグラボつんでグラボで画面表示しててもIntelHDでOpenCLの計算をさせることはできるのでしょうか
2014/02/24(月) 16:36:29.14
遅くはなろうが計算は出来るでしょう
2014/02/24(月) 17:04:11.19
あれ?遅くなる要因あるのでしょうか
使ってないIntelHDも使いたいというイメージだったのですが
2014/02/24(月) 18:04:09.93
CPUでやったほうが速いってだけ
2014/02/24(月) 18:14:29.38
CPUスレッドとは排他でしか使えないと言うことですか?
2014/02/24(月) 18:17:43.70
732だけど、単純にIntelHDをグラボと取り違えただけだよ
2014/02/24(月) 18:34:07.15
了解です
2014/03/23(日) 07:57:03.89ID:2/mKAdk3
Ubuntu用のSDKはDebian GNU/Linuxで使えますか?
2014/03/24(月) 20:46:02.33ID:+qxUA/lQ
>>733
俺も今日勉強始めたばっかだから実態よく分からんが、
規格ミニマムだとGPUで実行するバイナリを、
プログラム実行時に動的にコンパイルしてマウントする場合があるらしく、
それだとコンパイルのオーバーヘッドで遅くなりそう。

実行時にコンパイルせず事前にコンパイルしたバイナリを使うこともできるそうで
NVidia, AMDあたりはLLVMで動いてるからまず大丈夫だろうけど、HD Graphicsはどうなるんだろうか?
2014/04/04(金) 10:41:37.63ID:YtPgho8U
CentOSにAMDのドライバを入れることに成功したけど、Debianには入らなかった。
2014/04/23(水) 21:27:46.80ID:Xxk46iNW
質問スレってないかな?
Debian testing 64bit環境でbeignet 0.80をインストールしてclinfoしたら
GPU一個しか積んでないはずなのにPlatformが2個検出されるのですよ
これって正常なの?
2014/04/23(水) 21:53:33.92ID:e3QPM/2Y
GPU持ってるCPUを使っているとか?
743741
垢版 |
2014/04/23(水) 22:38:07.40ID:Xxk46iNW
はい、haswell(i7-4771)を使っています。
その他のグラフィックボードは積んでいません
2014/04/23(水) 23:16:57.80ID:RpkkzUGi
Platformの数とデバイスの数はイコールじゃない。
デバイスはCPUとGPUの2個見つかるはず。ちなみに内蔵かどうかは関係ない。
気になるならclGetPlatformIDs/clGetPlatformInfoで見てみりゃいい。
745741
垢版 |
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
2014/04/23(水) 23:55:44.68ID:TUgA9FPl
Platform数はドライバの数
汎用のドライバとIntelチューンのドライバの2つが入っていたら2つのプラットフォームが出てくる
少なくともWindowsだとそんな感じ

あと745の結果でPlatformIDが同じなのはおかしい
多分745のプログラムはバグってる
747741
垢版 |
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
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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