利用cublasHgemm来实现cublasHgemv
前几天做half量化时发现cublas竟然没有提供half版本的矩阵-向量乘,也就是half版本的cublasHgemv。自己写一个又太麻烦,重点是精度和耗时不一定比cublas提供的要好,不过cublas提供了half版本的矩阵-矩阵乘函数cublasHgemm,只要维度没啥问题,用cublasHgemm实现cublasHgemv,既方便又好用。
废话不多说,直接上。
前置准备
对于矩阵A和向量V,我们要计算\(y=\alpha * A * V + \beta * y\),其中矩阵A的维度为\(m*n\),向量V的长度为\(n\),二维表示就是\(n*1\),\(\alpha\)和\(\beta\)都是标量,所以y的维度就是\(m*1\)。由于是用gemm实现,因此还有个ld参数,矩阵A的ldm为m,向量V的ldv为1(这里暂定,待会儿解释),最后值得注意的是结果向量\(y\)的ldy应该是m而不是1.
对于half矩阵-向量乘,这里我们假设A、V、\(y\)都是half类型(不然就用不了cublasHgemm,只能尝试用cublasGemmEx来实现了),当然\(\alpha\)和\(\beta\)也都得是half类型数值(__float2half)。
不考虑转置,接下来直接上代码:
half版本cublasHgemv
cublasStatus_t cublasHgemv(cublasHandle_t handle, cublasOperation_t trans,
int m, int n,
const half *alpha,
const half *A, int ldm,//由于cublas库是列优先存储,因此ldm常为m,ldv常为1(暂定),ldy常为m
const half *V, int ldv,
const half *beta,
half *y, int ldy
){
return cublasHgemm(handle, trans, trans, m, 1, n, alpha, A, ldm, V, ldv, beta, y, ldy);
}
对比cublas库中已有的float版本的cublasSgemv:
cublasSgemv
声明
cublasStatus_t cublasSgemv(cublasHandle_t handle, cublasOperation_t trans,
int m, int n,
const float *alpha,
const float *A, int lda,
const float *V, int incv,
const float *beta,
float *y, int incy)
调用
status = cublasSgemv(handle, trans, m, n, alpha, A, ldm, V, incv, beta, y, incy);
关于ld参数
注意,相比较于原生的cublasSgemv,自实现版本不是用的incv和incy参数而是使用的ldv和ldy参数,这主要是因为我自己在使用时遇到的大部分情况是这个向量只是矩阵的某一行而不,此时ldv参数应该设置为该矩阵的行数而不是1。当然,由于无论是多少维的张量,在计算机中都是以一维连续空间存放的,因此ldv和incv,ldy和incy大部分情况下都相同。
利用cublasHgemm来实现cublasHgemv的更多相关文章
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- 利用snowfall.jquery.js实现爱心满屏飞
小颖在上一篇一步一步教你用CSS画爱心中已经分享一种画爱心的方法,这次再分享一种方法用css画爱心,并利用snowfall.jquery.js实现爱心满屏飞的效果. 第一步: 利用伪元素before和 ...
- 【探索】利用 canvas 实现数据压缩
前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...
- 黑云压城城欲摧 - 2016年iOS公开可利用漏洞总结
黑云压城城欲摧 - 2016年iOS公开可利用漏洞总结 作者:蒸米,耀刺,黑雪 @ Team OverSky 0x00 序 iOS的安全性远比大家的想象中脆弱,除了没有公开的漏洞以外,还有很多已经公开 ...
- C# 利用性能计数器监控网络状态
本例是利用C#中的性能计数器(PerformanceCounter)监控网络的状态.并能够直观的展现出来 涉及到的知识点: PerformanceCounter,表示 Windows NT 性能计数器 ...
- 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断
概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...
- tomcat开发远程调试端口以及利用eclipse进行远程调试
一.tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里: SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compi ...
- Android性能优化之利用Rxlifecycle解决RxJava内存泄漏
前言: 其实RxJava引起的内存泄漏是我无意中发现了,本来是想了解Retrofit与RxJava相结合中是如何通过适配器模式解决的,结果却发现了RxJava是会引起内存泄漏的,所有想着查找一下资料学 ...
随机推荐
- WeChair项目Beta冲刺(4/10)
团队项目进行情况 1.昨日进展 Beta冲刺第四天 昨日进展: 前后端并行开发,项目按照计划有条不絮进行 2.今日安排 前端:扫码占座功能和预约功能并行开发 后端:扫码占座后端逻辑和预约功能逻辑 ...
- Qt布局的简单介绍
1 介绍 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=25 布局的好处:布局之后,改变主窗口大小,其余窗口可以自适应. 2 布局分类 垂直 ...
- PHP 多维数组转json对象
PHP 多维数组转json对象 php 数组转json对象,可能大家都知道要用json_encode,但是转换出来的格式多有不同,此处做个小小的记录! 1. 一维数组转json对象 <?php ...
- 入门大数据---Hbase搭建
环境介绍 tuge1 tuge2 tuge3 tuge4 NameNode NameNode DataNode DataNode ZooKeeper ZooKeeper ZooKeeper ZooKe ...
- 3分钟理解NMS非极大值抑制
1. NMS被广泛用到目标检测技术中,正如字面意思,抑制那些分数低的目标,使最终框的位置更准: 2. 假如图片上实际有10张人脸,但目标检测过程中,检测到有30个框的位置,并且模型都认为它们是人脸,造 ...
- js语法基础入门(2)
2.变量 2.1.变量的声明 声明变量的时候没有赋值,默认输出undefined //通过var 声明一个变量 var user: //默认输出undefined 可以同时声明多个变量 var use ...
- 5年前端经验小伙伴教你纯css3实现饼状图
有一些网页中,有时候会碰到饼状图的需求,比如统计图表,进度指示器,定时器等,实现方式也是各种各样,现在也有不少现成的js库,可以直接拿来使用,方便很多.这里笔者为大家演示一种纯css实现饼状图效果的方 ...
- flex布局语法+实例
一.什么是flex布局 flex 是 flexible box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为 flex 布局.你可以将前端页 ...
- HDU 4352 XHXJ's LIS HDU 题解
题目 #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefully reading the ent ...
- JS数组与对象赋值问题
在W3C的在线编程中经过测试发现以下问题: 当一个数组内部元素为对象时,给数组赋值应该先给对象赋值,然后把该对象push到数组中. 如下所示: 在控制台打印之后的数据格式为下图所示: 如果在给数组赋值 ...