将Octave转换为使用CuBLAS

Way*_*inn 3 cuda octave cublas

我想将Octave转换为使用CuBLAS进行矩阵乘法.此视频似乎表明这就像键入28个字符一样简单:

使用CUDA库加速应用程序

在实践中,它比这复杂一点.有谁知道在这个视频编译中进行修改必须做哪些额外的工作?

UPDATE

这是我正在尝试的方法

在dMatrix.cc中添加

#include <cublas.h>

在dMatrix.cc中更改所有出现的(保留案例)

dgemm

cublas_dgemm

在我的构建终端设置中

export CC=nvcc
export CFLAGS="-lcublas -lcudart"
export CPPFLAGS="-I/usr/local/cuda/include"
export LDFLAGS="-L/usr/local/cuda/lib64"
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

libtool: link: g++ -I/usr/include/freetype2 -Wall -W -Wshadow -Wold-style-cast 
-Wformat -Wpointer-arith -Wwrite-strings -Wcast-align -Wcast-qual -g -O2
-o .libs/octave octave-main.o  -L/usr/local/cuda/lib64 
../libgui/.libs/liboctgui.so ../libinterp/.libs/liboctinterp.so 
../liboctave/.libs/liboctave.so -lutil -lm -lpthread -Wl,-rpath
-Wl,/usr/local/lib/octave/3.7.5

../liboctave/.libs/liboctave.so: undefined reference to `cublas_dgemm_'
Run Code Online (Sandbox Code Playgroud)

Rob*_*lla 8

EDIT2:本视频中 描述的方法需要使用Fortran的" thunking library" 绑定.这些步骤对我有用:

  1. 这里下载octave 3.6.3 :

    wget ftp://ftp.gnu.org/gnu/octave/octave-3.6.3.tar.gz
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从存档中提取所有文件:

    tar -xzvf octave-3.6.3.tar.gz
    
    Run Code Online (Sandbox Code Playgroud)
  3. 切换到刚创建的八度目录:

    cd octave-3.6.3
    
    Run Code Online (Sandbox Code Playgroud)
  4. 为你的"thunking cublas library"创建一个目录

    mkdir mycublas
    
    Run Code Online (Sandbox Code Playgroud)
  5. 切换到该目录

    cd mycublas
    
    Run Code Online (Sandbox Code Playgroud)
  6. 建立"thunking cublas library"

    g++ -c -fPIC -I/usr/local/cuda/include -I/usr/local/cuda/src -DCUBLAS_GFORTRAN -o fortran_thunking.o /usr/local/cuda/src/fortran_thunking.c
    ar rvs libmycublas.a fortran_thunking.o
    
    Run Code Online (Sandbox Code Playgroud)
  7. 切换回主构建目录

    cd ..
    
    Run Code Online (Sandbox Code Playgroud)
  8. configure使用其他选项运行八度音程:

    ./configure --disable-docs LDFLAGS="-L/usr/local/cuda/lib64 -lcublas -lcudart -L/home/user2/octave/octave-3.6.3/mycublas -lmycublas"
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,在上面的命令行中,您需要将第二个-L开关的目录更改为与mycublas您在步骤4中创建的目录的路径相匹配的目录.

  9. 现在octave-3.6.3/liboctave/dMatrix.cc根据视频中的说明进行编辑.替换dgemmwith的cublas_dgemm每个实例和DGEMMwith的每个实例都应该足够了CUBLAS_DGEMM.在我使用的八度音阶3.6.3版本中,每个都有3个这样的实例(小写和大写).

  10. 现在你可以建立八度:

    make
    
    Run Code Online (Sandbox Code Playgroud)

    (确保你在octave-3.6.3目录中)

在这一点上,对我来说,Octave成功建造.make install虽然我认为这样可行,但我并没有追求.我只是使用目录中的./run-octave脚本运行八度音程octave-3.6.3.

上述步骤假定适当且标准的CUDA 5.0安装.我将尝试回答特定于CUDA的问题或问题,但是在您的平台上安装Octave时可能会出现许多问题.我不是一个八度专家,我将无法回答这些问题.我使用CentOS 6.2进行此测试.

如所指出的,该方法涉及修改八度音阶的C源文件.

在GTC 2013 GPU技术大会的S3527会议中详细介绍了另一种方法.本次会议实际上是一次动手实验练习.不幸的是,那里的材料不方便.然而,那里的方法没有涉及GNU Octave源的任何修改,而是使用LD_PRELOAD Linux功能来拦截BLAS库调用并将(适当的)重定向到cublas库.

本博客文章讨论了一种更新,更好的方法(使用NVBLAS拦截库)