一、概述

最近在试图进行cuda并行编程,目标是编写一段矩阵计算代码,将计算结果存储进入GPU的缓冲区当中,并在达到某些要求后强制刷新缓冲区,取得计算结果。

但是考虑时间紧任务重的状况和实际的性能要求,决定使用cublas进行矩阵计算。

本篇文章试图记录我在进行cublas实验时得出的一些结论和一些心得。

二、具体内容

环境和配置

对于在win系统上进行cublas实验需要安装cuda、vs2013+版本。安装过程不再赘述,值得注意的在之后新建项目,引入的头文件应当是cublas_v2,在该头文件下的矩阵计算函数包含了cublas_handle_t的首个参数,是大多是找得到的教程当中要求的函数。

在新建工程之后,如果直接使用cublas的函数进行计算则有一定几率出现error LNK2001——无法解析的外部符号。此时的解决方案大致为两部:1、在项目的链接器配置中加入cudatookit当中的lib文件夹下的所有文件;2之后将该文件夹的路径显式的加入链接器输入的外部库道中。具体过程建议参见:https://blog.csdn.net/xianhua7877/article/details/80792027

值得注意的一点是,该博客提到的一堆lib文件中,由于版本不同可能有的存在于实际目录下,而有的不存在于实际目录下,因此应当在配置结束后删除不存在的文件引用。(查找的方法推荐直接编译运行文件,之后查看报错去除不存在的文件)。

使用cublas计算的基本流程

1、应当建立cublas句柄(handle),用于进行cublas计算

2、应当将待计算数据在内存中准备好(最终表现形式应当为一维数组)

3、应当将在设备端(通常指显卡)中准备相应大小的内存,应当使用命令cudaMolloc(最终表现形式应当为一维数组)

4、应当将内存中的数据传输到设备端,使用命令视类型而有不同,例如,准备的数据类型为矩阵时应当使用命令cublasSetMatrix

5、应当使用cuda计算函数进行计算,并将结果保存在设备端的有效内存中。

6、最终将计算结果传输回到设备端进行回收。

值得注意的是,对于一个矩阵,常规写法和C对于二维数组的写法实际上是按照行优先的形式进行存储的。然而考虑BLAS的历史,最早是为了支持F语言的矩阵运算,因此使用了列优先的存储方式。

因此对于一个矩阵元素的寻址通常使用宏定义的形式定义列优先的寻址方式。例如:
#define idx(x,y,m) (x + (y*m))
在进行矩阵计算时的,有一个参数ldx(x通常为'A'或'B'),该参数实际上指的就是在列优先(或行优先)的情况下,一列(或一行)的元素个数。全称是(leading dimension)即主维,并非cublas独有的一个概念。

CUBLAS基础实验的更多相关文章

  1. [nRF51822] 12、基础实验代码解析大全 · 实验19 - PWM

    一.PWM概述: PWM(Pulse Width Modulation):脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形. PWM 的几个基本概念: 1) 占空比:占空比是指 ...

  2. [nRF51822] 11、基础实验代码解析大全 · 实验16 - 内部FLASH读写

     一.实验内容: 通过串口发送单个字符到NRF51822,NRF51822 接收到字符后将其写入到FLASH 的最后一页,之后将其读出并通过串口打印出数据. 二.nRF51822芯片内部flash知识 ...

  3. [nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC

    一.实验内容: 配置NRF51822 的RTC0 的TICK 频率为8Hz,COMPARE0 匹配事件触发周期为3 秒,并使能了TICK 和COMPARE0 中断. TICK 中断中驱动指示灯D1 翻 ...

  4. [nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC

    一.本实验ADC 配置 分辨率:10 位. 输入通道:5,即使用输入通道AIN5 检测电位器的电压. ADC 基准电压:1.2V. 二.NRF51822 ADC 管脚分布 NRF51822 的ADC ...

  5. [nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI

    前一篇分析了前十个基础实验的代码,从这里开始分析后十个~ 一.PPI原理: PPI(Programmable Peripheral Interconnect),中文翻译为可编程外设互连. 在nRF51 ...

  6. 20145338 《网络对抗》逆向及Bof基础实验

    逆向及Bof基础实验 实践目标 ·本次实践的对象是一个名为pwn1的linux可执行文件. ·该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ·该程序同时包含 ...

  7. 20155209林虹宇逆向及Bof基础实验报告

    20155209林虹宇逆向及Bof基础实验报告 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符 ...

  8. 2017-2018-2 20155231《网络对抗技术》实验八: WEB基础实验

    2017-2018-2 20155231<网络对抗技术>实验八:Web基础 实验要求: Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

  9. 20145332卢鑫 WEB安全基础实验

    20145332 WEB安全基础实验 实验过程 ·SQL字符串注入 ·Database Backdoors step1 ·Database Backdoors step2 ·Phishing with ...

随机推荐

  1. cobbler自动安装

    基础环境:centos7.2 本地IP地址:192.168.56.12 网络环境:桥接模式 一.安装cobbler # rpm -ivh http://mirrors.aliyun.com/epel/ ...

  2. echarts固定柱子宽度(barWidth)

    series: [            {                name: '',                yAxisIndex: 0,                type: ' ...

  3. 【转】一个Android项目搞定所有主流架构-1.项目介绍和基本MVC架构示例

    http://www.jianshu.com/p/798536fb91c5 项目启发来自谷歌的同类框架项目https://github.com/googlesamples/android-archit ...

  4. mui 的多图片上传

    pickHead(){ var _this = this; plus.gallery.pick(function(path){ _this.headImage=path; var files = [{ ...

  5. $CRS_HOME/cdata下大量数字命名的文件,占用空间大

    问题现象:    <CRS_HOME>/cdata目录下存在大量数字命名的文件,导致文件系统爆满 $ls -alrth /opt/oracle/product/CRS/cdata/crs ...

  6. idea常用技巧

    1.如何设置,使IntelliJ IDEA智能提示忽略大小写 打开设置(CTRL+ALT+S)搜索editor,找到“Code Completion”->点击Case sensitive com ...

  7. SpringBoot学习17:springboot热部署配置

    spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...

  8. React性能优化总结(转)

    原文链接: https://segmentfault.com/a/1190000007811296?utm_source=tuicool&utm_medium=referral 初学者对Rea ...

  9. xcode7--iOS开发---将app打包发布至app store

    时隔3个月再次接触应用打包,又是一顿折腾 说说这次的感受吧: 变得是打包时间减少到4小时(其中大部分时间还是xcode7或者是iOS9的原因),不变的是还是一如既往的坑!! 好了,废话不多说,下面讲讲 ...

  10. css3 动画应用 animations 和transtions transform在加上JavaScript 可以实现硬件加速动画。

    transitions(过渡) 被应用于元素指定的属性变化时,该属性经过一段时间逐渐的过渡到最终想要的值. 主要包括四个属性: 执行变换的属性:transition-property 变换延续的时间: ...