Я пытаюсь распараллелить некоторую функцию через CUDA, которая вызывается много раз. Каждый раз это касается одной и той же матрицы. Я хочу сохранить эту матрицу в памяти графического процессора, и когда функция вызывается, я хочу загрузить вектор в графический процессор, умножить его на матрицу и вернуть результат. Я предпочитаю стиль шаблона C ++, поэтому тяга имеет более высокий приоритет.
Пожалуйста, порекомендуйте мне некоторые функции, чтобы сделать это, и, если возможно, немного иллюстрирующие образцы.
Я не предоставляю код не потому, что это секрет, а из-за его сложности и огромных размеров.
Для тяги, device_vector, device_ptr, ect, это то, что вы ищете.
От thrust :: device_vector до необработанного указателя и обратно?
Но для того, чтобы эффективно программировать графический процессор, я предлагаю также ознакомиться с типами памяти CUDA:
http://www.cvg.ethz.ch/teaching/2011spring/gpgpu/cuda_memory.pdf (предупреждение в формате PDF)
Тип памяти, которую вы ищете, это «глобальная память». Помните, что вся эта память хранится на карте GPU, а не на карте CPU, поэтому она будет доступна только ядрам и вызовам функций устройства.
Все функторы на указателях устройств просто должны быть скомпилированы с устройство тег (пример унарной операции):
template <typename T>
struct square
{
__host__ __device__
T operator()(const T& x) const {
return x * x;
}
};
Других решений пока нет …