图片缩略图

工人对象包装器

version 1.4.0.1 (3.39 KB) by MathWorks并行计算工具箱团队
简化了PARFOR循环和SPMD块中的大型数据等资源的管理

2.9 k下载

更新2016年10月31日

查看许可协议

编者按:这个文件被选为MATLAB中心本周精选

注意,自从MATLAB发布R2015b以来,parallel.pool.Constant被取代了
WorkerObjWrapper。
WorkerObjWrapper是为这样的情况设计的
在PARFOR循环或循环体中多次需要数据
一个SPMD块,而这一段数据都是昂贵的
创建时,不需要多次重新创建
次了。例子可能包括:数据库连接句柄,大
数组,等等。
考虑这样一种情况,每个工人都需要访问一个大型
而是恒定的数据集。而这个数据集可以传递给
PARFOR块的主体,它不会在那里持久化,而是将在那里持久化
转移到每个PARFOR块的每个worker。例如:

largeData = generateLargeData(5000);
Parfor ii = 1:20
x(ii) = someFcn(largeData);
结束
Parfor ii = 1:20
y(ii) = someFcn(largeData, x(ii));
结束

可以这样简化:

wrapper = WorkerObjWrapper(@generateLargeData, 5000);
Parfor ii = 1:20
x(ii) = someFcn(wrapper。值);
结束
Parfor ii = 1:20
y(ii) = someFcn(wrapper。价值,x (ii));
结束

在这种情况下,只计算函数“generatelarggedata”
在每个worker上传输一次,没有大的数据从
工人的客户。从工人身上清除了大量数据
当变量“wrapper”超出作用域或被清除时
客户端。

另一个例子可能是构造特定于工作者的
日志文件。这可以像这样实现:

%构建一个函数句柄来打开一个有编号的文本文件:
FCN = @() fopen(sprintf('worker_%d.txt', labindex), 'wt');

%打开每个worker的文件句柄,指定fclose
%将在稍后用于“清理”创建的文件句柄。
w = WorkerObjWrapper(fcn, {}, @fclose);

%运行parfor循环,记录到worker操作的磁盘
%循环迭代
parfor ii = 1:10
fprintf(w.Value, '%d\n', ii);
结束

清楚w;%导致在worker上调用"fclose(w.Value)"
键入worker_1.txt %查看worker 1得到的迭代

引用作为

MathWorks并行计算工具箱团队(2021)。工人对象包装器(//www.tianjin-qmedu.com/matlabcentral/fileexchange/31972-worker-object-wrapper), MATLAB中央文件交换。检索

MATLAB版本兼容性
创建R2013b
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!