Tôi đang làm việc với CUDA và tôi đã tạo một lớp int2_
để xử lý các số nguyên phức tạp.Liên kết lớp ngoài CUDA và hàm extern chưa được giải quyết trong tệp ptxas
tờ khai Class trong file ComplexTypes.h
như sau:
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.
};
}
triển khai Class trong file ComplexTypes.cpp
như sau:
#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.
Tất cả mọi thứ hoạt động tốt. Trong số main
(bao gồm ComplexTypes.h
), tôi có thể xử lý các số int2_
.
Trong tập tin CudaMatrix.cu
, bây giờ tôi bao gồm ComplexTypes.h
và xác định và instantiating đúng __global__
chức năng:
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);
Tình hình của tập tin CudaMatrix.cu
có vẻ là đối xứng với main
chức năng. Tuy nhiên, trình biên dịch phàn nàn:
Error 19 error : Unresolved extern function '_ZN16LibraryNameSpace5int2_aSEi' C:\Users\Documents\Project\Test\Testing_Files\ptxas simpleTest
Xin vui lòng, xem xét rằng:
- Trước khi chuyển việc thực hiện các tập tin riêng biệt, tất cả mọi thứ đã làm việc một cách chính xác khi bao gồm cả tờ khai và triển khai trong file
main
. - Hướng dẫn có vấn đề là
data_[i] = ob[i]
.
Bất cứ ai cũng có ý tưởng về những gì đang diễn ra?
có lẽ bạn không có tệp 'ComplexTypes.cpp', mà là tệp' ComplexTypes.cu' mà bạn đang chuyển đến nvcc, nếu không '__host__ __device__' không được biên dịch ... – talonmies
Tôi đã tìm ra giải pháp cho vấn đề của mình. Tôi đã đăng nó như một câu trả lời với hy vọng rằng nó có thể hữu ích cho những người dùng khác. – JackOLantern