我試圖在CUDA中使用我的C++類。在CUDA中有選擇地編譯頭文件和類函數
我有一類這樣:
#include<string>
#include<stdlib.h>
class exampleClass{
int i;
__host__ __device__ exampleClass(int _i):i(_i){};
__host__ __device__ void increment(){i++;}
__host__ __device__ string outputMessage(return itoa(i);}
};
我已經在.CU文件中設置此並設置編譯CUDA C/C++
這種失敗,NVCC編譯因爲CUDA不有字符串。
我想要做的是做類似保留CUDA唯一功能:
#ifndef __CUDA_ARCH__
#include<string>
#endif
#include<stdlib.h>
class exampleClass{
int i;
__host__ __device__ exampleClass(int _i):i(_i){};
__host__ __device__ void increment(){i++;}
#ifndef __CUDA_ARCH__
string outputMessage(return itoa(i);}
#endif
};
但我知道這是行不通......至少,它不是爲我工作。 nvcc不喜歡字符串包含,也不顯示需要字符串類型的函數。
道歉,如果這個例子不是一流的。總之,我想要做的是在CUDA上具有可執行的核心類成員,同時保持在主機端進行分析和輸出的花哨主機操作的能力。
更新:我的最終目標是創建一個基類,其中包含幾個指向多個多態類的指針類型。這個基類本身是可以推導出來的。我認爲這在CUDA5.0中是可行的。我錯了嗎?
我用nvcc使用stl類,如字符串或向量,沒有問題。你當然不能將字符串發送到內核,或者在內核中使用字符串函數,但是看起來不像你想要做的那樣......你應該只能刪除「__device__」裝飾。 – IdeaHat
MadScienceDreams對我的問題的回答是正確的。然而,這個問題的根本問題在這裏找到了它的解決方案:http://stackoverflow.com/questions/5994005/cuda-external-calls-not-supported – PaulD
更具體地說,您需要在CUDA C中包含-dc標誌/ C++編譯器允許多個cu文件之間的鏈接。 – PaulD