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

c# - Parallel for 不做所有记录

我正在处理 +100000 行并实现并行。这可以加快处理速度。

逻辑行为是:100000 条记录,其中有 85000 个 groupId,这意味着 MyItems 应该包含 85000 条记录。

事实并非如此...我最终得到的金额与 85000 不同

过程如下:

从数据库中获取所有值

获取整数数组中的所有 ID(不是行 ID,而是 groupId)

处理 groupId 的

有什么想法吗?

0 投票
1 回答
197 浏览

c# - 如何解释parallel.for(c#)的这种奇怪行为

我的神经网络库有问题。它使用多线程来加快计算。但是在运行大约 30-60 秒后,我的程序不再使用 100% 的 i7 3610QM 4cores 8threads。

基本上我的处理看起来像(带有伪代码的c#)

其中区域是层的要处理的预先计算的神经元区域列表。每个区域的大小与当前层的 1/N 相同,因此任务大小相同,以最大限度地减少其他线程需要等待最长任务完成的机会。

就像我说的,这种处理方案仅在短时间内消耗了我的处理器的 100%,然后下降到大约 80-85%。在我的情况下,我将 N 设置为 Environment.ProcessorsCount (= 8);

如果有人愿意提供帮助,我可以共享整个代码/存储库。

我试图调查并创建了新的控制台项目,并在那里放置了几乎 Parallel.For() 的 Hello World,我根本不知道发生了什么。这可能是 Parallel.For() 的其他问题,但我也希望您解决这个问题。这是代码:

在这段代码中,我不断(while 循环)创建一个任务(n=1),它有一些工作要做(将计数器增加一千次)。据我所知,Parallel.For 阻止执行/等待所有并行调用完成。如果这是真的,它应该做与注释部分相同的工作(提供 n=1)。但是在我的电脑上,这个程序使用了 100% 的 CPU,就像有多个线程在工作一样!这怎么可能?当我切换到注释版本时,程序使用的 CPU 不到 20%,这是我所期望的。请帮助我理解这种行为。

0 投票
1 回答
1546 浏览

c# - Parallel.For 使用 ConcurrentQueue 的列表中的项目 - 这会工作吗?

我有一个List<TaskClass> TaskList项目,我们可以使用 Parallel 循环对其进行迭代。

列表中的项目按特定顺序排序,因为 TaskClass 使用自己的CompareTo(object obj)方法实现 IComparable。因此,我们需要按顺序执行的项目。

请注意,它们不必按顺序完成,只需按顺序开始即可。

因此 TaskList[0] 应该首先启动;然后是 TaskList[1], TaskList[2], ... 但是,我们不关心 TaskList[2] 是先完成还是 TaskList[0]。

这是我想出的快速代码来尝试缓解这种情况:

现在我认为的问题是当 Parallel.For 循环完成时,原始List<TaskClass> TaskList值不会更新为最新值。

实现这一目标的最佳方法是什么?

修改后的代码如下?(标有“//new”的行)

或者有没有人有任何其他想法/建议/改进?

谢谢!

0 投票
1 回答
53 浏览

c# - 使用 Parallel.For 重新实现循环

如何使用 Parallel.For 重新实现下面的循环?

获得更好的性能和速度是目标。

0 投票
3 回答
1092 浏览

c# - Parallel.For 不等待所有迭代

我正在使用遗传算法构建优化程序。我使用 Parallel.For 来减少时间。但它导致了一个与下面的代码相同的问题:

每次我运行上面的程序时,它都会在 0 到 10000000 之间写入一个不同的 j 值。我猜它不会等待所有迭代完成。它传递到下一行。我应该如何解决这个问题?任何帮助将不胜感激。谢谢。

版本:Interlocked.Increment(ref j); 子句解决了意外的结果,但是当我与正常的 for 循环相比时,此操作会导致大约 10 倍的时间。

0 投票
2 回答
740 浏览

c# - 我可以更新 Parallel.For 正在使用的集合吗?

我有一种情况,我正在运行一些任务,每个任务需要几秒钟到几分钟。我也有可能添加更多需要添加到已经运行的并行循环的数据。是否可以更新 Parallel.For 正在使用的当前集合并让它继续迭代它,直到没有更多对象要检索?这是一些显示我的问题的示例代码:

当我运行它时,我得到的结果很简单:

有没有更好的方法来做我想做的事情?

0 投票
3 回答
590 浏览

c# - 在 2 个或 4 个 cpu 内核上使用我的 1 个线程 C# 没有 parallel.for?

我有软件(带有非常大的循环)必须按特定顺序运行,所以我不能使用多线程,我尝试使用 parallel.for,但它产生了很多问题,因为它不能按正确的顺序运行。我正在考虑的唯一解决方案是在 2 个或 4 个 cpu 内核上使用我的 1 个线程。是否可以使用 c# 在超过 1 个 cpu 内核上运行 1 个线程?

0 投票
2 回答
183 浏览

c# - Code Parallel.For 仅适用于调试模式

此代码仅在调试模式下才能正常工作。我不明白出了什么问题。

我试图修改代码,但没有任何进展。如果第一个参数为真,我想将调用函数 newRow 的结果添加到 hashSet。

0 投票
1 回答
196 浏览

c# - 在 Parallel.For 中调用带有输出参数的函数

如何修改带有输出参数的函数的方法#2?方法 #1 和方法 #2 具有相同的功能,但给出不同的结果。我不知道为什么。可能与输出参数或 Mpir.NET 类型或 Parallel.For 中的 HashSet 的调用函数有关。

下面的代码与元组。同样的问题 :(

0 投票
1 回答
229 浏览

c# - StackOverflow 如果使用 Parallel.For

我目前正在尝试编写代码,这将有助于计算为游戏 StarMade 设置的高效反应器。我正在使用递归方法来探索元素的 3d 树并找到所有相关组。例如。组 - 它是一组元素,彼此靠近。在图片上是这样的:

其中 O 什么都不是,X 是反应器(元素)。在这张图片上有 3 组元素。[0,0], [2,0]-[2,1], [0,2]-[1,2] 另一种变体:

这里只有一组,因为所有元素都彼此靠近。这是我的代码:

group - 是集群的简单类,它存储有关此集群中元素计数和此集群边界框的数据。reactorsChecked - 是简单的 bool[,,] 数组,用于存储我们检查过的元素信息,以避免双打 reactor - 简单的 bool[,,] 随机元素数组。首先我将随机值插入到 reactors 数组中,然后调用 CheckGroup(x,y,z,null)。如果反应器阵列尺寸小于 25x25x25,那么一切正常。在单线程中,数组的大小可以是 100x100x100,一切都会好的。但是,如果我尝试使用 Parallel.For,那么在近 9000 次递归之后我得到了 StackOverflow ......这是完整的代码:

所以主要问题 - 是否可以在 Parallel.For 中避免 stackOverflow,或者将其重写为迭代循环?

Parallel.For 使用默认的 stackSize 值,即使您将使用

它将使用默认值...

我不喜欢这样的变体:

因为我必须管理所有线程,等待所有线程完成,所以它使代码非常复杂......可能有更简单的事情吗?