cuda - 将 Octave 转换为使用 CuBLAS

标签 cuda octave cublas

我想将 Octave 转换为使用 CuBLAS 进行矩阵乘法。这段视频似乎表明这就像输入 28 个字符一样简单:
Using CUDA Library to Accelerate Applications
在实践中,它比这更复杂一些。有谁知道必须做哪些额外的工作才能编译此视频中所做的修改?
更新
这是我正在尝试的方法
在 dMatrix.cc 添加#include <cublas.h>在 dMatrix.cc 中更改所有出现的(保留大小写)dgemmcublas_dgemm在我的构建终端集中

export CC=nvcc
export CFLAGS="-lcublas -lcudart"
export CPPFLAGS="-I/usr/local/cuda/include"
export LDFLAGS="-L/usr/local/cuda/lib64"
我收到的错误是:
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_'

最佳答案

编辑2:
this video中描述的方法需要使用 fortran“thunking 库”bindings for cublas .
这些步骤对我有用:

  • here 下载 Octave 音程 3.6.3 :
    wget ftp://ftp.gnu.org/gnu/octave/octave-3.6.3.tar.gz
    
  • 从存档中提取所有文件:
    tar -xzvf octave-3.6.3.tar.gz
    
  • 切换到刚刚创建的 Octave 目录:
    cd octave-3.6.3
    
  • 为您的“thunking cublas 库”创建一个目录
    mkdir mycublas
    
  • 进入那个目录
    cd mycublas
    
  • 建立“thunking cublas 图书馆”
    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
    
  • 切换回主构建目录
    cd ..
    
  • 运行 Octave 音程 configure附加选项:
    ./configure --disable-docs LDFLAGS="-L/usr/local/cuda/lib64 -lcublas -lcudart -L/home/user2/octave/octave-3.6.3/mycublas -lmycublas"
    

    请注意,在上述命令行中,您需要更改第二个 -L 的目录。切换到与您的路径匹配的路径 mycublas您在步骤 4 中创建的目录
  • 现在编辑 octave-3.6.3/liboctave/dMatrix.cc根据 the video 中给出的说明.替换 dgemm 的每个实例应该就足够了与 cublas_dgemm以及 DGEMM 的每个实例与 CUBLAS_DGEMM .在我使用的 Octave 3.6.3 版本中,每个都有 3 个这样的实例(小写和大写)。
  • 现在您可以构建 Octave :
    make
    

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

  • 至此,对我来说,Octave 构建成功。我没有追求make install虽然我认为这会奏效。我只是使用 ./run-octave 运行了 Octave 音程octave-3.6.3 中的脚本目录。

    上述步骤假设正确且标准的 CUDA 5.0 安装。我将尝试回答特定于 CUDA 的问题或问题,但是在您的平台上进行常规 Octave 安装可能会出现许多问题。我不是 Octave 专家,我将无法回应这些。我使用 CentOS 6.2 进行此测试。

    如上所述,此方法涉及修改 Octave 音程的 C 源文件。

    另一种方法在 GTC 2013 GPU 技术 session 上的 S3527 session 中有详细介绍。本次 session 实际上是一个动手实验室练习。不幸的是,上面的 Material 并不方便。然而,那里的方法没有涉及对 GNU Octave 源代码的任何修改,而是使用了 LD_PRELOAD capability of Linux拦截 BLAS 库调用并将(适当的)重定向到 cublas 库。

    this blog article 中讨论了一种更新、更好的方法(使用 NVBLAS 拦截库)。

    关于cuda - 将 Octave 转换为使用 CuBLAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17493270/

    相关文章:

    cuBlas、cuda 功能不起作用,没有产生错误

    debugging - 为什么逻辑回归中较高的学习率会产生 NaN 成本?

    cuda - RTX 2080 Ti cuda-memcheck 在创建 Cublas 上下文开始时遇到错误

    concurrency - 如何使多个 CUBLAS API(例如 cublasDgemm)真正在多 cudaStream 中同时执行

    使用 CUDA 的 matlab if 语句

    octave - "dimension too large"广播到 Octave 稀疏矩阵时出错

    c++ - 在不循环的情况下写入 .oct 文件中的矩阵?

    c++ - CUDA 直方图遇到非法内存访问 (77)

    optimization - 如何优化2个相同的内核,占用率50%,可以在CUDA中同时运行?

    Cuda 线程和循环