問題タブ [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.
c - CUDA および C の Makefile
.c および .cu ファイルを使用するプロジェクトに取り組んでいます。元のパッケージは完全に C で書かれており、独自の Makefile を持っていました (完全に機能していました)。プロジェクトに .cu ファイルを追加したので、すべてをまとめてコンパイルするように Makefile を変更したいと思います。
これが私の試みです:
プロジェクトの構造は次のとおりです。
- 計画
- 含む
- ソースディレクトリ
- それ
他のフォルダ
include にはすべての .h ファイルが含まれ、 sourcedirには .c および .cu ファイルが含まれます (.cu ファイルは 1 つだけです)。Makefile があります。
Makefile の問題は、itフォルダーでmakeを実行すると、main() 関数を含むファイル (sourcedir フォルダーの it.c) がいずれにもリンクされていないことを示す一連のエラーが表示されることです。他のライブラリの関数。同じことが私の .cu ファイルにも当てはまります。
Makefile の何が問題なのか、ヒントを教えてください。次の Stackoverflow の投稿を参照として使用しました: C++/CUDA プロジェクトの makefile
助けてくれてありがとう、
ヴラド
編集:
これは元の Makefile で、.c ファイルで機能したものです。.cu ファイルを他のファイルと一緒にコンパイルするために追加する必要があるものについて教えてください。再度、感謝します。
LATER EDIT:
Makefileをもう少し変更し、少しきれいにしましたが、.cuが.cファイルにリンクされていない、またはその逆であるという事実に関連するいくつかのエラーしか発生しません。
だから今、私はこれらのエラーが発生しています:
私の投稿をお読みいただき、ありがとうございます。
gcc - GPUコンピューティングSDKのcutilへのリンク
NVIDIAがリリースしたGPUコンピューティングSDKのcutil.hの関数にリンクしようとしています。
現時点では、この単純なコードをコンパイルしようとしています。
次のコマンドを使用します。
次のエラーが発生する場合のみ:
フラグを追加した場合、ldも-lcutilを見つけることができません。リンクすることになっている静的ライブラリがありますが、何らかの理由でこれはうまくいきません。これが私が試したことです:
LD_LIBRARY_PATHに静的ライブラリへのパスが含まれるように.bashrcファイルを変更しました
##########<CULA>CULA_ROOT = / usr / local/culaをエクスポートします
CULA_INC_PATH = $ CULA_ROOT/includeをエクスポートします
CULA_BIN_PATH_32 = $ CULA_ROOT/binをエクスポートします
CULA_BIN_PATH_64 = $ CULA_ROOT/bin64をエクスポートします
CULA_LIB_PATH_32 = $ CULA_ROOT/libをエクスポートします
CULA_LIB_PATH_64 = $ CULA_ROOT/lib64をエクスポートします
########## <CUDA>export PATH = $ PATH:/ usr / local / cuda / bin
LD_LIBRARY_PATH =:/ usr / local / cuda/lib64をエクスポートします
LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:$CULA_LIB_PATH_64をエクスポートします
エクスポートLD_LIBRARY_PATH=$ LD_LIBRARY_PATH:/ usr / local / cuda / libnvvp /
CUDA_SDK_ROOT_DIR = / home / sj755 / NVIDIA_GPU_Computing_SDK/Cをエクスポートします
エクスポートLD_LIBRARY_PATH=$ LD_LIBRARY_PATH:$ CUDA_SDK_ROOT_DIR / lib
名前を変更
libcutil_x86_64.a
してみましたがlibcutil.a
、まだ何もありません。アーカイブを抽出し、共有オブジェクトファイルを作成し、それにリンクしてみました。
ar -x libcutil_x86_64.a
gcc -I / usr / include / GL / -L / usr / include / GL / -lglut -lGL -lGLU -lX11 -lXmu -lXi -lm -lpthread -shared * .cpp.o -o libcutil.so
nvcc -lcutil -I /home/sj755/NVIDIA_GPU_Computing_SDK/C/common/inc/ -L /home/sj755/NVIDIA_GPU_Computing_SDK/C/lib/libcutil.so cutiltest.cu
以下を取得するためだけに/usr/bin/ld: cannot find -lcutil
ここで忘れているのはどのステップですか?
boost - Boost.python と cuda コードのコンパイル
メソッドをPythonに公開するためにコンパイルparallel.cu
しpython_wrapper.cpp
てpython_wrapper.cpp
使用したいと思います。
私は と の両方が初めてです。
彼らのマニュアルとグーグルから、私は彼らに話をさせる方法を見つけることができませんでした.
いくつかのサイトは、私は次のようなことをすべきだと言っていますBoost.python
parallel.cu
cuda
Boost.python
Boost.python
しかし、コードをコンパイルする唯一の方法は、 bjam
. に統合する
試みがありましたが、機能させることができませんでした。nvcc
bjam
parallel.cuh
python_wrapper.cpp
これらのファイルをコンパイルするにはどうすればよいですか?
について聞いたことがありますが、ファイルにとライブラリPyCuda
を含める必要があります。
また、可能であれば、標準のコマンド ライン駆動のコンパイル プロセスに固執したいと思います。Boost
thrust
.cu
compiler-construction - CUDA C/C++ コンパイラの永続的なインクルードとライブラリ パスを追加
私は現在、CULAライブラリと GPU Computing SDK のライブラリの使用を含むいくつかの作業を行っています。
NVCC でコンパイルするときは、次のフラグを使用する必要があります。
それは問題なく動作しますが、毎回インクルード パスとライブラリ パスを指定する必要があることにうんざりしています。次の引数を指定せずにコンパイラを実行できる方法はありますか:
visual-studio-2010 - nvcc と CUDA を使用した QtCreator の qmake、Windows 7
QtCreator と CUDA を組み合わせようとする古い試みを数多く見てきましたが、それらはすべて機能しなくなりました。
だから私はこのトピックを始めて、皆のための新しいリファレンスがあるようにします.
まず、次のコマンドを使用して、本に記載されているようにコードをコンパイルしようとしました。
しかし、エラーが発生しました:型名「size_t」の無効な再宣言。
私ができた唯一のことは、Visual Studio 2010 を使用して、本「CUDA アプリケーションの設計と開発」からこのサンプル コードをコンパイルすることでした。ただし、VS2010 は使いたい環境ではありません。だから私はログファイルに行き、それが使用する実行コマンドを取りました.それは次のとおりです:
このコマンドは、オブジェクト ファイルを作成します。seqCuda.cu のサンプル コードは正常に実行できましたが、オブジェクト ファイルから実行可能ファイルへの移動方法がわかりません。qmakeファイルを使用してQtでそれを行いたいです。
このコンパイル コマンドの重要な部分と、qmake ファイルで正しい方法でマージする方法を教えてください。
今私の問題は、このコマンドを逆アセンブルしてqmakeで書き直そうとしたことです。はい、暗闇の中で刺していて、満足のいく結果を達成できませんでした。以下は、qmakeでそれを行うための私の「試み」です。次のqmakeのコマンドのいずれかを環境変数に置き換えることができれば、特にVC2010 bin dirに感謝します。
g++ - / usr / bin / ld:ドワーフエラー
nvccを使用して複雑なアプリケーションをコンパイルしようとしていますが、コンパイラをmpic++からg++に変更する必要があります。これは、次のエラーが発生しているためです。
ドワーフとは何ですか?このエラーはどういう意味ですか?
それを解決するためのヒントはありますか?私がここで見逃している有用な情報は何ですか?
cuda - CUDA nvcc 遅いホスト コード
nvcc コンパイラの使用に問題があります。nvcc 4.2 を使用してコンパイルされたホスト コードは、g++ 4.4.6 を使用してコンパイルされた同じコードよりも約 5 倍遅く実行されることがわかりました。NVIDIA SDK Makefile テンプレートを使用して、リリース構成でコードをコンパイルしています。どちらの場合も -O2 最適化が使用されます。nvcc はホスト コードをホスト コンパイラに渡す必要があるため、これはどうすればよいでしょうか。何か案は?
これは私のメイクファイルです:
linker - CUDA スラスト コードを含むライブラリの構築
CUDA 5 では、cuda コードを含むライブラリを構築し、nvcc とリンクできるようになりました。
このような状況でリンクすると、ヘッダー ファイルのみで構成されるスラストは、複数の定義エラーになります。
スラストを通過してヘッダーとコードファイルに変換し、ライブラリとして構築せずに、この問題を回避する方法はありますか?
compiler-construction - sm_21 でコンパイル中に CUDA 4.2 nvcc (cicc) エラーが発生する
私は奇妙な問題を抱えています!CUDA アプリを開発する GTX 560 Ti カード (コンピューティング機能 2.1) を持っています。
数百回コンパイルした後、エラーが発生しました。つまり、コンパイル フェーズが停止し、cicc プロセスは終了しません。しかし、ブロック番号あたりのスレッド数を変更すると、コンパイルされることがあります。(64 スレッドの場合、1024 でクラッシュします)。
誰にもそのような奇妙なエラーがありましたか。もう 1 つは、sm_13 では毎回コンパイルされますが、-arch=sm_21 ではコンパイルされません。しかし、私が言ったように、このオプションで何百回も実行されましたが、今ではもう機能しません。助言がありますか?
cuda - -use-fast-mathオプションは、SP乗算を組み込み関数に変換しますか?
CUDAプログラミングガイドのwrt-use-fast-math最適化をざっと見ました。付録Cでは、除算を組み込みに変換する方法について言及していますが、乗算については言及していません。私がこの質問をする理由は、私のカーネルにはたくさんの乗算があるからです。NVCCが乗算と加算を融合しようとすることを認識しています(通常の「*」および「+」演算子が使用されている場合、および組み込み関数がFMAD演算にマージされることはありません)。しかし、私のコードが乗算が重い場合、SP組み込み関数のような四捨五入を__fmul_rn
使用すると利点がありますか?
したがって、2つの質問があります。
-use-fast-mathオプションは、「*」演算子を使用した乗算を__fmul_rnのようなSP本能に変換しますか?
__fmul_rnを明示的に使用するために乗算を手動でコーディングすることでパフォーマンス上の利点がありますか?例またはいくつかの数字は私が理解するのに役立ちます。