2

次の 2 つのファイルを検討してください。

  1. test.cpp : 未使用の関数が含まれていますf1()
  2. test.cu: 同じ未使用の関数が含まれていますf1()

これらのファイルは NVCC を使用してコンパイルされ、2 つの exe (1.EXE、2.EXE) を提供します。1 つは .cpp で、もう 1 つは .cu であることに注意してください。

プロファイリング中、1.exe は未使用の関数 f1 を表示しませんが、2.exe はプロファイリング中に未使用の関数 f1 を表示します。

なんで?.cu ファイルと .cpp ファイルで NVCC の動作が異なるのはなぜですか?

アップデート:

私の混乱は次のようになります: .cu ファイルの未使用の関数を自動的にインライン化できますか? 何らかのコンパイラ オプションを使用している可能性があります。

4

2 に答える 2

1

NVCC は .cu ファイル自体をコンパイルし、.c および .cpp ファイルをシステムの CC および CXX に渡します。2 つの異なるコンパイラがわずかな違いを伴うコードを生成する可能性があることを認識してください。

于 2012-09-14T12:51:05.080 に答える
1

まず、関数はcuda関数ですか、それともcpp関数ですか? 使用しているOSは何ですか?

私はいくつかのことを試してみましたが、これを見つけました。

cpp 関数の場合、nvcc (.cu) と gcc (.cpp) の両方がコンパイルされ、コードが正常に実行されます。また、Ubuntu を使用している場合は、機能が使用されていないことが示されます。(.cu と .cpp の両方)。VS10 を使用している場合、警告は表示されません。

cuda 関数であれば、nvcc は正常に動作します。ただし、.cpp ファイルは VS10 と Ubuntu の両方でコンパイルされません。ライブラリを含めても。

機能とOSをより具体的にする必要があります。

于 2012-09-14T16:46:44.053 に答える