问题标签 [parfor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
315 浏览

matlab - 嵌套 for 循环 matlab 或 parfor 循环

我有一个嵌套的 for 循环,但它会减慢一点处理速度,我怎样才能使嵌套循环有效。我需要的是对于外循环的每个值,内循环继续其所有迭代。但是,我认为它不会像两个嵌套循环那样影响计算。我的第二个问题是,parfor循环是否会影响速度或可能支持我的现象?

我的代码:

0 投票
1 回答
109 浏览

arrays - 为了评估而避免评估 Matlab

我目前正在评估我的数组,因为我的数组在eval(['P' num2str(jj) '(i,:)'])哪里P1 P2,我只对我的所有数组都感兴趣,(i,1:3)以及i用于jj评估1 2数组的位置。我想避免eval(),因为我想使用PCT并行处理两个数组,因为parfor循环不支持eval(),而且Matlab还建议尽可能避免它,现在根据我的场景有哪些可能的解决方案/建议。

我的代码:

0 投票
2 回答
1078 浏览

matlab - 如何`parfor`嵌套循环?

原始代码是这样的:

我试图将它改编成这样的并行代码

这会生成一个错误,说parfor由于 H{i,j} 而无法运行。

那么这里的错误是什么?以及如何将嵌套循环调整为 parfor?

一种可能的解决方案

但我怀疑在另一个循环中使用 parfor 会增加开销,parfor从而导致额外的计算时间

0 投票
4 回答
19033 浏览

matlab - Matlab:从 parfor 循环打印进度

我在 Matlab 中运行了很多长时间的模拟,通常需要几分钟到几个小时,所以为了加快速度,我决定使用parfor循环同时运行模拟。

一切都很好,除了一件事:进度打印。由于每次模拟都需要很多时间,我通常使用类似的方式打印进度

但是,正如所料,在parfor循环中执行此操作时,您会变得混乱。

我在谷歌上搜索了很多解决方案,并找到了一堆像这样的“parfor 进度打印机” 。但是,它们都打印了整个parfor循环的进度,而不是显示每个单独的迭代已经走了多远。由于我在循环中只有大约 4-8 次迭代parfor,但每次迭代大约需要一个小时,所以这种方法对我来说不是很有帮助。

对我来说理想的解决方案是这样的

也就是说,每个模拟都有一条线显示它已经运行了多远。我不确定这是否可能,但我至少无法想象有任何方法可以做到这一点。

另一种方法是做这样的事情

也就是说,在同一行显示所有进度。为此,您需要跟踪每个模拟要在行上的哪个位置写入并在那里写入,而不会擦除其他进度。我无法弄清楚这将如何完成,这可能吗?

如果我的问题有其他我没有想到的解决方案(显示每个单独迭代的进度),我会很高兴听到它。

因为这是我第一次在 SO 上提出问题,所以很可能我错过了一些东西;如果是这样,请随时在下面发表评论。

编辑

收到这个答案后,我想我应该分享一下我是如何使用它来解决我的问题的,因为我没有完全按照答案中的方式使用它,以防其他人遇到同样的问题。

这是一个与我的程序结构基本相同的小测试程序,利用parfor_progress答案中提到的进度条( ):

0 投票
2 回答
491 浏览

matlab - Matlab分布式服务器parfor找不到mex opencv文件

每个人!

我正在尝试并行化使用来自 mexopencv ( KNearest.m, KNearest_.mexw32 ) 的 mex 文件的算法。

该程序基于 vlfeat (vlsift.mex32) + mexopencv (KNearest.m 和 KNearest_.mexw32)。我对从图像中获得的描述符进行分类。

所有代码都位于文件共享中

当我使用matlabpool close运行程序时,一切正常。

然后我打开 matlabpool(每台 2 核上的 2 台计算机。最终有 4 个工作人员,但现在我只用于测试计算机上的 2 个工作人员并运行程序) PathDependencises from fileshare -> \LAB-07\untitled\DISTRIB\ , \LAB-07\无标题+cv

在 parfor 循环之前,我在本地机器上训练分类器

然后运行 ​​parfor

错误

那是KNearest.m找到,但没有KNearest_.mexw32。因为 KNearest_.mexw32 位于私人文件夹中,所以我将代码 KNearest.m (它呼吁 KNearest_ () 的所有地方都更改为 cv.KNearest_ ()。示例:this.id = сv.KNearest_ ())并放置在一个文件夹中KNearest_.mexw32 KNearest.m。结果,得到同样的错误

在 matlabpool 上打开文件后立即对工作人员进行搜索

cd \LAB-07\untitled+cv 之后

我跑了和 FileDependecies,但结果相同。

我不知道这是否相关,我 在训练之后和 parfor 之前执行程序分类器期间显示

在分类器之前的 parfor 中。预测


我测试了文件 cvtColor.mexw32。我在一个文件夹中只留下了 2 个文件 cvtColor.mexw32 和 vl_sift

同样的错误,并且 vl_sift 工作,cvtColor 没有...

0 投票
2 回答
447 浏览

matlab - 在 MATLAB 中使用 parfor 进行并行化

我正在尝试在 MATLAB 中并行化一个循环,并收到一条错误消息,指出“'X_train' 的有效索引在 PARFOR 循环中受到限制。” 我的代码如下:

X_train 是一个 n x p 矩阵,Xmj 是一个 1 x p 向量。错误是针对 X_train。通过阅读文档,我看到每个变量的索引必须在 parfor 循环中固定。但是,即使我注释掉该行X_train(bin_n, p) = X_train(bin_n, p) + 1;(它的 X_train 索引与其他两行不同),我仍然会收到错误消息。有人可以解释一下为什么以及如何解决它吗?

0 投票
2 回答
2164 浏览

matlab - 在 Matlab 中使用 MEX 文件进行并行计算?

是否可以使用 Matlab (parfor) 中的并行计算工具箱并行运行 MEX 文件?我使用 gfortran 编译器将 Fortran 应用程序编译为 MEX 文件。它可以正常工作:

但是当我尝试并行运行它时,它会崩溃。费:

我收到以下错误:

使用distcomp.remoteparfor/getCompleteIntervals 时出错(第 22 行) parfor 正在使用的会话已关闭。

原因:使用distcomp.remoteparfor/getCompleteIntervals 时出错(第 22 行) parfor 正在使用的会话已关闭。

客户端失去了与实验 3 的连接。这可能是由于网络问题,或者交互式 matlabpool 作业可能出错。

其他功能(不是 MEX)并行运行没有问题。我在 OS X 10.8.5 上使用 Matlab R2013a。

0 投票
1 回答
889 浏览

matlab - 在 HPC 集群上运行 Matlab 批处理作业

我试图让 Matlab 将许多脚本作为单独的批处理作业执行。每个脚本从 excel 表格中加载一些数据并实现一个神经网络。神经网络在内部使用 parfor 循环进行参数调整。

当我在本地机器上运行批处理作业时,它工作正常。我的 Matlab 代码看起来像

我得到的日记输出是

但是,当我从“本地”配置更改为我的服务器配置时,我得到

我假设问题与我的函数/数据对工作人员的可见性有关,但我已经尝试了批处理函数中我能想到的“FileDependencies”和“PathDependencies”选项的所有组合,但无济于事。

任何帮助将不胜感激,如果我在没有意识到的情况下做了一些非常愚蠢的事情,请提前道歉!

编辑-

错误堆栈如下:

文件“Historical1Step”是我要运行的脚本。第一行(直到代码失败)是:

0 投票
1 回答
667 浏览

performance - 用于 Matlab 中的循环和批处理的 parfor 循环

我想在Matlab中使用并行计算工具箱,我搜索了很多以了解这方面的知识,我看到了一个关于parforfor循环比较的常见查询,这parfor很慢,但是,我得到了用/不开始的常见原因matlabpool/parpool

到这里我总结了最后的代码,但是还是太慢了,不知道是什么原因。我很奇怪Mathswork没有很好地记录这个问题。关于特别是启动PCTparfor以及Batch Processing启动和停止条件的任何建议,以及pool有多少关于操作的足够工人

我的代码:

编辑1:

我也看到了嵌套循环的线性化,我检查过,但与普通for循环相比它也很慢

编辑2:

我想并行运行的代码。

0 投票
2 回答
116 浏览

matlab - 如何将数据集划分为 n 个块以减少超级计算机上的排队时间?

我有一个数据集,其中包含大约 2000 个数字图像。我正在使用 MATLAB 执行一些数字图像处理以从图像中提取树木。该脚本当前配置为在n 个内核parfor上循环处理图像。

挑战:
我可以在拥有大约 10,000 个计算核心的大学管理的超级计算机上获得处理时间。如果我提交整个作业进行处理,我会被放回任务队列中,台式计算机可以在超级计算机上开始处理之前完成作业。支持人员告诉我,将 2000 个文件数据集划分为约 100 个文件作业将显着减少任务队列时间。我可以使用什么方法使用parfor循环并行执行任务,同时一次提交 100 个文件(2000 个)?

我的脚本结构如下: