CUDA 内で C++ クラスを利用しようとしています。
私はそのようなクラスを持っています:
#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++ をコンパイルするように設定しました
cuda には文字列がないため、これは nvcc でのコンパイルに失敗します。
私がやりたいのは、次のようなことを行って 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で可能だと思いました。私は間違っていますか?