У меня есть классы матриц CPU и GPU (CUDA), и я хочу перегрузить operator()
, чтобы я мог читать или писать отдельные элементы матриц.Перегрузка оператора() для класса матрицы CUDA
Для класса матричного процессора, я был в состоянии сделать это
OutType & operator()(const int i) { return data_[i]; }
(читать) и
OutType operator()(const int i) const { return data_[i]; }
(запись). Для класса матрицы GPU, я был в состоянии перегружать operator()
для чтения с помощью
__host__ OutType operator()(const int i) const { OutType d; CudaSafeCall(cudaMemcpy(&d,data_+i,sizeof(OutType),cudaMemcpyDeviceToHost)); return d; }
, но я не смог сделать то же самое для письма. Может ли кто-нибудь дать какой-либо намек на решение этой проблемы?
Блок записи для CPU возвращает ссылку data_[i]
, поэтому задание на назначение выполняется с помощью построителя C++ operator=
. Я не могу понять, как я могу использовать тот же механизм для CUDA.
Спасибо.
Очень умное решение! Большое спасибо. Просто уточнить другие потенциально заинтересованные пользователи. Это решение работает как для «чтения», так и для «письма». Опять же, спасибо. – JackOLantern