- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如标题所说:@parallel
之间究竟有什么区别?和 pmap
?我的意思不是明显的一个是循环的宏,另一个适用于函数,我的意思是它们的实现究竟有什么不同,我应该如何使用这些知识在它们之间进行选择?
我问的原因是我写的很多应用程序都可以使用任何一种结构:我可以编写一个循环并用 @parallel
计算一些东西。 ,或者将循环中的内容包装到一个函数中并调用 pmap
在那。我一直遵循使用 @parallel
的建议对于快速评估的事物和 pmap
对于每个任务需要更长的时间(如文档中所述)的调用,但我觉得如果我对它在做什么有更好的了解,我将能够做出更好的选择。
例如:@parallel
在评估之前划分工作?我注意到,如果我运行一个并行循环,其中每个内部调用都花费随机时间,@parallel
可能需要很长时间,因为最后我只有很少的进程仍在工作。 pmap
在相同的微测试中似乎没有这个:是 pmap
根据需要重新分配工作?
其他类似的问题都是因为我不知道究竟是怎么回事pmap
不同于 @parallel
.
最佳答案
@parallel
将把要完成的工作分配给可用的 worker 马上 .注释在 ?@parallel
我们得到 The specified range is partitioned ... across all workers.
pmap
相比之下,将启动每个 worker 的工作。一旦一个 worker 完成了一项工作,它就会给它下一个可用的工作。例如,它类似于 Python 中常见的基于队列的多处理。因此,这不是“重新分配”工作的情况,而是首先只在正确的时间将其分发给正确的 worker 。
我编写了以下示例,我相信它说明了这一点。在这个有点愚蠢的例子中,我们有两个 worker ,其中一个慢,另一个快两倍。理想情况下,我们希望给速度快的工作人员提供两倍于慢工作人员的工作量。 (或者,更现实的是,我们会有快速和慢速的工作,但原理是完全一样的)。 pmap
将完成此操作,但是 @parallel
惯于。
对于每个测试,我初始化以下内容:
addprocs(2)
@everywhere begin
function parallel_func(idx)
workernum = myid() - 1
sleep(workernum)
println("job $idx")
end
end
@parallel
测试,我运行以下命令:
@parallel for idx = 1:12
parallel_func(idx)
end
julia> From worker 2: job 1
From worker 3: job 7
From worker 2: job 2
From worker 2: job 3
From worker 3: job 8
From worker 2: job 4
From worker 2: job 5
From worker 3: job 9
From worker 2: job 6
From worker 3: job 10
From worker 3: job 11
From worker 3: job 12
pmap
测试,我运行以下命令:
pmap(parallel_func, 1:12)
From worker 2: job 1
From worker 3: job 2
From worker 2: job 3
From worker 2: job 5
From worker 3: job 4
From worker 2: job 6
From worker 2: job 8
From worker 3: job 7
From worker 2: job 9
From worker 2: job 11
From worker 3: job 10
From worker 2: job 12
pmap
是一个艰巨的任务高手——从每个人的能力。
@parallel
不会造成问题。对于更大或更复杂的工作,
pmap
有优势。
关于parallel-processing - @parallel 和 pmap 到底有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37846838/
user=> (.. Runtime getRuntime availableProcessors) 2 并评估此示例:http://clojuredocs.org/clojure_core/cloj
我正在尝试确定如何使用应用于不同长度列表的 dplyr pmap 函数。 下面是我想做的一个非常简单的例子 list_1 <- list(1, 2, 3) list_2 <- list(1, 2) l
我正在尝试使用 clojure pantomime 库从大量 tif 文档(以及其他文档)中提取/ocr 文本。 我的计划是使用 pmap 将映射应用于一系列输入数据(来自 postgres 数据库)
我正在尝试将一个函数映射到包含在使用 purrr::pmap 的数据框行。我有一个 reprex下面: library(tidyverse) # Create dummy data e [[1]]
我正在尝试确定如何使用应用于不同长度列表的 dplyr pmap 函数。 下面是我想做的一个非常简单的例子 list_1 <- list(1, 2, 3) list_2 <- list(1, 2) l
我为线程编写了一个简单的 C 程序,其进程图如下所示: anirudh@anirudh-Aspire-5920:~/Documents/DUMP$ pmap 3232 3232: ./a.out
我们正在发生某种巨大的内存泄漏,我们进程的驻留内存呈指数级增长。 pmap -x 显示如下内容: ... 00007f4ad85cd000 10530276 9129608 9129608 rw---
我只是使用 pmap 对 clojure 进行一些性能测试,我希望能够控制与 pmap 一起使用的线程数。我知道在使用 OpenMP 之类的东西时,可以使用 omp_set_num_threads()
我需要在 pmap 变体的帮助下执行一些按行的操作,但是在将参数列表(即“.l”参数)传递给嵌套在另一个函数中的函数。 我尝试了各种方法,包括传递参数名称和点语法,但都无济于事。我需要知道是否有办法做
当我有一个包含两个输入列(a 和 b)的列表列数据框 (df1) 时,我可以使用 map2 获取一个新列 d1 % slice(1:10) %>% group_by(cyl) %>% nest(.ke
使用 *apply 进行函数式编程或 purrr是我的面包和黄油但我不明白如何pmap处理函数参数。 我可以用他们对应的变量名 (给定一个数据框作为输入)并且不必担心顺序。 我可以更具体地使用它们作为
我需要发出200个左右的HTTP请求。我希望它们并行运行或成批运行,而且我不确定在Clojure中从何处开始执行此操作。 pmap似乎具有我想要的效果,例如,使用http.async.client:
我试图理解为什么这段代码有效: tmp % pmap(function(this, that, other) paste(this, that, other)) ...但以下代码会产生“未使用的参数”
我想知道如何使用 pmap()函数,如果我有超过 3 个输入作为参数映射到具有其他默认输入的函数。 这是一个可重现的示例: a=c(5, 100, 900) b=c(1, 2, 3) ablist=l
我有这个数据框,我想单独使用 pmap函数仅过滤所有值为负或正的行。我正在寻找一种简洁的方法来做到这一点,因为我想到了 c(...)但我们只能在函数内部使用它。 可以通过以下代码实现: df %
我正在使用 R purrr:::pmap带三个输入。不清楚如何在公式调用中明确引用这些输入?使用 map2 时,公式调用为 ~ .x + .y .但是使用pmap的时候怎么办? 从 http://r4
我正在尝试计算一个函数,其参数是数据框中列的名称。我需要循环每一行并计算函数。看起来 pmap 是执行此操作的一种巧妙方法,但我被迫指定“..1, ..2,”符号来指示数据框中的列位置。我认为这不是一
我想在传感器中使用 pmap,如果我使用常规 map 编写代码,它工作得很好。但是,如果我使用 pmap 我会得到一个 arity 异常。是否可以在 clojure 中实现此目的,或者我做错了什么?如
我正在尝试设置一个具有多个输入和多个返回值的自定义函数,并在数据框上将此函数与 purrr::map 一起使用。 我的示例数据是: test_data 1 1 2 3
我是 Erlang 新手,因此为了训练,我尝试从头开始实现标准功能。我尝试从 lists 模块创建 map/2 函数的并行实现。但我的实现速度非常慢。如果我在实现中犯了任何主要错误,您能指出我吗:
我是一名优秀的程序员,十分优秀!