Summary
并行处理对于耗时很长很长的程序至关重要,它的思路是空间换时间,将一条处理流在空间允许前提下提升至多条。
此处,介绍并行处理功能将以函数parfor为主要切入点,它比较容易理解和掌握。Matlab中涉及并行处理的函数还有很多,以后在逐渐补充之。
parfor
函数parfor与for语句定义几乎一致,不同在于:循环起止数值必须是有限整数,或者这一区间是可以用表达式代表的一个连续整数的行向量。M定义最大数量的Matlab Workers(什么是worker?),他们运行parfor循环中语句,M只能是非负整数。默认情况下,Matlab利用尽可能多的workers。如果被设定上限,Matlab利用的workers不会超过这个数量,即是存在更多的空间。如果请求数量大于实际情况,Matlab只能在声明之处使用最大数量可利用的workers。注意循环体内各循环必须是独立的,比如按顺序第900次与其他各次过程均不存在联系,放在400次之前运行依然得到相同的结果,这就是各次独立原则。
我在这里举例说明一些情况:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | clear; clc; n=100; disp('parfor'); timebegin=tic; cur_data=date; cur_time=fix(clock); str1=sprintf('%s %.2d:%.2d:%.2d', cur_data, cur_time(4), cur_time(5), cur_time(6)); fprintf('Time Begin: '); fprintf(str1); fprintf('\n'); dirpath='./sub1'; parfor ii=1:n txtname=[num2str(ii), '.txt']; txtpath=[dirpath, '/', txtname]; fid=fopen(txtpath, 'wt'); fclose(fid); fclose('all'); disp(num2str(ii)); end cur_data=date; cur_time=fix(clock); str2=sprintf('%s %.2d:%.2d:%.2d', cur_data, cur_time(4), cur_time(5), cur_time(6)); fprintf('Time End: '); disp(str2); timespan=toc(timebegin); fprintf('Time Span: %.4f s\n', timespan); |
上面代码创建100个txt文件,并输出每次创建文件的序号,如Fig. 1,它的顺序不是按照1至100排列的,但不损害结果的正确。
Fig. 1
Transparency
若运行parfor返回错误:See Parallel Computing Toolbox documentation about Transparency,这表示parfor代码Body违反了透明性原则(Transparency)。
透明性原则的定义是The body of a parfor-loop or spmd block must be transparent, meaning that all references to variables must be "visible" (i.e., occur in the text of the program).函数parfor循环主体必须是完全透明的,这指的是所有与变量相关的内容必须是可见的。
这种透明性原则下诸如函数save、load、eval等都是不能出现在parfor代码主体中的,若仍要实现以上函数的功能,其实也很简单,把这些函数包装成子函数(subfunction)调用即可,此时代码主体不违反透明性原则。
Cannot Be Classified
对于此类错误the variable XX in a parfor cannot be classified.,原因是XX在循环之前已被赋值,导致循环体之内不能再被赋值,这种情况可以考虑如下解决方式:
1 2 3 4 5 | XX=[]; parfor ii=1:n value=?? XX=AddData(XX, value); end |
References
[2] parfor, MathWorks.
SEGA GENESIS - GAN-GAMING
ReplyDeleteSEGA GENESIS. GENESIS-HANDS. Genesis (JP-EU). NA. NA. poormansguidetocasinogambling NA. https://vannienailor4166blog.blogspot.com/ SEGA sol.edu.kg GENESIS-HANDS. NA. 바카라 사이트 SEGA GENESIS. NA. GENESIS-HANDS. NA. www.jtmhub.com