8

Linux でコードを開発していますが、Windows 実行可能ファイルをコンパイルしたいと考えています。古い非 GPU バージョンは、Windows の mingw で問題なくコンパイルされるため、CUDA バージョンでも同じことができると期待していました。

戦略は、カーネル コードを Visual Studio で nvcc でコンパイルし、残りを mingw で gcc でコンパイルすることです。

これまでのところ、Visual Studio で (カーネルとカーネルの起動を含む) .cu ファイルを簡単にコンパイルできました。ただし、まだ mingw で c コードをコンパイルすることはできません。c コードには などの cuda api 呼び出しと などのcudaMalloccuda タイプが含まれてcudaEvent_tいるため、cuda.h と cuda_runtime.h を含める必要があります。ただし、gcc はこれらのヘッダーに対して警告とエラーを表示します。次に例を示します。

../include/host_defines.h:57:0: warning: "__cdecl" redefined

../include/vector_functions.h:127:14: error: 'short_4' has no member named 'x'

これらのヘッダーを含めて、コードの c 部分をコンパイルする方法について何かアイデアはありますか?

4

3 に答える 3

2

あなたが本当に必死なら、方法があるかもしれません。nvccは、実際には多数のコンパイラのフロントエンドにすぎません。g ++を頻繁に呼び出して、コメントを削除したり、デバイスとホストコードを分離したり、名前マングリングを処理したり、リンクを元に戻したりします(を使用--verbose)。

私の考えは次のとおりです。Linuxマシンでデバイスコードをfatbinにコンパイルしながら、mingwを使用してホストコードをコンパイルできるはずです(デバイスバイナリはホストマシンに依存しないと思います)。その後、コードの両方の部分をmingwでリンクするか、ドライバーAPIを使用してfatbinを動的にロードします。免責事項:テストしませんでした!

于 2011-05-04T20:24:46.153 に答える
1

私の知る限り、MSVCなしでCUDAを使用することは不可能です。したがって、nvccを機能させるにはMSVCが必要であり、mingwを使用してCPUコードをコンパイルし、すべてをリンクすることができます。

http://forums.nvidia.com/index.php?showtopic=30743によると

「mingwをサポートする現在の計画はありません。」

于 2011-05-04T19:40:40.397 に答える
1

サイクル レンダラーがこれをどのように処理するかを確認することをお勧めします。 https://developer.blender.org/diffusion/B/browse/master/extern/cuew/および https://developer.blender.org/拡散/B/browse/master/intern/cycles/device/device_cuda.cpp

これが自動的なトリックではないことはわかっていますが、始めるのに役立つかもしれません。

于 2015-02-06T11:44:32.510 に答える