首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NVBLAS无法进行半大矩阵乘法

NVBLAS无法进行半大矩阵乘法
EN

Stack Overflow用户
提问于 2016-07-22 07:22:11
回答 1查看 474关注 0票数 1

我按照here的说明用nvblas运行octave。我已经安装了CUDA工具包7.5和一个特斯拉k40c图形处理器。要使用nvblas启动octave,我使用了LD_PRELOAD=libnvblas.so octave。然后我运行了以下简单的代码:

代码语言:javascript
复制
N = 256
A = rand(N,N)
B = rand(N,N)
A*B

这会产生一个具有合理值的矩阵。但是,如果我将N增加到512,或者任何超过512的数字,我都会得到全零(或非常小的数字)。

如果我使用OpenBLAS,这种情况就不会发生。矩阵应该足够小,以便能够放入卡的RAM (12‘s)中。你知道为什么会发生这种情况吗?

注意:如果我制作A和B单位矩阵,这不会发生,但它仍然发生在A=B=one(N,N)的情况下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-07 05:42:17

抱歉,这个问题有点陈旧,但我在一个使用k80图形处理器的Amazon AWS EC2 p2.xlarge实例上尝试了一下,它似乎起作用了。

当我在nvblas.conf中使用默认的"NVBLAS_GPU_LIST 0 1“设置时,我得到了与您相似的结果(很多0),似乎是指两个GPU,所以我将其更改为只有一个,它就起作用了。下面是完整的文件:

代码语言:javascript
复制
#Put here the CPU BLAS fallback Library of your choice
NVBLAS_CPU_BLAS_LIB libopenblas.so

# Specify which output log file (default is stderr)
NVBLAS_LOGFILE nvblas.log

# List of GPU devices Id to participate to the computation
# By default if no GPU are listed, only device 0 will be used
NVBLAS_GPU_LIST 0
NVBLAS_AUTOPIN_MEM_ENABLED

程序(t1.m)从NVidia链接稍作修改,以计算输出矩阵中的非零数:

代码语言:javascript
复制
N = 16384;

# from the original NVidia example:
#A = single(rand(N,N));
#B = single(rand(N,N));

# double precision seems to work fine (not checked in detail)
A = rand(N,N);
B = rand(N,N);

start = clock();
C = A * B;
elapsedTime = etime(clock(), start);
disp(elapsedTime);
gFlops = 2*N*N*N/(elapsedTime * 1e+9);
disp(gFlops);

disp("number of elements >0:")
disp(sum(sum(C > 0)));

disp("Should be:")
disp(N*N)

仅供参考,这里是nvidia-smi在运行时的输出(使用N=16384时,它的峰值为172MiB ):

代码语言:javascript
复制
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.51                 Driver Version: 375.51                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 0000:00:1E.0     Off |                    0 |
| N/A   44C    P0    80W / 149W |     80MiB / 11439MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0     21080    C   /usr/bin/octave-cli                             78MiB |
+-----------------------------------------------------------------------------+

以下是我之前安装的nvidia & cuda文件:

代码语言:javascript
复制
cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64-deb  
libcudnn5-dev_5.1.10-1+cuda8.0_amd64.deb
libcudnn5_5.1.10-1+cuda8.0_amd64.deb                   
nvidia-driver-local-repo-ubuntu1604_375.51-1_amd64.deb

我似乎得到了约8.6的速度,与约55个gflops的普通倍频程,和478从GPU版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38515896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档