1

デバイスのCUDAでメモリを割り当て、そのポインタをデバイスのメモリに取得し、OpenCLで使用して、結果を返すという実験を設定するのに苦労していました。これが可能かどうか見たいです。CUDAプロジェクトを機能させるのに苦労したので、SDKでNvidiaのテンプレートプロジェクトを使用しました。makefileで、common.mkのlibsセクションに-lOpenCLを追加しました。#include <CL/cl.h>それを行うとすべて問題ありませんが、 openCL呼び出しを開始できるようにtemplate.cuに追加すると、100を超えるエラーが発生します。それらはすべてこれに似ていますが、最後に異なる関数名が付いています。

/usr/lib/gcc/x86_64-linux-gnu/4.4.1/include/xmmintrin.h(334):エラー:識別子「__builtin_ia32_cmpeqps」が未定義です

理由がわからない。できれば助けてください。また、CUDAおよびOpenCL APIを呼び出すことができるプロジェクトを設定する簡単な方法がある場合は、私に知らせてください。

4

1 に答える 1

1

私はcudaを実際に扱ったことがないので、私の答えがどれほど役立つかわかりません。

私が理解していることから、あなたはcudaホストコードから直接openclを使用しようとしています。これは、標準のgccの代わりにnvidiaのコンパイラを使用して正しくコンパイルしたことを覚えている場合です。したがって、問題はおそらく、このコンパイラが前述のヘッダーを操作するために必要なビルトインを実装していないことです。同様の問題とその解決策については、こちらをご覧ください: http://forums.nvidia.com/lofiversion/index.php?t88573.html

非 nvidia コンパイラによってコンパイルされるように、opencl API を必要とするすべてのものを別の (非 cuda) コンパイル ユニットに配置する必要があるようです。

ただし、これが機能することは期待できません (opencl バッファーはメモリへの単なるポインターではなく、いくつかのメタ情報を含む必要があるため)、単に機能する本当の理由がなく、機能する場合でも継続するという保証がないためです。そうするために。

opencl と cuda の両方に、opengl バッファーからバッファーを作成できる拡張機能があるため、相互運用に opengl を使用することが本当に必要な場合に試すことができます。

しかし、なぜこれを行う必要があるのですか?IIRCはオープンソースであり、そのほとんど(openclパーツ)はとにかくプラットフォームに依存しないはずなので、Appleの実装を短期的に使用できない理由は何ですか。

于 2010-10-07T00:10:52.057 に答える