CUDAとの混在について | 入門者フォーラム | フォーラム

iSUS に投稿されている記事の内容や、IA プラットフォーム上でのソフトウェア開発に関するトピックを開発者同士でディスカッションできる場としてフォーラムを公開しています。

運営ルールはフォーラムの利用案内をご覧ください。
フォーラムの使い方はこちら

 
フォーラムに投稿するにはログインが必要ですログイン

CUDAとの混在について

メンバー投稿

5:47 PM
2014年4月25日


tetu

投稿数 8

1

初めて投稿します。
CUDAで書かれたコード含むソースを、Intel2013コンパイラでビルドしたところ、以下の様なエラーが発生し、
ビルドできませんでした。VS+CUDAの環境ではビルド&実行できます。

nvcc : fatal error : Compiler 'cl' in PATH different than the one specified with -ccbin

CUDAコンパイラとIntelコンパイラ間のやりとりの問題かと思いますが、解決の手段はあるでしょうか?
私の環境では、Intelコンパイラは、VS2010と統合させており、さらにCUDA6.0を導入しています。

・問題の確認解決手段を教えてください。
・組み合わせが未対応の場合は、どの組み合わせが対応可能なのかを教えて下さい。
 CUDAとIntelコンパイラの関係となります。CUDA+VSは、VS2012までが組み合わせ可能と認識しています。
・組み合わせが未対応の場合、もし対応計画など、公開できるものがありましたら、情報をお願いします。

以上、よろしくお願いします。

3:36 AM
2014年4月26日


iSUS編集部 – 菅原

投稿数 206

2

こんにちは、tetu さん

このコンパイラーメッセージは、NVCC がバックエンド・コンパイラーとして Visual C++ を起動しようとして、失敗しているようですね。メッセージにあるように、インテル・コンパイラーを教えてあげればよろしいのではないでしょうか?

「-compiler-bindir=icl」オプションを追加して、インテル・コンパイラー icl に変えて試してみてはいかがでしょう?

9:19 AM
2014年5月2日


tetu

投稿数 8

3

回答有難うございました。

上記内容を、単に追加指定すると「再定義されました」とエラーが発生します。
これは、Windows環境下ではCUDAが、VSのコンパイラをデフォルトとしているためです。

デフォルトを変更するため、CUDA用のカスタムビルドファイル(具体的には、[CUDA 6.0.props])を確認すると、「-ccbin」パラメータが確かにVSのコンパイラを指定しているので、書き換え、再ビルドすると上記エラーは消えました。
が!、次は「iclvars.batが見つかりません」というエラーが発生しました。

と、ここまでが実施内容の報告です。
更に追うことも可能だと思うのですが、ビルドが出来てもそれが正しい結果なのか(抜けている設定があったり等)、自信がありません。メーカー側で推奨の手順があれば、教えていただきたいと思います。メーカー側でCUDAとの混在は非推奨or動作未保証ということであれば、ここで一旦クローズしておきたいと考えております。

高速化の観点から、"Intel+CUDA"を、できれば使いたいです。

10:53 AM
2014年5月2日


iSUS編集部 – 菅原

投稿数 206

4

tetu 様

インテル・コンパイラーはオフィシャルには CUDA SDK との統合はサポートしていませんが、多くのエンジニアの方が利用されています。Windows環境では、Visual Studio へインテル・コンパイラーを統合する際に、NVCCが必要とする環境変数が自動的に書き換えられないので、今回 tetu 様が遭遇している問題が発生しているものと思われます。

インテル・コンパイラーのフォーラムでも同様の質問があるようです。
https://software.intel.com/en-us/forums/topic/392230

まず、コマンドラインで試してみてください、ということのようです。
逆に、NVCCのマニュアルにコンパイラーをVC以外にする場合、何を変更すればよいかという記述はないでしょうか?

明確に解決できずもうしわけないです。

11:11 AM
2014年5月2日


tetu

投稿数 8

5

回答ありがとうございます。

コマンドラインと、NVCCのマニュアルを確認してみます。うまくビルドできた時には、このフォーラムに、情報共有のためにも、書き込みをさせていただきます。

>明確に解決できずもうしわけないです。
こちらこそ、大変無理を言ってしまい恐縮です。
今後とも宜しくお願いします。

11:13 AM
2014年5月2日


iSUS編集部 – 菅原

投稿数 206

6

追記です。

すでにコマンドラインでご利用されているのであれば、インテル・コンパイラーのコマンド窓を開いて、そちらでCUDA_PATHを設定して実行するか、

VCのコマンドラインを利用されているのであれば、以下のバッチファイルを起動してみていただけますか。

C:\Windows\SysWOW64\cmd.exe /E:ON /V:ON /K ""C:\Program Files (x86)\Intel\Composer XE 2013 SP1\bin\ipsxe-comp-vars.bat" intel64 vs2010"

パスは、インストール環境で違うかもしれません。

11:14 AM
2014年5月13日


tetu

投稿数 8

7

菅原様

なんとかビルド&実行が出来たので報告します。
対象の*.cuファイルは、「c:\test\a.cu」とします。適当に読み替えてください。

①コマンドプロンプトを起動して、対象プロジェクトの作業ディレクトリに移動します。
②前コメント菅原様のバッチを実行します。
③a.cuをコンパイルするために、*1を実行します。
 →実使用時には、パスやファイル名、オプションを必要に応じて変更して下さい。
④すると、-oオプションで指定したディレクトリに指定したファイル名でオブジェクトファイルが出来ます。
 →ここでは、"x64\Release\a.obj"
⑤VS2010にて、「a.cu」をビルド対象から除外します。
 →ファイル名を右クリックして、プロパティから。
⑥作成したオブジェクトファイルを参照するように設定します。
 →プロジェクトのプロパティから、「リンカー-入力-追加の依存ファイル」に追加する。
⑦ビルドします。

一応、実行も問題なかったので、正しくビルドはできていると思います。
ただ、もう少し楽に出来ないかなと、研究中です。

*1
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" –use-local-env –cl-version 2010 –compiler-bindir=icl -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" –keep-dir x64\Release -maxrregcount=0 –machine 64 –compile -cudart static -D__INTEL_COMPILER=1400 -DWIN32 -DNDEBUG -D_WINDOWS -D_USRDLL -DREC_CUDA_DLL_EXPORTS -D_WINDLL -D_UNICODE -Xcompiler "/EHsc /W3 /nologo /O2 /Zi /MD" -o "x64\Release\a.obj" "c:\test\a.cu"

11:33 PM
2014年5月14日


iSUS編集部 – 菅原

投稿数 206

8

tetu 様

レポートありがとうございます。
うまくいって何よりです。

理想的には、VS 上で完結できるといいですが、それまでは makefile を作って nmake を使うほうがいいかもしれませんね。