NVCC が以下の警告をエラーとして処理することを希望します。
warning : calling a __host__ function("foo") from a __host__ __device__ function("bar")
NVCC のドキュメント「NVIDIA CUDA Compiler Driver NVCC」には、「警告」という言葉さえ含まれていません。
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
上記の追加のコンパイルオプションを使用します。