Хранение данных на GPU и распараллеливание свертки в MATLAB
У меня есть код, который сильно зависит от свертки. он отвечает за более 80% времени работы. Я хочу использовать графический процессор, чтобы сделать его намного быстрее, но есть некоторые вещи, которые я не до конца понимаю (у меня пока нет доступа, чтобы проверить это на себе)
Если я передаю информацию в конструктор класса (наследуя от дескриптора) для хранения в памяти графического процессора (с
gpuArray
), он останется там? у меня будут проблемы с передачей класса в качестве параметра функциям? Все операции, выполняемые над самими данными, можно выполнять на графическом процессоре (и я предполагаю, что зацикливание на массиве работает так же хорошо, независимо от того, где хранится массив).У меня есть матрица
size(MyMat)=[s, s, b, n]
, в котором я хочу хранить n разных матриц размера[s, s, b]
вычисляется одновременно (с операциями, которые можно выполнять на графическом процессоре) Нужно ли использовать parfor? (Я понимаю, что в большинстве случаев из-за накладных расходов это плохая идея) или есть более быстрый способ заставить GPU делать это быстро? единственное вычисление, которое мне нужно выполнить в этом случае, - это свертка (но все это не может быть выполнено за одну операцию извлечения)
Спасибо!
1 ответ
1) Просто используйте gpuArray, как и любую другую переменную. Вполне вероятно, что никакой адаптации вашего кода не требуется, в противном случае вы получите исключение, указывающее вам на проблему.
2) сочетание gpuArray и parfor является типичным способом распараллеливания вычислений gpu на нескольких gpus? У вас есть несколько gpus? Если да, попробуйте parfor, если нет, то, вероятно, будет медленнее, потому что только один работник может использовать gpu, а все остальные должны ждать.