问题标签 [parallel-collections]

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 回答
947 浏览

scala - 使用 Scala 演员的阶乘计算

如何使用 Scala 演员计算阶乘?

与例如相比,它是否会证明更省时

非常感谢。

0 投票
1 回答
222 浏览

scala - Scala ParArray 模式匹配

考虑

但是,在模式匹配b上,例如如下,

因此如何进行模式匹配ParArray

提前致谢。

0 投票
1 回答
58 浏览

scala - Scala不同的并行结构

我在 Scala 和简单集合上测试了并行集合,这是我的代码:

并行采集速度提高约 3 倍。我在 Scala 中还有什么其他选择可以让它更快地并行运行,我很乐意测试它们并将结果放在这里。

0 投票
1 回答
1023 浏览

multithreading - 通过 Scala 并行集合更新数组

我有这个 HashMap 数组定义如下

现在,我有 300 个元素的并行集合

我现在在上面定义的foreach循环中运行计算密集型任务。columnArray计算完成后,我希望每个线程更新distinctElementsDefinitionMap数组的特定条目。每个线程只会更新特定的索引值,对执行它的线程来说是唯一的。我想知道这个数组条目的更新是否安全,多个线程可能同时写入它?如果没有,有没有synchronized办法做到这一点,所以它是线程安全的?谢谢你!

更新:看来这确实不是安全的方法。我得到了java.util.ConcurrentModificationException 关于如何在使用并行集合时避免这种情况的任何提示。

0 投票
1 回答
104 浏览

scala - 将算术运算映射到 Scala 集合并对结果求和

这是我昨天与我的学习小组分享的一些代码:https ://gist.github.com/natemurthy/019e49e6f5f0d1be8719 。编译后,我使用以下堆参数运行 map.scala:

并获得以下 4 次单独测试的结果:

我试图弄清楚为什么这些结果在不同的集合类型中会有所不同,更重要的是,为什么对于应该直观地更快评估的集合来说性能似乎更差。很想听听您对这些结果的见解。我还尝试在Breeze和 Saddle 上执行这些操作(在相同的测试中表现更好),但我想看看我可以将内置的 Scala Collections API 推到多远。

这些测试在华硕 Zenbook UX31A、英特尔酷睿 i7 3517U 1.9 GHz 双核超线程、4 GB RAM 和 Ubuntu 12.04 桌面上运行。将 Scala 2.11.1 与 JDK 1.7 一起使用

0 投票
1 回答
311 浏览

scala - 如何重用并行数组?

我正在尝试使用 Scala 的并行集合来并行调度一些计算。因为有很多输入数据,所以我使用可变数组来存储数据以避免 GC 问题。这是我最初采用的方法:

鉴于 aParallelArray的底层数组可以安全地重用(即,修改并用作 another 的底层结构ParallelArray),上面的片段应该可以按预期工作。但是,运行时它会因内存错误而崩溃:

这表面上与并行集合直接使用创建它的数组有关;也许它在超出范围时试图释放这个数组。在任何情况下,由于内存限制,不能为每个循环创建一个新数组。var parInputData = inputData.par显式地在循环内部和外部创建一个while循环会导致相同的双释放错误。

我不能简单地使inputData自己成为一个并行集合,因为它需要按顺序填充(尝试对并行版本进行分配,我意识到分配不是按顺序执行的)。使用 aVector作为外部数据结构似乎适用于相对较小的输入大小(< 1000000 个输入数组),但会导致大输入的 GC 开销异常。

我最终采用的方法涉及制作Vector[Vector[Array[Int]]], 外部向量的长度等于正在使用的并行线程的数量。然后我用一大块输入数据数组手动填充每个子Vector,然后在外部向量上进行并行映射。

最后一种方法是可行的,但是手动将输入分成块并将这些块添加到另一个深度的并行集合中是很乏味的。有没有办法让 Scala 重用可变数组进行并行操作?

编辑:将上面的并行向量解决方案与使用同步队列的手动并行化解决方案进行基准比较,表明并行向量要慢约 50%。我想知道这是否只是更好抽象的开销,或者是否可以通过使用并行数组而不是Vectors 来减少这种差距;Vector这将导致使用数组而不是s 的另一个好处。

0 投票
1 回答
163 浏览

list - Scala - 对 par 序列进行排序

toList排序par序列时如何摆脱?

0 投票
3 回答
1255 浏览

scala - Scala,等待在并行集合上执行 foreach

我有如下代码

我想按顺序执行第一部分和第二部分代码。目前 for 循环在所有 Vertex 都添加到 g 之前运行。在代码 +(加号)中定义将 Vertex 的新实例添加到 MutableList。

我是scala的新手,请帮忙

0 投票
2 回答
12169 浏览

garbage-collection - 为什么 JVM 计算的 PS Survivor Space 大小对于并行收集器来说太小了

我正在将JDK1.6.0_16JVM 用于托管在Linux Intel procesor 80 cores machine.

在启动 Java 应用程序时,我 -Xms2048m -Xmx8000m在 JVM 选项中只配置了两个选项(在 java 命令之后)。我看到 PS Old Gen 被计算为5.21G和 PS Eden 被计算2.6G但 PS Survivor 空间是25MB.

我在生产中使用完全相同的 JVM,并且 PS Survivor Space 大小显示为888MB. 我在 java 任务控制内存选项卡中看到这些大小。缓存大小(/proc/cpuinfo 的输出)显示24656在 UAT 和生产框中。

不要认为这会对 JVM 产生任何影响,但仍然提到在启动 JVM 时机器上的负载非常低。

您能否告知 JVM 考虑哪些参数来计算 PS Survivor Space 大小?

0 投票
2 回答
111 浏览

scala - 如何定义一个同时接受 Seq[T] 和 ParSeq[T] 作为参数的函数?

在许多情况下,我想将相同的filterormap函数应用于SeqorParSeq集合。但是我不想写两次代码。

和上面的代码一样,对于一个Seq[String]我需要申请fun的,我要重新重写一遍,内容完全一样。我怎样才能避免它?