2014年5月21日水曜日

GPGPUがやりたい。③

オンラインコンパイルは上手く行った。だがしかし――――



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 件のコメント:

コメントを投稿