2016-09-14 10 views
0

Nvidia実装でwrite_imagef()関数を使用してプログラムをコンパイルできません。 私はビルドエラーで失敗し、次のプログラムをコンパイルしようとしている 、PyopenCL 2016.1python 2.7にドライバのバージョン367.35を使用してTesla K10.G2.8GBでの作業:OpenCLでNvidiaデバイスのテクスチャメモリに書き込み

ホスト・コード:

import pyopencl as cl 

platform = cl.get_platforms()[0] 
devs = platform.get_devices() 
device1 = devs[1] 
mf = cl.mem_flags 
ctx = cl.Context([device1]) 
Queue1 = cl.CommandQueue(ctx) 

f = open('Minimal.cl', 'r') 
fstr = "".join(f.readlines()) 
prg = cl.Program(ctx, fstr).build() 

カーネル(最小.cl)

__kernel void test(image2d_t d_output){ 
    write_imagef(d_output,(int2)(1,1),(float4)(1.0f,1.0f,1.0f,1.0f)); 
} 

私が手にエラーがある:

pyopencl.cffi_cl.RuntimeError: clbuildprogram failed: BUILD_PROGRAM_FAILURE - 

デバイスにイメージがサポートされていて、指定されたフォーマットの テクスチャバッファへの読み書きがサポートされているかどうかを確認しました。私たちのNvidiaデバイスのいずれにも拡張子cl_khr_3d_image_writesはサポートされていないので、 の3Dケースでは同じケースは機能しませんが、2Dケースの問題はわかりません。

+0

問題は、このデバイスに限定されるものではないようです。私たちが使っているすべてのNvidia実装で発生します。 – Dschoni

+1

プログラムのビルドに失敗した場合は、OpenCL API clGetProgramBuildInfoをCL_PROGRAM_BUILD_LOGで呼び出すことに相当するPyopenCLを呼び出すと、何が間違っていたかを人間が判読できるようになります。 – Dithermaster

答えて

2

画像引数はので、あなたのカーネルの定義は次のようになり、read_onlyまたはwrite_only(またはOpenCLの2.xのとread_write)のいずれかのように宣言する必要があります。

__kernel void test(write_only image2d_t d_output){ 
    write_imagef(d_output,(int2)(1,1),(float4)(1.0f,1.0f,1.0f,1.0f)); 
} 
+0

私はそれを自分で見つけました。私は、これが標準的なドキュメントにどこにも言及されていないのはなぜかと思います。 – Dschoni

関連する問題