我在R中编写了Gibbs采样器,并决定将其移植到C中以查看它是否会更快。我看过的很多页面都声称C的速度最多可以提高50倍,但是每次使用它时,它的速度仅比R快五到六倍。我的问题是:这是可以预料的还是有一些我不使用的技巧会使我的C代码比这快得多(例如使用向量化如何加快R中的代码)?我基本上采用了代码并将其重写为C语言,用for循环替换了矩阵运算,并使所有变量变为指针。
另外,从R程序员的角度来看,有人知道C的良好资源吗? Matloff有一本很棒的书,叫做《 R编程的艺术》,但它似乎是从已经了解C的人的角度写的。
另外,当我的C代码在Windows的标准R GUI中运行时,屏幕倾向于卡住。它不会崩溃;它不会崩溃。一旦代码运行完毕,它就会解冻,但是这使我无法在GUI中执行任何其他操作。有人知道我能避免这种情况吗?我正在使用.C()调用该函数
最佳答案
许多现有的帖子都有您可以运行的明确示例,例如Darren Wilkinson在他的博客上有几篇文章以不同的语言甚至是在不同的硬件上对此进行了分析(例如,将他的高端笔记本电脑与上网本和Raspberry Pi进行比较)。他的一些职位是
在他的网站上还有更多内容-它们经常比较C,Java,Python等。
现在,我还将其转换为使用Rcpp的版本-参见this blog post。今年夏天,在useR上,我们还在Julia,Python和R/C++之间进行了比较,使用了相同的示例,因此您应该找到许多其他示例和引用。 MCMC被广泛使用,并且可以“轻松选择”以加快速度。
考虑到这些示例,请允许我补充一点,我不同意您收到的问题的前两个评论。速度将不一样,在这样的示例中很容易做得更好,而您的C/C++技能通常会决定提高多少。
最后,一个经常被忽视的方面是RNG的速度非常重要。运行循环并加总成本很便宜-进行“良好”绘制并非如此,并且系统间的差异也源于此。
关于c - 实际上,C比R快多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13390152/