Clojure:pmap与处理器核心相比的块数

时间:2016-02-04 16:19:45

标签: clojure parallel-processing pmap

我有一个很大的计算工作要实现,它基本上对大约500 000个系列应用逻辑回归。 由于工作繁重,我将工作分为4个125000系列。

我有一个带有超线程的双核处理器,结果非常快。

但我对此有疑问。块的数量是否应与核心数(或超线程情况下的线程数)相同?我不确定pmap是如何工作的,我读了incanter conf并且仍然不确定因为这个人有2个内核并将工作分成4个线程。

无论如何这是一项相当繁重的工作(使用pmap超过5个小时,没有它的情况会多得多),所以欢迎任何重大优化。

由于

2 个答案:

答案 0 :(得分:2)

在构建自己的clojure.core.reducers之前查看<div class="uib-datepicker" ng-switch="datepickerMode" role="application" ng-keydown="keydown($event)"> <uib-daypicker ng-switch-when="day" tabindex="0"></uib-daypicker> <uib-monthpicker ng-switch-when="month" tabindex="0"></uib-monthpicker> <uib-yearpicker ng-switch-when="year" tabindex="0"></uib-yearpicker> </div>

通过对个人发展的思考是一个重要的项目,因为它建立了对这个问题真正有多难的理解和欣赏。好的解决方案包括像&#34;工作窃取&#34;例如,空闲处理器可以从繁忙的处理器中获取工作。

在现实生活中,最好直接进入内置reducers 的clojure。如果您使用不可变向量作为输入,它们会使这看起来很容易,并且它将自动管理Java的fork/join框架以处理批量大小和工作分配。 This blog post也提供了很多背景知识。

然后,您可能希望使用transducers来减少生成的中间数据结构的数量。

答案 1 :(得分:0)

查看c.c.reducers的提示是一个很好的提示。如果您的工作结果无法按顺序退回,您可能还需要查看Topshelf GitHub repo,这将为您提供一个具有很大灵活性和强大功能的简洁API,并愉快地完成您的工作线程或Hadoop集群,具体取决于您的需求。