私はこのような構造体を持っています
struct LstmLayer {
int deviceId;
thrust::device_vector <real_t> W;
thrust::device_vector <real_t> gradW;
LstmLayer() : deviceId(0) {}
LstmLayer(int __deviceId__) : deviceId(__deviceId__) {}
void setDevice(int __deviceId__) { deviceId = __deviceId__; }
void init(bool initParams) {
W.resize(4*lstmSize * 2*lstmSize);
gradW.resize(4*lstmSize * 2*lstmSize);
if (initParams) GPU_Random_Vector(W);
}
}
LstmLayer
ここで、各要素が異なる GPU デバイス上にある の配列を初期化したいと考えています。私は次のようにします
struct LstmLayer lstmLayers[MAX_NUM_LSTM_LAYERS];
for (int i = 0; i < numLstmLayers; ++i) {
CUDA_SAFE_CALL(cudaSetDevice(i));
lstmLayers[i].setDevice(i);
lstmLayers[i].init(true);
}
このプログラムを実行すると、次のエラーが発生します
terminate called after throwing an instance of 'thrust::system::system_error'
what(): driver shutting down
私のコードの何が問題なのか、それを正しく行う方法を教えてください。よろしくお願いします。