一部の機能にcudaでの処理を使用したアプリケーションをvc++/NVCCで開発しているのですが、
cuda GPU非搭載PCでこのアプリケーションを実行すると、cuda対応ドライバーがインストールされていないため、
DLLエラーが出て起動させることができません。
cuda用とそれ以外用の実行ファイルのビルドを分けるのではなく、同一実行ファイルで、cuda搭載PCではフル機能使え、
cuda非搭載PCの場合cudaでの処理をCPUでの処理に切り替えて使用することができるようにしたいのですが、
どのようにすればよいのでしょうか。
アプリケーションを実行させれば、findCudaDevice処理を通じてcudaデバイスの有り無しを判別し、
GPUとCPUでの処理の切り替えをすることはできるのですが、そもそもアプリケーションを実行させることができないので困っています。
現在cudaのライブラリは、cudart_static.libをインクルードして使用しています。
そのアプリケーション(.exe)が必要とするDLLを全部、アプリケーションと一緒に別PCに持っていく
同じフォルダに置けば見つかるので起動できる
必要なDLLの調べ方
https://amachang.hatenablog.com/entry/20090713/1247455262
DLLが必要なDLLも要るので、ビルド時に指定したもの以外にもあるかも
https://tech.mlexp.net/2011/01/loadlibrary/
Windowsに入ってるDLLには、32bit用と64bit用のDLLのファイル名が同じで、置いてるフォルダパスが違う、というものがあるので、別PCで不足してるDLLを探す際に気を付けてください
DLLのファイル名で検索して見つかったのを安易に持っていっても、32bit用のDLLだと役に立たない
DLLのbitの調べ方
https://qiita.com/bearbutler/items/b53e3d1fadb4ff4fd7c6
なお、CUDAのDLLは64bit用しかありません
geforceのドライバー関連dllや、cudaのdllは、単体での再配布は禁止されていると思うので、その方法はとれません。
世の中のアプリケーションを見ると、自分のやりたいような、デバイスの有り無しで、機能内容が変わるものが結構あるので、どうやるのかと思っているのですが。
それでしたら、動かしたいPCにCUDAをインストールしたらどうでしょうか??
ドライバは入れられませんが、CUDA自体はインストールできるはず (以前入れたことあります)
CUDAをインストールしてpathの設定をしたらDLL見つかるので、起動できるでしょう
CUDA以外にVisual Studioのランタイムも要りますけど、それもMicrosoftのWebページからダウンロードして入れる
https://qiita.com/tera1707/items/727e7ad4dc9f3205c137
の「動的にDLLを呼ぶ」のやり方にしたら、必要な時までDLLが読まれないので、起動時に無くてもエラー出ないかも