Я написал программу в MATLAB и мой алгоритм зависит от нескольких параметров, скажем, а и Ь с a=1:10
и b=1:10
Я хочу, чтобы найти те значения a
и b
, что дает мне лучшие результаты.Параллельная обработка запросов
Мой основной код выглядит следующим образом:
a= 0.1:0.1:1;
b= 1:1:10;
arr_mat = zeros(length(a),length(b));
for i=1:length(a)
for j=1:length(b)
disp(['loop no = ',num2str(i),' & ',num2str(j)]);
knn = a(j);
eta = b(i);
arr_mat(i,j) = called_function(knn,eta);
end
end
прогонов программы, но это очень дорого в вычислительном отношении. Мне было интересно, есть ли встроенный инструментарий для параллельной обработки Matlab, который будет полезен для меня в этом случае. Я думал, вдоль этих линий:
Разделить мой основной программы в части:
a1= 0.1:0.1:0.5;
b1= 1:1:5;
arr_mat1 = zeros(length(a1),length(b1));
for i1=1:length(a)
for j1=1:length(b)
disp(['loop no = ',num2str(i1),' & ',num2str(j1)]);
knn1 = a1(j);
eta1 = b1(i);
arr_mat1(i,j) = called_function(knn1,eta1);
end
end
a2= 0.6:0.1:1;
b2= 6:1:10;
arr_mat2 = zeros(length(a2),length(b2));
for i2=1:length(a2)
for j2=1:length(b2)
disp(['loop no = ',num2str(i2),' & ',num2str(j2)]);
knn2 = a2(j);
eta2 = b2(i);
arr_mat2(i,j) = called_function(knn2,eta2);
end
end
Выполните коды параллельно. Моя конфигурация системы: Intel Core i7-3770 @ 3,40 ГГц с 32,0 ГБ оперативной памяти. У меня установлен MATLAB 2013b.
Я консультировался это question и попытался написать свой собственный код в этом формате:
clc;clear all;close all;
% run ixmas for different modifications
a= 0.1:0.1:1;
b= 1:1:10;
arr_mat = zeros(length(a),length(b));
matlabpool open local 2
parfor i=1:length(a)
for j=1:length(b)
disp(['loop no = ',num2str(i),' & ',num2str(j)]);
knn = a(j);
eta = b(i);
recog = 0;
for k=1:5
recog(k) = ixmas(knn,eta);
end
arr_mat(i,j) = mean(recog);
end
end
end
matlabpool close
Этот код бросает ошибку: «„“Незаконное использование зарезервированным ключевым словом» конец Мои запросы:
- Пожалуйста, пожалуйста, скажите мне, где я неправильно.
- Я попытался ввести parfor во внутренний цикл, но он вызывает ошибку?
- Что означает утверждение matlabpool open local 2?
- Сколько потоков можно использовать параллельно для моей конфигурации системы? Как я могу проверить эти ограничения и оптимально использовать их на полную мощность?
- Использует ли параллельные средства обработки различные ядра собственной машины или использует ресурсы других машин? Есть ли способ выбрать один из вариантов, и как это сделать?
У вас есть 3 начала цикла (один 'parfor' и 2' for''s), но 4 'end''s. Об этом говорит ошибка. Также прочитайте [это] (http://au.mathworks.com/help/distcomp/introduction-to-parfor.html), вы должны попытаться понять, что делает ваш код. – David
См. Выделенную ссылку, в данном примере есть еще один дополнительный конец – roni