2013-02-20 33 views
6

Tôi có Matlab R2012b cho Ubuntu 64 bit. Tôi có CPU Intel Core i3 M 330 @ 2.13GHz × 4.Cách song song 4 hoạt động với PARFOR với một lõi i3 trong Matlab

Tôi muốn sử dụng parfor để song song 4 vòng cùng một lúc. Vì lý Intel Core i3 có 2 lõi và 4 Chủ đề tôi sử dụng mã này:

if matlabpool('size') == 0 % checking to see if my pool is already open 
    matlabpool(4) 
else 
    matlabpool close 
    matlabpool(4) 
end 

Và tôi xin lỗi sau:

Lỗi:

You requested a minimum of 4 workers, but the cluster "local" has the NumWorkers property set to allow a maximum of 2 workers. To run a communicating job on more workers than this (up to a maximum of 12 for the Local cluster), increase the value of the NumWorkers property for the cluster. The default value of NumWorkers for a Local cluster is the number of cores on the local machine.

Tại sao? Giá trị mặc định của NumWorkers trong máy của tôi là 2 nhưng nếu tôi có thể thực hiện 4 vòng cùng một lúc, làm thế nào để có được nó?

Trả lời

8

Để tăng mặc định NumWorkers, hãy mở Trình quản lý hồ sơ cụm (Parallel-> Manage Cluster Profiles). Chọn cấu hình local, nhấp vào chỉnh sửa và tăng NumWorkers lên giá trị tối đa có thể (trong trường hợp của bạn 4). Bây giờ có thể tạo ra một matlabpool với nhiều công nhân hơn lõi vật lý trên máy của bạn.

Tuy nhiên, lưu ý rằng việc sử dụng nhiều nhân công hơn lõi có thể dẫn đến hiệu suất giảm so với số lượng nhân viên giống như nhân.

+0

Có, đây là thực sự chính xác. +1 – Jonas

+0

Hai câu hỏi: tại sao nhiều công nhân hơn lõi giảm hiệu suất? Làm thế nào tôi có thể biết giá trị mặc định của NumWorkers cho một cụm cục bộ? –

+2

Giá trị mặc định là số lõi vật lý (điều này thậm chí được nêu trong thông báo lỗi bạn đã trích dẫn trong câu hỏi của bạn). Nhiều nhân viên hơn lõi * có thể * giảm hiệu suất của bạn bởi vì chúng không chạy trên các lõi vật lý riêng biệt, tức là chúng có thể ảnh hưởng lẫn nhau. –

8

Để lập trình thay đổi giá trị của NumWorkers 2-4 của hồ sơ local cụm, bạn có thể use:

myCluster = parcluster('local'); 
myCluster.NumWorkers = 4; % 'Modified' property now TRUE 
saveProfile(myCluster); % 'local' profile now updated, 
          % 'Modified' property now FALSE