なぜ私はCL_MEM_OBJECT_ALLOCATION_FAILUREを得るのですか?
-
18-09-2019 - |
質問
私は働くことに GPUのと仕事上のcl_memバッファを、割り当てています細かい特定のサイズが超過するまで。その場合、割り当て自体は成功しますが、実行またはコピーはしていません。私は、私は次のように割り当てるように、動作の高速化のために、デバイスのメモリを使用しますか:
buf = clCreateBuffer (cxGPUContext, CL_MEM_WRITE_ONLY, buf_size, NULL, &ciErrNum);
は、今私は理解していないどのようなサイズの上限です。私は(CL_DEVICE_MAX_MEM_ALLOC_SIZE
を参照)約16メガバイトをコピーしていますが、約128バイトを使用することができる必要があります。
なぜ、これらの数字はそんなに違うの?の
<時間>ここではいくつかの抜粋がoclDeviceQueryからです。
CL_PLATFORM_NAME: NVIDIA
CL_PLATFORM_VERSION: OpenCL 1.0
OpenCL SDK Version: 4788711
CL_DEVICE_NAME: GeForce 8600 GTS
CL_DEVICE_TYPE: CL_DEVICE_TYPE_GPU
CL_DEVICE_ADDRESS_BITS: 32
CL_DEVICE_MAX_MEM_ALLOC_SIZE: 128 MByte
CL_DEVICE_GLOBAL_MEM_SIZE: 255 MByte
CL_DEVICE_LOCAL_MEM_TYPE: local
CL_DEVICE_LOCAL_MEM_SIZE: 16 KByte
CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 64 KByte
解決
clCreateBufferは、実際にデバイス上のバッファを作成しません。作成時にドライバはバッファ(コンテキストが複数のデバイスを持つことができることリコール)を使用しますどのデバイスを知らないので、これは、理にかなっています。あなたが書き込みまたはときにパラメータとしてバッファを受け取り、カーネルの起動をエンキューする場合、バッファは、実際のデバイス上で作成されます。
16メガバイトの制限として、あなたは、最新のドライバ(195.xx)を使用していますか?もしそうなら、あなたはどちらかフォーラムは、直接をか。
他のヒント
(これはまた、グラフィックスカード、ディスプレイが使用しているメモリであれば、そして)あなたは、デバイス上で使用しているために起こる他のどんな記憶を忘れないでください。
(現在使用可能なメモリ、または最大の断片を取得し、またはsomesuchする方法はありますか?)
所属していません StackOverflow