我正在构建一台办公室PC,其中最重要的任务是在R中运行蒙特卡罗马尔可夫链(MCMC)估计.显然,这是一项CPU密集型任务,而R仅限于单核.
鉴于预算有限,哪个CPU更适合任务,AMD还是英特尔?特别是,我正在研究英特尔酷睿i3 4130,其中两个内核时钟频率为3.4 Ghz,AMD FX-6300,六个内核时钟频率为3.5 Ghz,解锁倍频器.鉴于R的局限性,在重型计算任务中哪一个在性能方面更好?
谢谢.
编辑:我能在这个问题上找到的唯一信息就是这个FAQ项目:
2.23为什么R从不使用超过50%的CPU?这是对Windows令人困惑的任务管理器的误读.R的计算是单线程的,因此它不能使用多个CPU.任务管理器显示的不是CPU中的使用情况,而是使用占CPU表观总数的百分比.我们说"明显",因为它处理所谓的"超线程"CPU,例如每个核心两个CPU,而大多数现代CPU至少有两个核心.
我是否理解如果R只能使用单个CPU线程,那么英特尔的超线程无关紧要,因此AMD更高的时钟将具有优势?
EDIT2:这里有几个有点相关的基准测试,虽然他们不比较CPU,只是有和没有超线程的速度.
编辑3:这个主题是关于同样的问题,尽管用不同的术语表达.虽然没有太大的决议.
EDIT4:我找到了答案,但由于我怀疑这个问题会重新开放,我会在这里引用它.请参阅我对以下主要帖子的评论.
正确答案是AMD(给出这个特殊选择).如果存在计算困难,例如需要运行非常长的MCMC链,则可以使用JAGS或BUGS与R包,例如BRugs,R2WinBUGS,runjags和rjags.在这种情况下,可以在不同的核心上为相同的参数运行多个链,并在事后组合它们.这个视频解释了它.内核越多,链越多,因此具有六个内核的AMD优于具有4个(超线程)内核的Intel.
例如,在六核AMD上我将同时运行六个链:
library(R2WinBUGS)
re.sim<-bugs(data, inits, parameters, "model.bug", n.chains=6, n.iter=100000,
n.burnin=3000, n.thin=2, debug=F, program="openbugs")
Run Code Online (Sandbox Code Playgroud)
在Intel CPU上,我可以同时运行四个链,并且时钟频率较低.值得注意的是,runjags库允许并行执行,包括多机群集.
我认为那些将这篇文章标记为偏离主题的人认为它是一个非常广泛的问题,而事实上它是一个非常狭隘的问题,需要R的知识,软件R接口,MCMC是什么和做什么,以及如何所有这有关于uzilizing CPU power的结合.我提供的答案根本不是主观的,它与编写复杂的贝叶斯模型直接相关.投票重新开放,标记为偏离主题可能是由于对MCMC所要求的无知,而是集中在"AMD vs"上英特尔"红鲱鱼.