问题标签 [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 - 我可以在多个 MATLAB 会话上运行脚本而不是并行化脚本吗?
我有一个脚本,可以为 for 循环中的许多参数求解微分方程系统。(迭代是完全独立的,但在每次迭代结束时,都会根据计算结果修改一个大矩阵(mat))。这是代码:(B是一个包含参数的矩阵)
首先我尝试使用parfor,但是因为加速函数(ode45输入)被定义为内联函数,(为了获得更好的性能)我不能这样做。
我可以打开 4 个 MATLAB 会话(我的 CPU 有 4 个内核)并在每个会话中单独运行代码,而不是修改代码以将加速实现为单独的函数,因此,使用 parfor?它的性能是在一个会话上运行的 4 倍吗?(或者它是否提供与并行代码相同的性能?-在并行代码中我无法定义内联函数-)(在 Windows 上)
matlab - 在 MATLAB 中使用 parfor 时出错
我一直在运行一个程序数百次,但最近发现一个输入参数集会导致以下错误:
当我将参数搜索空间的最小值和最大值设置为 min[0;0] 和 max[1.5;1.5] 并将 Population size 设置为 10k(这是差分进化)时,就会发生这种情况。我在任何时候都没有触及其他参数。每当我尝试使用上述参数运行它时,都会出现上述错误。
但是,当我将人口规模降至 1k 时,它会收敛(由于搜索不足而导致答案不正确)。或者,当我使用 10k 的人口规模和我尝试过的任何其他参数集时,它是否可以完美运行并收敛到正确的解决方案?
看起来很奇怪?
我目前正在使用 for 循环而不是 parfor 循环(并且 matlabpool 已关闭)重新运行问题参数集,以查看它是否运行得更好。不幸的是,这非常耗时,所以我暂时不知道结果。
同时,任何人都可以解释导致此错误的原因吗?和/或告诉我如何调试并行代码?
只是为了添加代码在我使用 for 而不是 parfor 时使用流氓参数集运行良好!所以我真的需要在并行环境中找到某种调试方法,以便我可以隔离和修复这个错误。使用 for 而不是 parfor 太慢了!
matlab - Matlab中的Parfor
我正在尝试将此循环作为 parfor 循环运行:
Matlab给我以下错误:
第 18 行如下:
我不明白为什么这不应该是可能的。相关性的最终值不取决于循环执行的顺序,而仅取决于 dts 和检测器。我在文档中找到了类似的示例,它们可以正常工作。
为什么 Matlab 不能执行此代码,我该如何解决?
matlab - 在 matlab r2012a 中使用 qsub 提交作业
我正在运行一个代码,其中包含一个循环,我在其中拆分任务并使用qsub作为不同的作业发送它。例如,我打电话给:
我的交叉有效函数如下:
但是在我运行我的 searchweights 函数之后,qsub 命令似乎根本没有运行,即它没有进入“crossvalid”函数。它在错误文件中给出了这个错误:/data5/natraj/matlab2012a/bin/matlab: No match。
*(/data5/natraj/matlab2012a/bin/matlab 是我的 matlab 可执行文件)
我没有得到真正导致此错误的原因,我该如何排除?
操作系统是Linux。
编辑:问题似乎出在 qsub 上。当我使用 parfor 运行相同的 for 循环时,它正在运行。
matlab - Matlab - 如何转换此代码以便它可以使用 parfor 运行?
我在 Matlab 中有以下代码(当然是简化的,但这说明了问题的根源),以前使用for
过;我想将其更改为使用parfor
:
Matlab 抱怨说Valid indices for 'isForeground' are restricted in PARFOR loops
。有没有办法解决这个问题?我想只保存所有data
输出,然后运行一个单独的传统for
循环,我将在其中执行该isForeground
部分,但问题是它X
非常大,保存所有数据输出将非常占用内存。
还有另一种方法吗?
multithreading - 在matlab中对parfor不太严格的替代方案?
我的代码在结构上类似于 Matlab 中的以下代码:
它还有更多内容,但基本结构如上所述。X
可以变得非常大。我试图让这段代码并行运行,因为运行expensive_function()
需要很长时间。
问题是 Matlab 不允许我更改for
为,parfor
因为它不喜欢我在循环中更新最佳配置。
到目前为止,我所做的是:
就运行所需的时间而言,这更好;但是,对于大型输入,它会占用大量内存,因为始终保存所有配置。另一个问题是使用parfor
迫使我始终提供0
最佳配置,即使可能知道更好的配置。
Matlab 是否提供了更好的方法来做到这一点?
基本上,如果我不必使用 Matlab 并且可以自己管理线程,我会有一个中心线程,它为工人提供工作(即让他们运行expensive_function(i)
),一旦工人返回,查看它产生的数据并进行比较它是迄今为止最好的,并相应地更新它。无需保存所有配置,这似乎是唯一可行的方法parfor
。
有没有办法在 Matlab 中完成上述操作?
matlab - 使用 parallel_function 时出错(matlabpool 和 parfor)
我想读取大量文件,处理每个文件并将每个文件的结果保存在一个.mat
文件中。每个文件的处理都是独立于其他文件的,所以我想尝试使用parfor
. 我编写了以下 Matlab 脚本文件:
当我尝试在我的计算机上运行它时,Matlab 池被初始化(connected to 5 workers
),但随后出现以下错误消息:
你知道问题可能出在哪里吗?
matlab - 如果在 parfor 外部或内部访问,向量值会有所不同
我创建了这个测试 Matlab 脚本文件:
当我运行它时,我始终得到以下输出:
块内打印看似随机fprintf
的parfor
一组数字,但它们始终相同(112、111、107、117、115)。知道为什么会这样吗?
更新
有趣的是,这只有在我从命令行运行脚本时才会发生:
如果我首先打开一个 Matlab 会话并在parfortest
那里运行,那么数字会正确打印。
matlab - MATLAB:如何在 parfor 中设置随机种子以产生与串行相同的结果?
我设置了以下最小示例:
这将生成 10 个随机数并将它们存储在t
. 它总是会可靠地产生相同的随机数,因为我rng
在 for 循环中设置了种子。
如果我现在换成for
,parfor
我会得到不同的结果!尽管它们也将始终是可重现的。
我想用 parfor 加速我的代码,并且仍然获得与 for 完全相同的随机数...
matlab - 跨不同 PBS 作业的随机种子
我正在尝试在 Matlab 中创建随机数,这在多个 PBS 作业中会有所不同(我正在使用作业数组)。每个 Matlab 作业都使用一个并行 parfor 循环,其中生成随机数,如下所示:
然而,当我绘制我的结果时,我发现来自不同工作的结果并不是完全随机的 - 我无法量化它,例如说数字完全相同,因为我的结果是随机数的函数,但它是正确的绘制它时。我尝试使用进程 ID 和/或时钟初始化每个作业中的随机种子:
但这并没有解决问题。在使用 shuffleSeed(基于时钟)之前,我还尝试在每个作业中暂停不同的秒数。
所有这一切让我觉得 parfor 在某种程度上弄乱了随机种子 - 如果 parfor 需要确保您在 parfor 的不同迭代中获得不同的随机数,这是有道理的。
我的问题是,真的是这样吗?我怎样才能解决它并在不同的 PBS 工作中获得随机性?
编辑运行 4 个作业,每个作业使用 parfor 和 2 个工人,我验证虽然每个作业都有它自己的种子(设置在 parfor 之外),但生成的数字在作业之间是相同的(不是跨 parfor 的迭代 - 由 Matlab 处理) .
编辑 2尝试@Sam Roberts 的建议,我使用以下代码:
但在对上述脚本的不同调用中,我仍然得到相同的数字。