问题标签 [parallel-for]

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 投票
2 回答
1080 浏览

c++ - concurrent_vector 在 parallel_for ( PPL ) 中不起作用

下面有一个示例工作代码(parallel_for 使用并行模式库( ppl ))。这里的主要问题是sqr < concurrent_vector > 存储的值在每次执行中都会发生变化,但它不应该如此!

我使用 < concurrent_vector > 进行随机访问,为什么它不起作用?

0 投票
1 回答
993 浏览

c++ - CUDA 中的三重 For 循环

如何在 CUDA 中编写以下 C++ 表达式?第一个循环很容易,但之后呢?(我把我的启动内核)

启动内核

C++ 3 循环表达式

0 投票
1 回答
748 浏览

opencv - 线程数较少的 TBB parallel_for

我使用 opencv 人脸检测器编写了一个多视图人脸检测代码。我在一张图像上运行五个检测器(针对不同的姿势角度进行了训练),并采用它们的权重来检测图像中的人脸。我使用 TBB parallel_for 使代码并行,但它仅将性能提高了 1.7 倍。我想问有没有更好的方法来并行运行五个检测器?

我在一个 16 核的集群上运行我的代码。我认为线程数(在我的情况下是 5 个)太少而无法利用全部功能。

有什么建议么?

谢谢,

0 投票
8 回答
4769 浏览

c++ - 并行化 for 循环不会带来性能提升

我有一个将拜耳图像通道转换为 RGB 的算法。在我的实现中,我有一个嵌套for循环,它遍历拜耳通道,从拜耳索引计算 rgb 索引,然后从拜耳通道设置该像素的值。这里要注意的主要事情是每个像素都可以独立于其他像素进行计算(不依赖于先前的计算),因此该算法是并行化的自然候选者。然而,计算确实依赖于所有线程将同时访问但不会改变的一些预设数组。

但是,当我尝试将主要for与 MS并行化时cuncurrency::parallel_for,性能并没有得到任何提升。事实上,对于在 4 核 CPU 上运行的大小为 3264X2540 的输入,非并行版本的运行时间约为 34 毫秒,并行版本的运行时间约为 69 毫秒(平均超过 10 次运行)。我确认该操作确实是并行化的(为该任务创建了 3 个新线程)。

使用英特尔的编译器tbb::parallel_for给出了接近准确的结果。作为比较,我从实现的算法开始,C#其中我还使用了parallel_for循环,在那里我遇到了接近 X4 的性能提升(我选择了这个算法,C++因为C++即使使用单核,这个特定任务也更快)。

有什么想法阻止我的代码很好地并行化吗?

我的代码:

0 投票
1 回答
5481 浏览

c++ - 使用parallel_for时出现c ++错误

我正在尝试使用parallel_for,但出现错误,代码为:

错误是:

IntelliSense:没有重载函数“parallel_for”的实例与参数列表匹配>参数类型为:(size_t, int, lambda []void (size_t i)->void

这只是一个例子,我必须在更大的项目中使用它,但首先我想了解如何正确使用它。

*编辑*

我将代码更改为:

但我仍然得到恼人的错误:IntelliSense:没有重载函数“parallel_for”的实例与参数列表参数类型匹配:(size_t,int,lambda []void(size_t i)->void)

0 投票
0 回答
477 浏览

c# - 画线并行for循环

我想加快线条的绘制速度。为什么并行 for 循环不起作用?它不画任何东西。

我也对如何加快速度的其他想法持开放态度。

我编辑了增量 for 循环的代码。虽然我在绘图过程中得到“SharpDX.Direct2D1.dll 中发生'System.AccessViolationException'类型的第一次机会异常”?livePoints 是一个简单的列表。

一些代码:

循环标准:

并行for循环:

0 投票
2 回答
1522 浏览

c# - 将 for 循环转换为 Task.Parallel.For

我有一个程序bool IsExistImage(int i)。该过程的任务是检测图像并返回布尔值(无论它是否存在)。

我有一个 100 多页的 PDF,我通过该方法拆分并仅发送文件名。文件名实际上是主要 PDF 文件的页码。像 1,2,3,...,125,..

检测到图像后,我的方法正确保存了页面列表。为此,我使用了以下代码:

这个过程运行了1个多小时(显然是isExistImage()方法的内部工作。)。我可以向您保证,在方法范围之外没有任何对象/变量是全局的。

所以,为了缩短时间,我使用了 Task.Parallel For 循环。这是我所做的:

但这不能正常工作。有时图像检测是正确的。但大多数时候它是错误的。当我使用非并行 for 循环时,它总是正确的。

我不明白这里有什么问题。我应该在这里申请什么。有什么我缺少的技术吗?

0 投票
1 回答
1162 浏览

c++ - 用 OpenMP 替换 TBB parallel_for

我试图想出一个使用 OpenMP的英特尔 TBBparallel_for循环的等效替代品。tbb::blocked_range在网上搜索,我只找到提到另一个人在做类似的事情;提交给 Open Cascade 项目的补丁,其中 TBB 循环如此出现(但未使用 tbb::blocked_range):

OpenMP 等价物是:

这是我要替换的 TBB 循环:

它使用DoStuff类来执行工作:

基于this reference的理解是,TBB会将阻塞范围划分为更小的子集,并为每个线程提供一个循环范围。因为每个线程都会有自己的DoStuff类,它有一堆引用和指针,这意味着线程本质上是共享这些资源的。

这是我在 OpenMP 中提出的等效替代方案:

由于我无法控制的情况(这只是跨越 +5 台计算机的更大系统中的一个组件),使用调试器单步执行代码以查看到底发生了什么......不太可能。我正在努力进行远程调试,但看起来并不是很有希望。我所知道的是,上面的 OpenMP 代码在某种程度上做的事情与 TBB 不同,并且在为每个索引调用 PerformWork 后没有获得预期的结果。

鉴于上述信息,是否有人对为什么 OpenMP 和 TBB 代码在功能上不等效有任何想法?

0 投票
1 回答
711 浏览

tbb - 如何使用 tbb::parallel_invoke 并行运行大量任务?

我的问题类似于生产者消费者问题。例如,我需要并行运行 999 个生产者和 1 个消费者。基本上所有 999 个生产者都做同样的任务。

0 投票
2 回答
394 浏览

c - OpenMP Parallel 用于 C 中的调度

我想运行一个并行的计划(例如静态/动态/引导)for循环,其中每个线程都有自己的一组变量,基于它们的线程ID。我知道在并行编译指示中声明的任何变量都是私有的,但我不想在 for 循环的每次迭代中重新声明变量。

在我的具体情况下,每当一组生成坐标位于圆的内部或外部时,我都会计算以近似 pi。我正在使用 erand48(int[3] seed) 在每个线程中生成这些坐标,并通过为每个线程提供一组不同的“seed”值,我将获得更多种类的数字用于近似值(也是此模拟的要求)。

这是尽我所能代表我正在尝试做的事情。我希望 'this_result'、'tid' 和 'seed' 的值具有私有范围。