我们有一个测试R脚本在PC笔记本电脑上运行大约15秒,在9岁的Mac上运行相同。在运行Windows 2012 R2的多个vmware服务器上,完全相同的测试需要1到15秒到2分钟,具体取决于服务器。因此,为了尽可能多地删除变量,我们创建了一个具有Windows 2012 R2,16GB RAM,8个内核的VM,除了R(没有SQL等)之外没有任何其他内容,并且脚本需要1分40秒才能运行。
我们在每台机器上进行了精确测试。测试脚本从桌面读取CSV文件,然后执行蒙特卡罗模拟,然后将CSV写入桌面。没有网络读/写等。一切都包含在机器上。
有没有人见过这个?我们站起来的VM没有任何东西,但R应该尖叫,它有8个核心,笔记本电脑只有2个,VM有16 GB RAM而笔记本电脑只有8 GB
思想?
更新此示例代码在我的笔记本电脑上运行大约需要14秒(2个内核,12 GB内存),在具有8个内核和16 GB内存的VMWare服务器上运行1分3秒(慢4倍)否则在服务器上运行
注意我不是在问如何优化代码,而是在VM上运行速度慢的原因
# parameters
simulations <- 50000 # number of simulations
perimeter <- 1
# randomly generate a point and check if it is in circle
f_point_in_circle <- function(perimeter=1){
x <- runif(n=1, min=-perimeter, max=perimeter)
y <- runif(n=1, min=-perimeter, max=perimeter)
return(list(x=x,
y=y,
in_circle=x^2 + y^2 <= perimeter^2))
}
# Monte Carlo simulations
set.seed(123)
pi_df <- data.frame(x=rep(NA, simulations),
y=rep(NA, simulations),
in_circle=rep(NA, simulations))
for (i in seq(simulations)){
my_simulation <- f_point_in_circle()
pi_df$in_circle[i] <- my_simulation$in_circle
pi_df$x[i] <- my_simulation$x
pi_df$y[i] <- my_simulation$y
}
my_pi <- 4 * sum(pi_df$in_circle) / nrow(pi_df)
(来自https://blog.alookanalytics.com/2017/04/26/monte-carlo-method-in-r/的代码)
更新
我们在Hyper V VM上运行了精确的原始测试,它的运行速度与物理机一样快。所以它似乎与VMWare ?????
有关