2

多くの CUDA アクセラレーション機能を備えた Windows で C++ DLL を開発しました。現在、必須ではないため、DllMain 関数を作成していません。

DllMain で呼び出すことができる関数には多くの制限があることを知っています。

デフォルトのコンテキストを初期化するためだけに DllMain で CUDA ランタイム関数を呼び出して、後続の CUDA 呼び出しが高速になることを知りたいだけですか?

開発には Visual Studio 2008、CUDA 5.0、および Windows 8 を使用しています。

4

1 に答える 1

3

DLLMain のドキュメントを読んで、私はそれに反対することをお勧めします。ドキュメントから:

警告 DLL エントリ ポイントで実行できる操作には重大な制限があります。より複雑な初期化を提供するには、DLL の初期化ルーチンを作成します。DLL 内の他のルーチンを呼び出す前に、アプリケーションが初期化ルーチンを呼び出すように要求できます。

すなわち:

Kernel32.dll 以外の DLL を必要とする関数を呼び出すと、診断が困難な問題が発生する場合があります。

CUDA ランタイム API には cudart.dll が必要なので、これはあなたの質問に当てはまります。

したがって、CUDA の初期化を行うライブラリの初期化関数を作成し、アプリケーションの起動時に明示的に呼び出す必要があります。

于 2012-09-10T03:14:55.197 に答える