Как я могу хранить матрицу в памяти графического процессора и использовать ее при необходимости?

Я пытаюсь распараллелить некоторую функцию через CUDA, которая вызывается много раз. Каждый раз это касается одной и той же матрицы. Я хочу сохранить эту матрицу в памяти графического процессора, и когда функция вызывается, я хочу загрузить вектор в графический процессор, умножить его на матрицу и вернуть результат. Я предпочитаю стиль шаблона C ++, поэтому тяга имеет более высокий приоритет.

Пожалуйста, порекомендуйте мне некоторые функции, чтобы сделать это, и, если возможно, немного иллюстрирующие образцы.
Я не предоставляю код не потому, что это секрет, а из-за его сложности и огромных размеров.

1

Решение

Для тяги, 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;
}
};
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]