2

すべて、OpenCL で 3D 画像をセットアップするための次のコード行があります。

const size_t NPOLYORDERS = 16;
const size_t NPOLYBINS = 1024;


cl::Image3D my3DImage;

cl::ImageFormat imFormat(CL_R, CL_FLOAT);

my3Dimage = cl::Image3D(clContext, CL_MEM_READ_ONLY, imFormat, NPOLYORDERS, NPOLYORDERS, NPOLYBINS);

Intel OpenCL CPU ドライバーを使用すると (CL_DEVICE_TYPE_CPU でコンテキストを作成することにより) コードは正常に実行されますが、TITAN black で nVidia ドライバーを使用すると (CL_DEVICE_TYPE_GPU でコンテキストを作成することにより) segfault で失敗します。

これらはすべて、Intel OpenCL ランタイム 14.1_x64_4.4.0.118 および 2014_4.4.0.134_x64 Intel OpenCL SDK を使用して、利用可能な最新の nVidia ドライバーを使用する 2.6.32-358 カーネルの RHEL6.4 上にあります。

他のすべてのコードは、nVidia デバイスで動作しているようです。カーネルをコンパイルしたり、コンテキストやバッファを作成したりできますが、この 1 つのコンストラクターは失敗しているようです。cl::Device::getInfo を使用して Image3D に許可されている最大サイズを確認したところ、HxWxD の制限が 4096x4096x4096 であることが報告されているため、16x16x1024 の画像サイズでは制限を十分に下回っています。

また、CL_R および CL_FLOAT タイプがサポートされている形式であることも確認しました。

最初はホスト メモリをコピーしようとして失敗したと思っていましたが、読み取ったイメージをエンキューする前に segfault が発生しています。

gdb のバック トレースから判断できた最良の結果は、問題が CL/cl.hpp の 4074 行目にあるように見えることです。

#0 0x000000000000 in ?? ()
#1 0x00000000004274fe in cl::Image3D::Image3D (this=0x7fffffffffdcb0, context=...,     
   flags=140737488345384, format=..., width=0, height=140737488345392, depth=1024, row_pitch=0,
   slice_pitch=0, host_ptr=0x0, err=0x0) at /usr/include/CL/cl.hpp:4074
#2 0x0000000000421986 in clCorrelationMatrixGenerator::initializeOpenCL (
   this=0x7fffffffffdfa8) at ./libs/matrix_generator/OpenCLMatrixGenerator.cc:194

ご覧のとおり、Image3D のコンストラクターの幅と高さの引数は不安定に見えますが、これらが実際の値であり、コンパイラーが原因で値が最適化されていないかどうかはわかりません。

したがって、私の質問は次のとおりです。

Intel CPU OpenCL ドライバーには当てはまらない、nVidia カードに関して間違っていることはありますか? Intel SDK と nVidia OpenCL ICD の間に既知のバイナリ非互換性はありますか?

4

1 に答える 1

2

一部のコメンターが指摘しているように、nVidia OpenCL 実装は、基礎となる cl::Image コンストラクターによって使用される clCreateImage をサポートしていません。これは、nVidia が OpenCL 1.1 までしかサポートしておらず、問題の関数が OpenCL 1.2 の一部であるためです。

ただし、コードを大幅にリファクタリングせずにこれを回避する方法があります。Intel SDK の cl.hpp は、C++ openCL 実装のラップされた機能のために OpenCL 1.1 の使用をサポートします。これは、CL_USE_DEPRECATED_OPENCL_1_1_APIS を定義することで有効にできます。

于 2014-09-02T15:08:53.323 に答える