Matlab多核运算(三)

标签:
matlab多核it |
分类: Code |
典型数值计算问题
N = 1000;
plot(eig(randn(N)) / sqrt(N), ‘.’);
这段代码运行后得到图1,图上每个点代表复平面上一个特征值。注意所有的特征值都位于半径为1 ,圆心在轴的原点的圆内,特别指出的是结果与Girko圆定律是一致的,特征值的幅值没有超过矩阵维数的平方根。
http://www.hirain.com/eWebEditor/UploadFile/200810813118343.jpg<wbr>多核计算设置2" TITLE="[转载]matlab
图1 大小为1000的随机矩阵的特征值在半径为sqrt(1000)的圆内
y = zeros(1000,1);
for n = 1:1000
end
plot(y);
使用线程
线程个数 |
运行循环所需时间 |
加速倍数 |
效率 |
1 |
902.6 |
1.00 |
100% |
2 |
867.2 |
1.04 |
52% |
3 |
842.3 |
1.07 |
35% |
4 |
862.3 |
1.05 |
|
图2 不同线程数量对应的代码性能
使用并行for循环
y for n = 1:1000 end plot(y); |
y =
zeros(1000,1); parfor n = 1:1000 end plot(y); |
图3
左边:原来的代码
Labs数量 |
运行循环所需时间 |
加速倍数 |
效率 |
1 |
870.1 |
1.00 |
100% |
2 |
487.0 |
1.79 |
89% |
3 |
346.2 |
2.51 |
83% |
4 |
273.9 |
3.17 |
79% |
图4 不同的lab数量对应的代码性能
total = 0;
A = zeros(1000, 1);
parfor i = 1:100
end
利用parfor很容易计算total的表达式,但是对于第二个表达式,由于A(i+1)依赖于前一次循环得到的A(i),所以用parfor计算会产生问题。
让我们来更进一步地看看每次循环发生了什么:
Iteration 1: i = 1
Iteration 2: i = 2
Iteration 3: i = 3
通过以上分析我们可以用下面的parfor循环的代码得到跟前面同样结果的代码:
parfor i = 1:10
end
扩展并行计算
________________________________________
所需产品
-
MATLAB
-
Parallel Computing Toolbox
资源与示例
-
Using parfor to Run Loops in Parallel
-
Parallel Programming in MATLAB
文章
-
Eigenvalues and Condition Numbers of Random Matrices. Alan Edelman. Ph.D. thesis, Massachusetts Institute of Technology, May 1989.
-
Language Design for an Uncertain Hardware Future. Roy Lurie. HPCwire, September 28, 2007
-
Multiple Processors and Multiple Cores. Cleve Moler. The MathWorks News & Notes, June 2007