2

これは非常に奇妙な状況です。なぜエラーが発生するのですか

CL_PLATFORM_NOT_FOUND_KHR

この関数を呼び出すとき:

clGetPlatformIDs(0, NULL, &platformCount);

以前は、このエラーはありませんでした。Intel と Nvidia からドライバーと SDK をインストールしました。何か提案はありますか?

4

3 に答える 3

2

あなたは幸運です。なんとなく……これを見るのは3年後。

免責事項:これが機能する理由はわかりません

マシン: x64 Windows 10。

グラフィックカード: Geforce GTX 960

ライブラリの読み込みに完全に失敗 しました: LoadLibraryA( "OpenCL64.dll" )

間違っています (ただし、読み込みます) : LoadLibraryA( "C:/Program Files/NVIDIA Corporation/OpenCL/OpenCL64.dll" )

間違っています (ただし、読み込みます) : LoadLibraryA( "C:/Program Files/NVIDIA Corporation/OpenCL/OpenCL.dll" )

正しい: LoadLibraryA( "OpenCL.dll" )

これが本当に厄介なことです。私の「間違った」答えはどちらも関数ポインターを取得できますが、clGetPlatformIDs を呼び出すと、戻りステータスは 0xFFFFFC17 ( CL_PLATFORM_NOT_FOUND_KHR ) になります。

次に、関数呼び出しの正確性を調べます。たぶん、呼び出し規約を見ることさえあるでしょう。おそらく、ヘッダー ファイルをチェックして、タイプミスがないことを確認します。それでも、元の問題はあなたが思っているよりもずっと前に発生したため、すべての間違った場所を探しています。

この問題のため、ファイル「OPEN_CL_SEARCH_PATHS.TXT」を読み取るプログラムコードをプログラムに組み込み、ソフトウェアのユーザーがプログラムがロードしようとする DLL ファイルを変更できるようにします。

私がここにいる間、OpenCL <==> OpenGL共有がゼロコピー共有ではなく、信じられないほど遅れているようにするドライバーにバグがあるように見えることも追加したいと思います。OpenCL の抽象化の方が問題に適していますが、フラクタル レンダリング エンジンを作成するために Vulkan を見つけなければなりません。

SDK や検証レイヤーを使用していないことに注意してください。実際、windows.h も使用していません。PEB ファイルをナビゲートして GetProcAddress と LoadLibrary のアドレスを取得するアセンブリ コードを作成しました。cl.h または cl_platform.h も使用していません。ドキュメントから必要な構造体を再構築します。また、関数シグネチャのプロトタイプも気にしていません。たとえば、「clGetPlatformIDs」を「F_03」型にキャストしてから呼び出します。

typedef void* ( F_03)( void , void*, void* );

于 2020-04-30T14:22:05.900 に答える