在 for detectCores()中,它说:
--这不适合直接用于mclapply的mc.cores参数,也不适合指定makeCluster中的核数。第一是因为它可能返回NA,第二是因为它没有给出允许的核数。
但是,我已经看到了一些示例代码,如下所示:
library(parallel)
k <- 1000
m <- lapply(1:7, function(X) matrix(rnorm(k^2), nrow=k))
cl <- makeCluster(detectCores() - 1, type = "FORK")
test <- p
在默认情况下,Numpy的大多数函数将启用多线程。
例如,如果我运行一个脚本,我就在一个8核英特尔cpu工作站上工作。
import numpy as np
x=np.random.random(1000000)
for i in range(100000):
np.sqrt(x)
linux top将在运行期间显示800%的cpu使用率,如下所示
这意味着numpy自动检测到我的工作站有8个核,np.sqrt自动使用所有8个核来加速计算。
不过,我发现了一个奇怪的虫子。如果我运行一个脚本
import numpy as np
import pandas as pd
df=p
假设我的电脑上有8个核。我已经在RAM中加载了一个2Go数据集,我希望这些工作人员中的每一个只从该数据集中读取我所做的工作:
worker.function(rowstoread, dataset)
{
#read a couple of rows from the dataset (those rows are sent as argument to the worker function)
#process these rows
#return results
}
我想知道为什么这会在每个工作人员级别上产生数据集的副本,因为我的员工只是从数据集中读取数据集。它们没有修改数据集