Или как преобразовать циклы Parfor в операции gpuArray?Matlab - высокая параллельность Задачи в процессорах или графических процессорах
Проблема: операция с колонками на большой матрице данных, распределенная между несколькими процессорами (рабочими) через парформу.
data = 1000 x 200 matrix
[nrows, ncols] = size(data)
parfor ix = 1:ncols
workerData = data(:,ix);
colwiseResult(ix) = function(workerData,params);
end
Теперь, как можно эффективно использовать графические процессоры? тем более, что проблема должна масштабироваться до 1000х1000 матриц (& больше)
dataGPU = gpuArray(data);
Но я не найти более легкий способ сделать колонки мудрыми операций на GPU. Такие функции, как arrayfun или bsxfun, управляются поэтапно, а это не то, что вас интересует. Поскольку это тривиально параллельные задачи, использование нескольких процессоров в графических процессорах может быть идеальным (& избегает проблем с parfor и т. Д.)
(Ну, фактически, я выполняю расчет правдоподобия, который выполняет матричную диагонализацию, экспоненты & продуктов прогрессивно над каждой точкой данных на векторе столбца, используя цикл for внутри Рабочих). Проверили, что все эти операторы имеют перегрузку gpu)
Благодарим вас, я добавлю дополнительную информацию. –
Вау, это совсем не ответ на тот конкретный вопрос, который я задал с хорошими подробностями. Конечно, я заглянул в Matlab Intros, помощь и т. Д. Это должно быть очевидно даже из информации, которую я представил в вопросе, прочитав об использовании arrayfun, bsxfun в контексте gpuArray. В любом случае, оцените вашу попытку. 2 Teslas c2050 - это рабочие станции. У меня работает кластер из 144 ядер, где я регулярно выполняю параллельные вычисления. Вопрос очень специфичен для моего случая использования и * НЕ * обсуждать в целом, подходят ли GPU или нет. – nahsivar