R的原生并行2——修改BLAS
当前位置:以往代写 > 其他教程 >R的原生并行2——修改BLAS
2019-06-14

R的原生并行2——修改BLAS

R的原生并行2——修改BLAS

BLAS的全称是Basic Linear Algebra Subprograms,它是用FORTRAN语言编写的一套跟线性代数运算有关的函数,包罗向量与向量的运算、向量与矩阵的运算以及矩阵与矩阵的运算三个条理。R的许多底层运算都是基于BLAS来完成的,好比常见的%*%,用来完成矩阵的乘法。而要让R支持原生的并行计较,一个很重要的方面就是让BLAS自己可以通过并行计较来完成。幸运的是,BLAS中许多运算都是较量规整的轮回语句,而这些语句恰恰可以通过OpenMP来实现并行。由于BLAS中的函数很是多,在此为了轻便起见,我只修改了个中的dgemm.f文件,该文件主要是实现矩阵乘法运算。下面是我用修改后的BLAS源代码编译出的Rblas.dll文件,用它替换R的bin目次下的Rblas.dll(同时需要把压缩包中其它两个dll文件也复制到bin目次下),就可以对R的并行矩阵运算举办测试(注:措施的有效性大概会受CPU型号和架构的影响)。虽然了,说是说修改源代码,其实就是参照这篇文章对一些轮回语句举办了并行化的声明。


 


个中dgemm.f是修改后的措施,完整的BLAS源代码可以到这里下载。


 


下面是我电脑上的一些测试。
测试情况:

  • 操纵系统——32位 Windows XP Home Edition SP3
  • CPU——Intel Core Duo T2300 1.66GHz(双核)
  • 内存——1.00GB DDR2

  •  


    测试措施:

    set.seed(123);
    a=matrix(rnorm(4000000),2000);
    system.time(a%*%a);
     

    测试功效:



    1. 用R自带的Rblas.dll:
      > system.time(a%*%a);
      用户 系统 流逝
      25.97 0.05 26.05

    2. 用附件中的Rblas.dll:
      > system.time(a%*%a);
      用户 系统 流逝
      32.76 0.06 16.85

    3. 用ATLAS优化的Rblas.dll:
      > system.time(a%*%a);
      用户 系统 流逝
      11.46 0.01 11.50

     


    个中第一项和第三项测试CPU都只能利用单核。


     


    从功效可以看出,并行计较的时间险些比一般的串行计较少了一半,但因为措施没有颠末优化,所以还不如ATLAS优化过的BLAS。可是,假如CPU核的数量许多,ATLAS优化的BLAS依然只能利用一个核,机能将不会有明明的晋升,但并行的BLAS则可以进一步提高机能。


     


    假如要进一步实现R的并行计较成果,我以为有两方面的事情要做,一是将BLAS中的其它函数都举办相应的修改,而是将并行与ATLAS优化团结起来,进一步提高运算效率。

      关键字:

    在线提交作业