前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >教你一招,不会CUDA也能玩转矩阵加速

教你一招,不会CUDA也能玩转矩阵加速

作者头像
GPUS Lady
发布2018-03-30 15:47:27
1.3K0
发布2018-03-30 15:47:27
举报
文章被收录于专栏:GPUS开发者

高性能计算领域的很多问题都在研究并行算法的实现,而矩阵计算又是高性能计算中应用非常广泛的内容。图形处理器GPU有着强大的并行处理能力,出色的浮点计算能力,大存储带宽和低成本,广泛用于求解大规模矩阵计算问题上,但是很多开发者将串行代码移植到GPU上时候存在一个问题:“学习CUDA好麻烦!”有木有?有木有?尤其对于那些非计算机专业的童学,要对自己算法进行加速才能毕业的.....

在这里,小编教你一招,让你在GPU上玩转矩阵加速!

秘密武器就是:ArrayFire!

ArrayFire是由美国一家公司叫Accelereyes开发的,为广大程序猿提供了快速开发数据并行程序的一个软件平台。

ArrayFire提供了简单的高级矩阵抽象函数而不是低级的GPU APIs,诸如CUDA、OpenCL、OpenGL,可以让那些非计算机专业的科学家、工程学家、经济学家充分利用GPU的硬件优势!

ArrayFire早就有了,只是由于当时是收费的,尽管针对高校提供了优惠折扣,但叫好不叫座——小编为什么知道这么多?因为我们是他们在中国的代理。

去年,ArrayFire开源了!

对于众多经费有限,又希望使用GPU加速的程序猿们,这无疑是喜大普奔!小编从此少了收入来源......

...但是没有关系,好东西还是要分享给大家!

好了,不多说,举几个例子,来看看这个ArrayFire有多好用吧!


seq:线性序列,主要用来替换for循环 eg:seq b(10, 20, 2); // [10, 20, 2] => 10, 12, 14....20 其中10-begin,20-end,2-step; array theta=seq(0,359);//转换成矩阵模式 af_print(cos(theta*3.1415/180));//角度转换 for(int i=0;i<360;i++)可以用seq(0,359)代替 顺便提一句,arrayfire是按列进行存储了,即360行1列


constant&randu:常数矩阵和随机矩阵生成 eg: array B = constant(1, 4, 4, s32);//4*4全0矩阵 B.row(0) = randu(1, 4, f32); // set a row to random values (also upcast) //randu(row,col,type)


complex:复数矩阵,除了赋值其他操作和常规操作一样。 eg:array data8=af::complex(datareal8,dataimag8);//8通道 array=complex(real,imag);


transpose:矩阵转置 eg:array DATAT=transpose(DATA);//对DATA转置 array DATAT=transpose(DATA,true);//对DATA共轭转置,适用于复数矩阵


inverse:矩阵求逆 eg:af::array IA = inverse(A) af::array I = af::matmul(A, IA);


是不是非常好用呢?大家可以动手试一试,去Arrayfire.com上下载玩一玩吧!从来导师再也不用担心你毕不了业了!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档