2015-05-29 6 views
0

Я написал программу в 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 

Этот код бросает ошибку: «„“Незаконное использование зарезервированным ключевым словом» конец Мои запросы:

  1. Пожалуйста, пожалуйста, скажите мне, где я неправильно.
  2. Я попытался ввести parfor во внутренний цикл, но он вызывает ошибку?
  3. Что означает утверждение matlabpool open local 2?
  4. Сколько потоков можно использовать параллельно для моей конфигурации системы? Как я могу проверить эти ограничения и оптимально использовать их на полную мощность?
  5. Использует ли параллельные средства обработки различные ядра собственной машины или использует ресурсы других машин? Есть ли способ выбрать один из вариантов, и как это сделать?
+1

У вас есть 3 начала цикла (один 'parfor' и 2' for''s), но 4 'end''s. Об этом говорит ошибка. Также прочитайте [это] (http://au.mathworks.com/help/distcomp/introduction-to-parfor.html), вы должны попытаться понять, что делает ваш код. – David

+0

См. Выделенную ссылку, в данном примере есть еще один дополнительный конец – roni

ответ

1

matlabpool не открыла заявление, требующее закрытия end. В связанном вопросе конец закрывает оператор spmd.

Смысл заявления matlabpool open local 2 является:

matlabpool открыт или закрывает пул Matlab параллельных процессов обработки рабочих.

open сообщает, что Matlab управляет этими работниками. (Это по умолчанию)

local говорит MATLAB, чтобы открыть эти рабочие на локальной машине (это по умолчанию)

2 говорит MATLAB для запуска 2 таких работников (по умолчанию это число процессоров)

Вы можете просто matlabpool без каких-либо параметров.

, чтобы настроить локальный профиль, перейдите на вкладку matlab home и выберите «управлять кластерами» в параллельном меню.

Кроме того, по какой-то странной причине Matlab не может разделить массив между рабочими, когда parfor не находится во внутреннем большинстве циклов. измените внутреннее значение на parfor, и оно будет работать.

+0

Спасибо за ваш ответ. Я удалил последний «конец», как было предложено. Теперь я получаю сообщение об ошибке: переменная arr_mat в parfor не может быть классифицирована. Почему это ? пожалуйста, предложите исправление – roni

+0

, см. отредактированный ответ. –