R的原生并行——一个实验
一直以来,R的并行计较都是一件令人头疼的问题。尽量有各类百般的包可以帮助地实现并行计较,但R自己依然只能利用一个核,这对付逐渐普及的多核CPU来说确实是一种资源的挥霍。而对付我们普通用户来说,并行计较的编程和实现好像是一件遥不行及的事,但昨天偶尔在图书馆翻到的一本书却迅速改变了我的这种概念。下面先把图和真相贴出来。
上面两幅图展示了同一个函数(矩阵乘法)的两种实现途径,第一种是普通的计较,从图中可以看出,只有一个CPU核处在完全利用状态,总的CPU操作率是50%;而第二种要领回收了并行计较,两个CPU核都是100%的利用率。从时间上来看,第二种要领险些为第一种的一半,与CPU的操作率相吻合。
大概你会以为,第二个措施会比第一个措施巨大许多,但实际上,在它们的C措施源代码中,两段措施只有一行是差异的!措施的C源代码、编译出的dll文件以及R源代码可以在这里下载获得,其主要道理就是利用了OpenMP这个支持并行计较的库。一个简朴但很有开导性的先容可以看这里。
事实上,R的许多代数运算都是基于BLAS系统的,而从网上的一些先容来看,它也有支持并行计较的版本,假如可以把它直接链接到R中,那就有好戏看了……