私は、Visual Studio 2010 でこれらの非常に奇妙な問題を抱えていました。この時点で、動作が非常に不安定なので、CUDA に使用する必要がなかったことを本当に望んでいます (使用する必要がないことはわかっていますが、使用しないのは難しいです)。それを使用する)。
本当に基本的なことで私が抱えている多くの問題の 1 つは、ヘッダー ファイルが複数回インクルードされることです。例えば:
//vars.cuh
#if !defined(VARS_cuh)
#define VARS_cuh
#include <cuda.h>
#include <cuda_runtime_api.h>
int* kern_xstart, *kern_xend, *kern_ystart, *kern_yend, *kern_zstart, *kern_zend;
/* more variable definitions */
#endif
次に、このファイルをほとんどのソース ファイルに含めます。
//source_file.cu
extern "C"{
#include "vars.cuh"
/* more includes of my own headers */
#include <cuda.h>
#include <cuda_runtime_api.h>
}
/* source file body */
VS 2010 コンパイラは次のようなエラーを出力します: 「エラー LNK2005: foo は既に other_source_file_I_wrote.cu.obj で定義されています」
なぜこれを行うのですか?また、一石二鳥のこの設定では、source_file.cu に関数を書き、それを vars.cuh でプロトタイピングすることにも問題があります。source_file.cu に vars.cuh を明確に含めているにもかかわらず、vars.cuh が定義を認識できないという問題が発生します。
ありがとうございました!