用cudamat做矩阵运算的GPU加速
1. cudamat简介
cudamat是一个python语言下,利用NVIDIA的cuda sdk 进行矩阵运算加速的库。对于不熟悉cuda编程的程序员来说,这是一个非常方便的GPU加速方案。很多工程和项目中都使用了cudamat,例如gnumpy,deepnet等。
2. 安装
cudamat的github地址如下:https://github.com/cudamat/cudamat。
下载完成后,运行命令 python setup.py install来进行安装。
windows下安装需要将“cl.exe”加入path之中,另外会提示你安装vc的python编译器,依照提示下载安装即可。
3. 基本矩阵运算
import numpy as np
import cudamat as cm
cm.cublas_init()
# create two random matrices and copy them to the GPU
a = cm.CUDAMatrix(np.random.rand(32, 256))
b = cm.CUDAMatrix(np.random.rand(256, 32))
# perform calculations on the GPU
c = cm.dot(a, b)
d = c.sum(axis = 0)
# copy d back to the host (CPU) and print
print(d.asarray())
如以上代码所示,cudamat的基本使用方法是利用cm.CUDAMatrix(A)来讲矩阵A转换成GPU里的矩阵,进而进行各种运算。cudamat提供了多种矩阵运算的接口,可参考文档:http://www.cs.toronto.edu/~vmnih/docs/cudamat_tr.pdf。或者可阅读源代码里的cudamat/cudamat.py或test/test_cudamat.py来查看其各种接口。
4. where等其他运算
接下来介绍一个矩阵里的where运算,示例代码如下:
def func(temp,threshold):
temp_cpu1=temp.asarray()
res_d = cm.empty(temp.shape)
temp.greater_than(threshold, res_d)
temp.free_device_memory()
x=np.ones_like(temp_cpu1)
z = np.zeros_like(temp_cpu1)
x_d=cm.CUDAMatrix(x)
z_d = cm.CUDAMatrix(z)
# > threhold ? 1 : 0
cm.where(res_d, x_d, z_d)
temp_cpu=res_d.asarray()
return temp_cpu
如代码所示,该函数的输入是一个CUDAMatrix temp,一个double值threshold。通过great_than函数,可将temp与threshold进行比较,比较的结果放入res_d中,x_d,z_d是与temp同样大小的1,0矩阵,最后通过where操作,即可将res_d中的正值设为1,负值设为0,最后得到的结果也就是将矩阵temp中大于threshold的值设为1,否则设为0
5. 大型矩阵相乘的分块加速算法
对于非常大型的矩阵相乘,如果显存不足以放下矩阵的话,可以尝试分块送入GPU进行计算,再将得到的结果进行汇总。
作者yunhe
谢谢阅读!转载请注明出处。
用cudamat做矩阵运算的GPU加速的更多相关文章
- mxnet:结合R与GPU加速深度学习
转载于统计之都,http://cos.name/tag/dmlc/,作者陈天奇 ------------------------------------------------------------ ...
- GPU 加速NLP任务(Theano+CUDA)
之前学习了CNN的相关知识,提到Yoon Kim(2014)的论文,利用CNN进行文本分类,虽然该CNN网络结构简单效果可观,但论文没有给出具体训练时间,这便值得进一步探讨. Yoon Kim代码:h ...
- 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?
深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...
- GPU加速有坑?
大多数人都知道有动画的地方可以使用GPU来加速页面渲染. 例如,做优化的时候,将使用left和top属性的动画修改成使用transform属性的CSS动画.或者听到别人教你使用transform:tr ...
- 记录一次Python下Tensorflow安装过程,1.7带GPU加速版本
最近由于论文需要,急需搭建Tensorflow环境,16年底当时Tensorflow版本号还没有过1,我曾按照手册搭建过CPU版本.目前,1.7算是比较新的版本了(也可以从源码编译1.8版本的Tens ...
- Windows 10下安装配置Caffe并支持GPU加速(修改版)
基本环境 建议严格按照版本来 - Windows 10 - Visual Studio 2013 - Matlab R2016b - Anaconda - CUDA 8.0.44 - cuDNN v4 ...
- CSS动画的性能分析和浏览器GPU加速
此文已由作者袁申授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 有数的数据大屏可以在一块屏幕上展示若干张不同的图表,以炫酷的方式展示各种业务数据.其中有些图表使用CSS实现了 ...
- Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速
Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...
- 0704-使用GPU加速_cuda
0704-使用GPU加速_cuda 目录 一.CPU 和 GPU 数据相互转换 二.使用 GPU 的注意事项 三.设置默认 GPU 四.GPU 之间的切换 pytorch完整教程目录:https:// ...
随机推荐
- EF 预热
由于EF第一次加载比较慢,所以要对EF进行一次初始化的加载,类似第一次打开网页很慢,但第二次打开都很快了的原理一样:第一次把所有静态的图片和JS缓存到本地了:当第二次打开的时候都不需要再去下载这些东西 ...
- 自学Linux命令的四种方法
自学Linux命令的四种方法 导读 童鞋们刚接触linux时,在学习过程中中会遇到不少问题,学习linux摸不着头脑,那么下面介绍四种linux的学习方法,特别适合新手. 方法一:终端"每日 ...
- 慎用preg_replace危险的/e修饰符(一句话后门常用)
要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误 preg_replace函数原型: mi ...
- 用vim处理字符的大小写转换
转载: http://blog.csdn.net/ruixj/article/details/3765385 http://www.linuxsong.org/2010/09/vim-convert- ...
- C# 之 判断或设置以管理员身份运行程序
一.判断程序是否以管理员权限运行 using System.Security.Principal; public bool IsAdministrator() { WindowsIdentity cu ...
- C#基础--struct(结构体)
结构体和类有点类似 我们定义一个类的时候 是class 类名 定义结构体的时候是 struct 结构体名 结构体的写法 struct Point { // public int ...
- IOS 应用 退出的一个小方法
AppDelegate * app=(AppDelegate *)[[UIApplication sharedApplication]delegate]; UIWindow *window = app ...
- ubuntu 12.10安装VIM
使用命令:sudo apt-get install vim vim-gtk 可能安装时出错,可用下面更新系统,再执行上面的安装命令. 更新:sudo apt-get update
- JSON解析总结2
使用json-lib-2.4-jdk15.jar JSON工具类: import java.util.List; import net.sf.json.JSONArray; import net.sf ...
- C#之ArrayList
using System.Collections; 新建: ArrayList list = new ArrayList(); 添加元素: int a = 1; list.Add(a); 遍历: fo ...