NvidiaのSDKテンプレートでOpenCLとCUDAを混ぜようとしています
質問
私は、デバイス上のCUDAでメモリを割り当て、デバイスのメモリにそのポインターを取り、OpenCLで使用し、結果を返すという実験をセットアップするのに苦労してきました。これが可能かどうか見たいです。 CUDAプロジェクトを機能させるのに苦労したので、SDKでNvidiaのテンプレートプロジェクトを使用しました。 makefileで、common.mkのlibsセクションに-lopenclを追加しました。私がそうするとき、すべては問題ありませんが、追加するとき #include <CL/cl.h>
template.cuにopencl呼び出しを開始できるように、100のエラーを超えます。それらはすべてこれに似ていますが、最後に異なる関数名があります。
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/include/xmmintrin.h(334):エラー:識別子 "__builtin_ia32_cmpeqps"
私はその理由を理解するのに苦労しています。できれば助けてください。また、CUDAとOpenCL APIを呼び出すことができるプロジェクトをセットアップする簡単な方法がある場合は、私に知らせてください。
解決
私は本当にcudaと仕事をしていないので、答えがどれほど役に立つかわかりません。
私が理解していることから、あなたはcuda hostcodeからopenclを直接使用しようとしていることです。これは、標準GCCの代わりにnvidiaのコンパイラを使用して正しくコンパイルされたことを覚えている場合です。したがって、問題はおそらく、このコンパイラが言及されたヘッダーと連携するために必要なビルディンを実装していないことです。同様の問題をご覧ください。それは解決策です。http://forums.nvidia.com/lofiversion/index.php?t88573.html
OpenCL APIを必要とするすべてのものを、非Nvidiaコンパイラによってコンパイルされるように、別の(非CUDA)コンパイルユニットに入れる必要があるようです。
しかし、私はこの動作に頼ることはありません(OpenCLバッファーはメモリへのポインターだけでなく、いくつかのメタン形成を含むはずです)。そうするために。
OpenCLとCUDAの両方が拡張機能を備えているため、OpenGLバッファーからバッファーを作成できるため、本当にやりたい場合に試してみることができます。
しかし、なぜこれを行う必要があるのですか? IIRCはオープンソースであり、そのほとんど(OpenCLパーツ)がとにかくプラットフォームに依存するはずであるため、Appleの実装を短期間使用しないようにするものは何ですか。