Way*_*inn 3 cuda octave cublas
我想将Octave转换为使用CuBLAS进行矩阵乘法.此视频似乎表明这就像键入28个字符一样简单:
在实践中,它比这复杂一点.有谁知道在这个视频编译中进行修改必须做哪些额外的工作?
这是我正在尝试的方法
在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)
EDIT2:本视频中 描述的方法需要使用Fortran的" thunking library" 绑定.这些步骤对我有用:
从这里下载octave 3.6.3 :
wget ftp://ftp.gnu.org/gnu/octave/octave-3.6.3.tar.gz
Run Code Online (Sandbox Code Playgroud)从存档中提取所有文件:
tar -xzvf octave-3.6.3.tar.gz
Run Code Online (Sandbox Code Playgroud)切换到刚创建的八度目录:
cd octave-3.6.3
Run Code Online (Sandbox Code Playgroud)为你的"thunking cublas library"创建一个目录
mkdir mycublas
Run Code Online (Sandbox Code Playgroud)切换到该目录
cd mycublas
Run Code Online (Sandbox Code Playgroud)建立"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)切换回主构建目录
cd ..
Run Code Online (Sandbox Code Playgroud)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中创建的目录的路径相匹配的目录.
现在octave-3.6.3/liboctave/dMatrix.cc根据视频中的说明进行编辑.替换dgemmwith的cublas_dgemm每个实例和DGEMMwith的每个实例都应该足够了CUBLAS_DGEMM.在我使用的八度音阶3.6.3版本中,每个都有3个这样的实例(小写和大写).
现在你可以建立八度:
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拦截库)
| 归档时间: |
|
| 查看次数: |
4358 次 |
| 最近记录: |