Хранение данных на GPU и распараллеливание свертки в MATLAB

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

  1. Если я передаю информацию в конструктор класса (наследуя от дескриптора) для хранения в памяти графического процессора (с gpuArray), он останется там? у меня будут проблемы с передачей класса в качестве параметра функциям? Все операции, выполняемые над самими данными, можно выполнять на графическом процессоре (и я предполагаю, что зацикливание на массиве работает так же хорошо, независимо от того, где хранится массив).

  2. У меня есть матрица size(MyMat)=[s, s, b, n], в котором я хочу хранить n разных матриц размера [s, s, b] вычисляется одновременно (с операциями, которые можно выполнять на графическом процессоре) Нужно ли использовать parfor? (Я понимаю, что в большинстве случаев из-за накладных расходов это плохая идея) или есть более быстрый способ заставить GPU делать это быстро? единственное вычисление, которое мне нужно выполнить в этом случае, - это свертка (но все это не может быть выполнено за одну операцию извлечения)

Спасибо!

1 ответ

1) Просто используйте gpuArray, как и любую другую переменную. Вполне вероятно, что никакой адаптации вашего кода не требуется, в противном случае вы получите исключение, указывающее вам на проблему.

2) сочетание gpuArray и parfor является типичным способом распараллеливания вычислений gpu на нескольких gpus? У вас есть несколько gpus? Если да, попробуйте parfor, если нет, то, вероятно, будет медленнее, потому что только один работник может использовать gpu, а все остальные должны ждать.

Другие вопросы по тегам