7

NVCC が以下の警告をエラーとして処理することを希望します。

warning : calling a __host__ function("foo") from a __host__ __device__ function("bar")

NVCC のドキュメント「NVIDIA CUDA Compiler Driver NVCC」には、「警告」という言葉さえ含まれていません。

4

1 に答える 1

6

CUDA COMPILER DRIVER NVCC リファレンス ガイドのセクション 3.2.8 を引用します。「汎用ツール オプション」 :

--Werror kind指定された種類の警告をエラーにします。以下は、このオプションで受け入れられる警告の種類のリストです。

cross-execution-space-callサポートされていないクロス実行スペースの呼び出しについて、より厳密にします。コンパイラは、 から関数への呼び出しに対して、警告ではなくエラーを生成し__host__ __device__ます__host__

したがって、次の手順を実行します。

プロジェクト -> プロパティ -> 構成プロパティ -> CUDA C/C++ -> コマンド ライン -> 追加オプティクス -> 追加 --Werror cross-execution-space-call

このテストプログラム

#include <cuda.h>
#include <cuda_runtime.h>

void foo() { int a = 2;}

__host__ __device__ void test() {
    int tId = 1;
    foo();
}

int main(int argc, char **argv) { }

次の警告を返します

warning : calling a __host__ function("foo") from a __host__ __device__ function("test") is not allowed

上記の追加のコンパイル オプションを指定しないと、次のエラーが返されます

Error   3   error : calling a __host__ function("foo") from a __host__ __device__ function("test") is not allowed

上記の追加のコンパイルオプションを使用します。

于 2013-10-19T21:45:12.320 に答える