問題タブ [nvcc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2823 参照

c++ - CUDA nvcc でインテル® C++ コンパイラーを使用するには?

Microsoft Visual Studio 2008 で NVIDIA CUDA 4.1 を使用しています。Intel Parallel Studio XE 2011 もインストールしています。

デフォルトでは、NVIDIA の C コンパイラnvcc.exeは Microsoft の C コンパイラを使用cl.exeして C コードをコンパイルします。

nvccIntel の C Compilerを使用するように設定を変更するにはどうすればよいですかicl.exe

0 投票する
1 に答える
1313 参照

cuda - cuda コード内でのループ

float の配列を更新する CUDA コードをいくつか実行しました。「 CUDA コードをコンパイルして C++ プロジェクトにリンクするにはどうすればよいですか?」で説明されているようなラッパー関数があります。この質問。

CUDA 関数内で、このような for ループを作成します...

ここでの問題は、X が 100 の値に等しい場合、すべて正常に動作しますが、X が 1000000 に等しい場合、ベクトルが更新されないことです (for ループ内のコードが実行されないかのように)。

ラッパー関数内で、for ループで CUDA 関数を呼び出しても、問題なく動作します (ただし、CPU で同じプロセスをすべて実行した場合よりも何らかの理由で大幅に遅くなります)。このように...

ラッパー関数で100万回ループできるのに、単にCUDAの「更新」関数を1回呼び出してから、その関数内で100万回のforループを開始できない理由を知っている人はいますか?

0 投票する
2 に答える
16089 参照

cuda - / usr / bin / ld:-lcudartが見つかりません

CUDAプログラムをコンパイルしようとすると、次のメッセージが表示されます。

/ usr / bin / ld:-lcudartが見つかりません

これまでこの種のエラーが発生したことはありません。PATHに問題はありますか?

コンパイルコマンドは次のとおりです。

gfortran -g -O2 -ffree-line-length-none -I ../ shared / -o ../../bin/xspecfem3D ../../obj/spec/program_specfem3D.o ../../ obj / spec / specfem3D_par.o ../../obj/spec/PML_init.o ../../obj/spec/compute_boundary_kernel.o../../obj/spec/compute_kernels.o../。 ./obj/spec/compute_forces_acoustic.o ../../obj/spec/compute_forces_acoustic_pot.o ../../obj/spec/compute_forces_acoustic_PML.o ../../obj/spec/compute_forces_elastic.o.. /../obj/spec/compute_forces_elastic_Dev.o ../../obj/spec/compute_forces_elastic_noDev.o ../../obj/spec/compute_forces_elastic_Dev_openmp.o../../obj/spec/compute_add_sources_acoustic。 ../../obj/spec/compute_add_sources_elastic.o ../../obj/spec/compute_couple_acoustic_el.o ../../obj/spec/compute_couple_elastic_ac.o ../../obj/spec/compute_stacey_acoustic .o ../../obj/spec/compute_stacey_elastic.o../.。/obj/spec/compute_gradient.o ../../obj/spec/compute_interpolated_dva.o ../../obj/spec/initialize_simulation.o ../../obj/spec/read_mesh_databases.o ../ ../obj/spec/setup_GLL_points.o ../../obj/spec/write_movie_output.o ../../obj/spec/create_color_image.o../../obj/spec/write_seismograms.o。 ./../obj/spec/write_output_ASCII.o ../../obj/spec/detect_mesh_surfaces.o ../../obj/spec/setup_movie_meshes.o ../../obj/spec/read_topography_bathymetry .. o ../../obj/spec/setup_sources_receivers.o ../../obj/spec/prepare_timerun.o ../../obj/spec/iterate_time.o ../../obj/spec/ finalize_simulation.o ../../obj/spec/save_adjoint_kernels.o ../../obj/spec/specfem3D.o ../../obj/spec/assemble_MPI_vector.o ../../obj/ spec / make_gravity.o ../../obj/spec/noise_tomography.o ../../lib/libspecfem.a ../../obj/spec/check_fields_cuda.cuda.o ../ ../obj/spec/compute_add_sources_acoustic_cuda.cuda.o ../../obj/spec/compute_add_sources_elastic_cuda.cuda.o ../../obj/spec/compute_couple_cuda.cuda.o ../../obj/spec/ Compute_forces_acoustic_cuda.cuda.o ../../obj/spec/compute_forces_elastic_cuda.cuda.o ../../obj/spec/compute_kernels_cuda.cuda.o ../../obj/spec/compute_stacey_acoustic_cuda.cuda.o .. ../../obj/spec/compute_stacey_elastic_cuda.cuda.o ../../obj/spec/it_update_displacement_cuda.cuda.o ../../obj/spec/noise_tomography_cuda.cuda.o ../ .. /obj/spec/prepare_mesh_constants_cuda.cuda.o ../../obj/spec/transfer_fields_cuda.cuda.o ../../obj/spec/write_seismograms_cuda.cuda.o ../../obj/spec/ save_and_compare_cpu_vs_gpu.cudacc.o ../../obj/spec/serial.o -lcuda -lcudart -lcublaso ../../obj/spec/compute_couple_cuda.cuda.o ../../obj/spec/compute_forces_acoustic_cuda.cuda.o../../obj/spec/compute_forces_elastic_cuda.cuda.o../。 ./obj/spec/compute_kernels_cuda.cuda.o ../../obj/spec/compute_stacey_acoustic_cuda.cuda.o ../../obj/spec/compute_stacey_elastic_cuda.cuda.o ../../obj/spec /it_update_displacement_cuda.cuda.o ../../obj/spec/noise_tomography_cuda.cuda.o ../../obj/spec/prepare_mesh_constants_cuda.cuda.o../../obj/spec/transfer_fields_cuda.cuda。 o ../../obj/spec/write_seismograms_cuda.cuda.o ../../obj/spec/save_and_compare_cpu_vs_gpu.cudacc.o ../../obj/spec/serial.o -lcuda -lcudart -lcublaso ../../obj/spec/compute_couple_cuda.cuda.o ../../obj/spec/compute_forces_acoustic_cuda.cuda.o../../obj/spec/compute_forces_elastic_cuda.cuda.o../。 ./obj/spec/compute_kernels_cuda.cuda.o ../../obj/spec/compute_stacey_acoustic_cuda.cuda.o ../../obj/spec/compute_stacey_elastic_cuda.cuda.o ../../obj/spec /it_update_displacement_cuda.cuda.o ../../obj/spec/noise_tomography_cuda.cuda.o ../../obj/spec/prepare_mesh_constants_cuda.cuda.o../../obj/spec/transfer_fields_cuda.cuda。 o ../../obj/spec/write_seismograms_cuda.cuda.o ../../obj/spec/save_and_compare_cpu_vs_gpu.cudacc.o ../../obj/spec/serial.o -lcuda -lcudart -lcublas/obj/spec/compute_stacey_acoustic_cuda.cuda.o ../../obj/spec/compute_stacey_elastic_cuda.cuda.o ../../obj/spec/it_update_displacement_cuda.cuda.o ../../obj/spec/ noise_tomography_cuda.cuda.o ../../obj/spec/prepare_mesh_constants_cuda.cuda.o ../../obj/spec/transfer_fields_cuda.cuda.o ../../obj/spec/write_seismograms_cuda.cuda.o ../../obj/spec/save_and_compare_cpu_vs_gpu.cudacc.o ../../obj/spec/serial.o -lcuda -lcudart -lcublas ../obj/spec/compute_stacey_acoustic_cuda.cuda.o ../../obj/spec/compute_stacey_elastic_cuda.cuda.o ../../obj/spec/it_update_displacement_cuda.cuda.o ../../obj/spec/ noise_tomography_cuda.cuda.o ../../obj/spec/prepare_mesh_constants_cuda.cuda.o ../../obj/spec/transfer_fields_cuda.cuda.o ../../obj/spec/write_seismograms_cuda.cuda.o ../../obj/spec/save_and_compare_cpu_vs_gpu.cudacc.o ../../obj/spec/serial.o -lcuda -lcudart -lcublas ..o -lcuda -lcudart -lcublaso -lcuda -lcudart -lcublas

/ usr / bin / ld:-lcudartが見つかりません

collect2:ldが1つの終了ステータスを返しました

編集:

リンケージコマンドをに変更しました

gfortran -g -O2 -ffree-line-length-none -I ../ shared / -L $ CUDA_HOME /lib[残りは続きます]

そして、私のPATHはすべて問題ないようですが、それでも同じエラーが発生します。

Edit2:

エラーは、コンパイルしようとしたコードが64ビットであったため、パスに.soの異なるセットを指定する必要がありました。

/ usr / local / cuda / lib64

これで、コンパイルは問題なく正常に実行されました。

0 投票する
1 に答える
1460 参照

c++ - Cuda (NVCC) コンパイラの _ITERATOR_DEBUG_LEVEL?

NVCC が設定する _ITERATOR_DEBUG_LEVEL を知っている人はいますか?

VS2010 の Cmake プロジェクトで作業していて、プロジェクトをリンクしようとするとリンク エラーが発生します。

C++ ファイルの _ITERATOR_DEBUG_LEVEL を 0 に設定できますが、他のライブラリとリンクしなくなります。したがって、nvcc をレベル 2 でコンパイルする方法が必要です。

リリースモードですべてを使用すると機能するため、レベルが正しく設定されているようです。コンパイルに使用するコマンド ラインは次のようになります。

0 投票する
1 に答える
1104 参照

cuda - CUDAのnvccは、三項演算子/条件付き速記を適切にコンパイルしませんか?

編集
これはあなたがあなた自身のためにこれらの種類のエラーを見るためにあなたがコンパイルする小さなプログラムです...

MyKernel2実行されると、正しい出力が配列に書き込まれます。

MyKernel1実行されると、同じ3値ベースのidx割り当てで、すべての結果に対してゼロになります。

(三項境界を使用して)実行するPrintMethod1と、セグフォールトが発生し、本質的に無限ループに陥ります。注意してください、これはホスト側にあります!!

を実行するPrintMethod2と、出力は通常、上記のように出力されます。

これが私のコンパイルコマンドです:

私が持っている唯一の手がかりは、両方のカーネルが不適切なパラメータを持っていることについて不平を言っているということですが、それは正しく見え、正しい結果を取得しますMyKernel2

上記の例は、以下の説明に基づいてコメント投稿者が自分で試すことができたものとほぼ同じだと思いますが、コードを書く時間と労力を節約できます。

これを理解するために、他に投稿できるものがあれば教えてください。

元の質問

langで定義されているほとんどのCコンパイラ。標準サポートの三項演算子。

例えば

ただし、驚くべきことに、CUDAnvccは、カーネル内で使用されるときに、一部の三項演算子を取り除き、それらをゼロに置き換えるように見えます...

cuPrintf私は、コードの問題のあるブロックをチェックするために適用することによってこれを発見しました。たとえば、出力用にグローバル配列を共有する2つのカーネルがあるとします。最初のカーネルは、要素の最初のチャンクを処理します。2番目のカーネルは、最初のカーネルの要素を上書きしないように、配列内でジャンプする距離を示すオフセットを取得します。オフセットは、偶数と奇数で異なります。

だから私は書くことができます:

しかし、(私の意見では)ほぼ同等の速記構文を書く方がコンパクトで読みやすいでしょう。

ただし、後者のコードは、CUDAのコンパイラが省略形の条件を切り取るため、常にゼロを生成します。

この機能コードが悪用されてスレッドの分岐が発生することはわかっていますが、単純なケースでは、コンパイラーが適切に処理すれば、標準の条件と何ら変わらないように見えます。

これはコンパイラのバグですか、それとも意図的にサポートされていませんか?

この機能がCUDAに登場するかどうか誰かが知っていますか?

それが私のアドレス指定の失敗とsegfaultsの原因であることがわかって非常に驚きました...

編集
これは標準のC機能です。読み間違えて、誤って非標準だと言いました。

編集2
私はコンパイラのために「チョークアンドダイ」と言っていました。「ダイ」は間違いなく不適切な用語です。むしろ、nvccコンパイルを完了しますが、三項演算子ベースの割り当てを取り除き、ゼロに置き換えたようです。ものが適切なスポットに書き込まれていなかったため、これは後で戻ってきて私を噛みました。そして、それらのスポットは、ダブルインデックススキームのインデックスとして使用されました。インデックスはCPU側のラップアップ中に使用されたため、セグメンテーションフォールトはCPU側で発生しましたが、コンパイラのスニッピングによって駆動されていました。

コンパイラv4.1を使用していて、-O2オンにしています。オプティマイザーは、このバグの原因である可能性がある三項演算内で使用される変数を最適化しているようです。

エラーが発生しやすい3項演算は、上記の例とほぼ同じですが、大規模な加算演算が含まれます。

以下のコメント投稿者のアドバイスに従い、NVIDIAにバグレポートを提出する予定ですが、この投稿は他の人への警告として残しています。

編集3

ここでは、常にゼロを生成する、わずかにサニタイズされた完全なステートメントを示します。

0 投票する
1 に答える
948 参照

gcc - nvccを使用すると、fopenが書き込み可能なファイルを開くことができません

編集:この問題は、malloc(3)呼び出しをchar *にキャストしないときに受け取るエラーのために、nvccがCコンパイラではなくC++コンパイラを呼び出すことが原因であると考えています。私はこの主張に導かれます:void*からchar**への無効な会話

EDITEDIT:fileO = fopen(version、 "w");を使用すると正常に動作します。strcpyおよびstrcat呼び出しをバイパスします。(はは、私はキャットコールと言いました...)

そのため、同じプログラムのシーケンシャルバージョン(非CUDA)からファイルI/Oを収集したCUDAプログラムがあります。まったく同じコードが通常のgccコンパイルで機能しますが、nvccでは機能しません。nvccがC/C++をネイティブC++コンパイラにシャントすることは知っていますが、何らかの理由で、書き込み可能なファイルを開いていないだけです。上記のコードのデータを読み込むために別のファイルストリームを開いたり閉じたりしましたが、これをシーケンシャルバージョンで行うと、そこで正常に機能します。

関連するコードは次のとおりです。

毎回「書き込みファイルの作成に失敗しました」というメッセージが表示されます。

何か案は?

0 投票する
3 に答える
926 参照

cuda - CUDA 帯域幅Test.cu

CUDA SDK で bandwidthTest.cu をコンパイルして実行したいと考えています。コンパイルすると、次の2つのエラーに直面します。

どうすればこの問題を解決できますか?

0 投票する
1 に答える
614 参照

cuda - CUDASDKのbandwidthTest.cuで検出されたスタックスマッシング

CUDASDK内でbandwidthTestを実行したいと思います。スタックスマッシング検出エラーにより終了します。どうすればこの問題を解決できますか????? makeコマンドを使用してこのプログラムを実行し、ファイルを作成します。コード内では何も変更できません。

0 投票する
2 に答える
2607 参照

cuda - deviceQuery プログラム - マルチプロセッサの数 = 0

CUDA SDK で deviceQuery プログラムを実行しました。ファイル内のマルチプロセッサとコアの数は 0 ですが、これは正しくないと確信しています。どのような理由が考えられますか?

0 投票する
1 に答える
5368 参照

cuda - nvcc --ptxas-options=-v (レジスタとメモリの使用量) エラー

CUDA GPU Occupancy Calculator で使用するために、nvcc の --ptxas-options=-v フラグを使用して cuda プログラムをコンパイルし、レジスタとメモリの使用量を達成したいと考えています。

エラー: 識別子 "atomicAdd" は定義されていません

カーネルでatomicAddを使用しました。どうすればこの問題を解決できますか?