OpenCLのオフラインコンパイルについてメモ。
コンパイル済みバイナリファイルを取り出す方法が分からない。
とりあえず
http://blogs.wankuma.com/episteme/archive/2010/08/16/192365.aspx
を参考にしてみる。
なんか少しやりたい事と違う……?
上記のサイトの参考URLを辿ると、
http://developer.amd.com/knowledge-base/
(以下、ちょっと↑のリンクから必要部分?をコピペ。)
Copy over the binary kernels from the OpenCL™ program into an accessible buffer along with their corresponding sizes in bytes.
Example:
size_t nDevices; size_t * binary_sizes; char ** binaries; /* figure out number of devices and the sizes of the binary for each device. */ err = clGetProgramInfo( program, CL_PROGRAM_NUM_DEVICES, sizeof(nDevices), &nDevices, NULL ); binary_sizes = (size_t *)malloc( sizeof(size_t)*nDevices ); err = clGetProgramInfo( program, CL_PROGRAM_BINARY_SIZES, sizeof(size_t)*nDevices, binary_sizes, NULL ); /* copy over all of the generated binaries. */ binaries = (char **)malloc( sizeof(char *)*nDevices ); for( i = 0; i < nDevices; i++ ) { if( binary_sizes[i] != 0 ) { binaries[i] = (char *)malloc( sizeof(char)*binary_sizes[i] ); } else { binaries[i] = NULL; } } err = clGetProgramInfo( program, CL_PROGRAM_BINARIEIS, sizeof(char *)*nDevices, binaries, NULL );
うーんと……。
これでいけるなら、要するに、
clGetProgramInfo()関数と
CL_PROGRAM_BINARY_SIZES
CL_PROGRAM_BINARIEIS
の組み合わせで行けるっと事???
CL_PROGRAM_NUM_DEVICES
は複数デバイス使う予定はないのでパス。
これはmallocで二次元配列?にしてるのか……?(動的確保で普段二次元にしないから自信ない。)
あとたぶん
CL_PROGRAM_BINARIEIS
は
CL_PROGRAM_BINARIES
の間違い。
まあ、取りあえず動かしてみようかな?
(ちゃんとした記事は……そのうち、そのうち書くから……)
0 件のコメント:
コメントを投稿