问题标签 [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 回答
1516 浏览

multithreading - 在 MATLAB 中创建一个连续音调,其频率根据用户输入实时变化

我目前正在 MATLAB 中开发一个图形程序,该程序接受输入并使用此输入将一个点映射到 xy 空间。但是,程序还应该输出一个连续音调,其频率根据点的位置而变化。

我能够完成音调生成,但由于程序的性质,无法让音调连续工作。(音调生成之间的代码)我想我可以使用 parfor 循环来解决这个问题,该循环的代码改变循环的一次迭代中的频率,以及在另一个循环中生成音调但似乎无法得到它的代码,原因如下错误:

警告:临时变量频率将在 parfor 循环的每次迭代开始时被清除。在循环之前分配给它的任何值都将丢失。如果在 parfor 循环中分配之前使用频率,则会发生运行时错误。请参阅 MATLAB 中的并行 for 循环,“临时变量”。

在 multiThreadingtest 5 使用 multiThreadingtest 时出错(第 5 行)引用已清除的可变频率。

原因:参考已清除的可变频率。

我的代码:

0 投票
2 回答
6462 浏览

matlab - 没有清除命令的 MATLAB 释放内存

我需要在没有 clear 命令的情况下使用 Matlab 释放内存(我在并行工具箱的 parfor 循环中,我不能调用 clear);例如,我读到了,而不是

我可以设置

问题是:使用'= []'我释放'v'的内存或者只是将v设置为一个空值并且之前的内存仍然被分配然后不可用?谢谢

0 投票
1 回答
2269 浏览

matlab - MATLAB PARFOR: memory management: shared memory or not?

I don't understand how parfor cicle in Matlab parallel computing toolbox works with the memory: I read it share the memory between all workers (then I think every worker (core) can access the memory location of interest without making a local copy) but others references tell me that every core makes a local copy of memory (variables etc.) where it works! what is the answer?Parfor has shared memory system and not makes copies of data or every worker has a local copy of data? Thanks

0 投票
1 回答
700 浏览

matlab - matlab parfor与arrayfun(切片变量)

正如标题所说,我想要一个 parfor 循环,里面使用 arrayfun。
我为该问题创建了一个最小的工作示例:
在名为的文件中包含以下几行thisparfortest.m

该命令mcc('-e','-v','thisparfortest')导致

但正如建议的那样mlint thisparfortest(也checkcode)返回没有问题 - 就像在编辑器中一样。
该循环可以完成并编译为 for 循环。
请不要询问这些命令的含义——它们只是为 mwe 准备的。
我认为,这应该报告给 mathworks - 还是我做错了什么?
一些补充:运行时

只有for循环才能工作,但是当使用显示的版本时parfor会导致

这不应该被 mlint/checkcode 捕获吗?这发生在没有编译器的情况下。

0 投票
1 回答
783 浏览

multithreading - Matlab在使用codegen和parfor时什么时候选择线程

我似乎是少数使用 Matlab 编码器(codegen 命令)来获得加速的人之一,从在线讨论或帮助如此之少的事实来看。在某些情况下,我从中获得了令人难以置信的加速。我从未见过它记录在案,但是当我使用带有 parfor 循环的 Matlab 脚本中的 codegen 制作 MEX 文件时,它通常会将生成的 MEX 线程化。函数中的 Parfor 会产生多个进程,这通常比线程效率低(我通过在 linux 中观察 top 并在 Matlab 函数中看到多个 100% 进程来推断所有这些,但在运行转换后的 MEX 时只有一个,例如 1000% 进程)。我现在正在研究一个我可以真正使用加速的案例,但我没有看到 MEX 中使用了多个线程的证据,即使 parfor 在基本函数中工作。

0 投票
1 回答
563 浏览

matlab - 使用 parfor 并行化嵌套循环以计算对称距离矩阵

我正在尝试计算两个结构对象之间的成对距离。这个距离是对称的。我有大约 N = 8000,这样的对象在一个数组中。

所以我只需要计算 N * (N+1)/2 距离。我怎样才能并行化这个计算,因为每个计算都是独立的?

在这里,我的对象存储在数组 X 中,我想将距离存储在大小为 N*(N+1)/2 的数组 A 中。BDHMM() 是一个返回两个对象之间距离的函数。

我尝试了以下 Matlab 代码。

我收到以下错误:

请帮忙。

0 投票
1 回答
354 浏览

matlab - Matlab remoteParallelFunction 和 Mex 文件错误

我正在尝试验证默认的本地 matlab 并行配置,但出现以下错误:

验证详情

配置:“本地”类型:本地

-------------------------------------- 阶段:查找资源

状态:通过说明:验证通过

命令行输出:(无)


-------------------------------------- 阶段:分布式作业

状态:通过说明:验证通过

命令行输出:(无)


-------------------------------------- 阶段:并行作业

状态:通过说明:验证通过

命令行输出:(无)


-------------------------------------- 舞台:Matlabpool

状态:失败说明:尝试在 matlabpool 中运行代码时遇到问题。

命令行输出:使用“本地”配置启动 matlabpool ...连接到 8 个实验室。

错误报告:在 598 处使用 ==> 并行函数时出错 remoteParallelFunction 远程执行错误:RUNTIME_ERROR

调试日志:(无)


如果我真的尝试运行代码,我会收到以下错误:

我在 gnome 2.28.2 linux“服务器”上运行 matlab 2010a(实际上只是一台具有 400Gigs 内存和 32 个用于密集计算的处理器的计算机)。我正在运行的代码只是我之前在本地机器上运行过的几个 parfor 循环。我实际上是通过vcn在本地服务器计算机上运行程序。谁能提出问题可能是什么?

0 投票
1 回答
518 浏览

matlab - 脚本崩溃后无法删除某些文件

我运行一个生成图像的 MATLAB 脚本,并将它们保存到某个文件夹中。当代码崩溃时,除非我重新启动 MATLAB,否则我无法删除该文件夹中的一些图像。

我可以在不重新启动 MATLAB 程序的情况下解决这个问题吗?

代码:

0 投票
0 回答
213 浏览

matlab - 非常耗时的代码

如果您可以帮助我对其执行时间进行任何改进,我将发布这部分代码。

我尝试验证代码并使用 Matlab 编译器,但没有重要的改进。

代码被调用数百万次(一次执行需要数小时,I5 3.5GH 和 Ram=4GH):







上面的binCross函数被 profiler 认为是最复杂的。

先感谢您

0 投票
0 回答
496 浏览

matlab - 当一个参数保持不变时使 knnsearch 快速

我有以下问题。

让我解释一下上面的代码。矩阵 C 是一个巨大的矩阵(300000 x 1984)C(selectedIndices,:)是 C 的 100 个元素的子集,具体取决于 的值i。这意味着: 对于i=1,选择 C ​​的前 100 个点,对于i==2C(101:200,:)被选择。如您所见,第二个参数保持不变。

有什么办法可以让这项工作更快。我尝试了以下方法:

  • 发送更大的块selectedIndices而不是只发送 100 个。这增加了一点我不担心的后期处理。但这不起作用,因为它需要相同的时间。例如,如果我一次发送 100 个 C 点,则需要 60 秒。如果我发送 500,则后处理需要 380 秒。

  • 尝试使用parforas:不同的集合selectedIndices将并行执行。它不起作用,因为C可能已经创建了两个大矩阵副本(不确定 parfor 是如何工作的),但我确信计算机会变得非常慢,从而否定 parfor 的优势。

  • 还没有尝试过:将两个参数分成更小的块并将其发送到 parfor。你认为这会有什么不同吗?

我对任何建议持开放态度,即如果您觉得以某种不同的方式制动矩阵可能会加快计算速度,请提出建议。因为,最后我只关心从 C 中的每个点的一组点(这里每组有 100 个点)中找到最近的点。