私は CUDA を使用しておりint2_
、複雑な整数を処理するクラスを作成しました。
ファイル内のクラス宣言は次のComplexTypes.h
とおりです。
namespace LibraryNameSpace
{
class int2_ {
public:
int x;
int y;
// Constructors
__host__ __device__ int2_(const int,const int);
__host__ __device__ int2_();
// etc.
// Equalities with other types
__host__ __device__ const int2_& operator=(const int);
__host__ __device__ const int2_& operator=(const float);
// etc.
};
}
ファイル内のクラスの実装は次のComplexTypes.cpp
とおりです。
#include "ComplexTypes.h"
__host__ __device__ LibraryNameSpace::int2_::int2_(const int x_,const int y_) { x=x_; y=y_;}
__host__ __device__ LibraryNameSpace::int2_::int2_() {}
// etc.
__host__ __device__ const LibraryNameSpace::int2_& LibraryNameSpace::int2_::operator=(const int a) { x = a; y = 0.; return *this; }
__host__ __device__ const LibraryNameSpace::int2_& LibraryNameSpace::int2_::operator=(const float a) { x = (int)a; y = 0.; return *this; }
// etc.
すべてがうまく機能します。main
( を含む)では、数字ComplexTypes.h
を扱うことができました。int2_
CudaMatrix.cu
ファイルに、関数を含めて定義ComplexTypes.h
し、適切にインスタンス化しています。__global__
template <class T1, class T2>
__global__ void evaluation_matrix(T1* data_, T2* ob, int NumElements)
{
const int i = blockDim.x * blockIdx.x + threadIdx.x;
if(i < NumElements) data_[i] = ob[i];
}
template __global__ void evaluation_matrix(LibraryNameSpace::int2_*,int*,int);
ファイルの状況は関数CudaMatrix.cu
と対称のようmain
です。それにもかかわらず、コンパイラは不平を言います:
Error 19 error : Unresolved extern function '_ZN16LibraryNameSpace5int2_aSEi' C:\Users\Documents\Project\Test\Testing_Files\ptxas simpleTest
考慮してください:
- 実装を別のファイルに移動する前は、ファイルに宣言と実装の両方を含めると、すべてが正しく機能していました
main
。 - 問題のある命令は
data_[i] = ob[i]
.
誰が何が起こっているのか考えていますか?