问题标签 [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.
matlab - 嵌套 for 循环 matlab 或 parfor 循环
我有一个嵌套的 for 循环,但它会减慢一点处理速度,我怎样才能使嵌套循环有效。我需要的是对于外循环的每个值,内循环继续其所有迭代。但是,我认为它不会像两个嵌套循环那样影响计算。我的第二个问题是,parfor
循环是否会影响速度或可能支持我的现象?
我的代码:
arrays - 为了评估而避免评估 Matlab
我目前正在评估我的数组,因为我的数组在eval(['P' num2str(jj) '(i,:)'])
哪里P1
P2
,我只对我的所有数组都感兴趣,(i,1:3)
以及i
用于行和jj
评估1
2
数组的位置。我想避免eval()
,因为我想使用PCT来并行处理两个数组,因为parfor
循环不支持eval()
,而且Matlab还建议尽可能避免它,现在根据我的场景有哪些可能的解决方案/建议。
我的代码:
matlab - 如何`parfor`嵌套循环?
原始代码是这样的:
我试图将它改编成这样的并行代码:
这会生成一个错误,说parfor
由于 H{i,j} 而无法运行。
那么这里的错误是什么?以及如何将嵌套循环调整为 parfor?
一种可能的解决方案是
但我怀疑在另一个循环中使用 parfor 会增加开销,parfor
从而导致额外的计算时间。
matlab - Matlab:从 parfor 循环打印进度
我在 Matlab 中运行了很多长时间的模拟,通常需要几分钟到几个小时,所以为了加快速度,我决定使用parfor
循环同时运行模拟。
一切都很好,除了一件事:进度打印。由于每次模拟都需要很多时间,我通常使用类似的方式打印进度
但是,正如所料,在parfor
循环中执行此操作时,您会变得混乱。
我在谷歌上搜索了很多解决方案,并找到了一堆像这样的“parfor 进度打印机” 。但是,它们都打印了整个parfor
循环的进度,而不是显示每个单独的迭代已经走了多远。由于我在循环中只有大约 4-8 次迭代parfor
,但每次迭代大约需要一个小时,所以这种方法对我来说不是很有帮助。
对我来说理想的解决方案是这样的
也就是说,每个模拟都有一条线显示它已经运行了多远。我不确定这是否可能,但我至少无法想象有任何方法可以做到这一点。
另一种方法是做这样的事情
也就是说,在同一行显示所有进度。为此,您需要跟踪每个模拟要在行上的哪个位置写入并在那里写入,而不会擦除其他进度。我无法弄清楚这将如何完成,这可能吗?
如果我的问题有其他我没有想到的解决方案(显示每个单独迭代的进度),我会很高兴听到它。
因为这是我第一次在 SO 上提出问题,所以很可能我错过了一些东西;如果是这样,请随时在下面发表评论。
编辑
收到这个答案后,我想我应该分享一下我是如何使用它来解决我的问题的,因为我没有完全按照答案中的方式使用它,以防其他人遇到同样的问题。
这是一个与我的程序结构基本相同的小测试程序,利用parfor_progress
答案中提到的进度条( ):
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 没有...
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 索引与其他两行不同),我仍然会收到错误消息。有人可以解释一下为什么以及如何解决它吗?
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。
matlab - 在 HPC 集群上运行 Matlab 批处理作业
我试图让 Matlab 将许多脚本作为单独的批处理作业执行。每个脚本从 excel 表格中加载一些数据并实现一个神经网络。神经网络在内部使用 parfor 循环进行参数调整。
当我在本地机器上运行批处理作业时,它工作正常。我的 Matlab 代码看起来像
我得到的日记输出是
但是,当我从“本地”配置更改为我的服务器配置时,我得到
我假设问题与我的函数/数据对工作人员的可见性有关,但我已经尝试了批处理函数中我能想到的“FileDependencies”和“PathDependencies”选项的所有组合,但无济于事。
任何帮助将不胜感激,如果我在没有意识到的情况下做了一些非常愚蠢的事情,请提前道歉!
编辑-
错误堆栈如下:
文件“Historical1Step”是我要运行的脚本。第一行(直到代码失败)是:
performance - 用于 Matlab 中的循环和批处理的 parfor 循环
我想在Matlab中使用并行计算工具箱,我搜索了很多以了解这方面的知识,我看到了一个关于parfor
和for
循环比较的常见查询,这parfor
很慢,但是,我得到了用/不开始的常见原因matlabpool/parpool
。
到这里我总结了最后的代码,但是还是太慢了,不知道是什么原因。我很奇怪Mathswork没有很好地记录这个问题。关于特别是启动PCTparfor
以及Batch Processing
启动和停止条件的任何建议,以及pool
有多少关于操作的足够工人
我的代码:
编辑1:
我也看到了嵌套循环的线性化,我检查过,但与普通for
循环相比它也很慢
编辑2:
我想并行运行的代码。
matlab - 如何将数据集划分为 n 个块以减少超级计算机上的排队时间?
我有一个数据集,其中包含大约 2000 个数字图像。我正在使用 MATLAB 执行一些数字图像处理以从图像中提取树木。该脚本当前配置为在n 个内核parfor
上循环处理图像。
挑战:
我可以在拥有大约 10,000 个计算核心的大学管理的超级计算机上获得处理时间。如果我提交整个作业进行处理,我会被放回任务队列中,台式计算机可以在超级计算机上开始处理之前完成作业。支持人员告诉我,将 2000 个文件数据集划分为约 100 个文件作业将显着减少任务队列时间。我可以使用什么方法使用parfor
循环并行执行任务,同时一次提交 100 个文件(2000 个)?
我的脚本结构如下: