一、概述

最近在试图进行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. *92. Reverse Linked List II (follow up questions)

    Reverse a linked list from position m to n. Do it in one-pass and in-place Note: 1 ≤ m ≤ n ≤ length ...

  2. Ural State University Internal Contest October'2000 Junior Session

    POJ 上的一套水题,哈哈~~~,最后一题很恶心,不想写了~~~ Rope Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7 ...

  3. Ubuntu 入门安装

    写在前面的话:很少一次上这么多干货,主要是对Linux的一些基本操作,常用的软件的安装,这个其实不算什么吧,方便大家也方便我,新手们早点入门Linux,少走弯路,网上资料很多,相当于一个整合咯,都是一 ...

  4. 【[HEOI2012]采花】

    \(HH\)的项链加强版,数据范围和题意都加强了 题意大概:给出n个数,求区间出现次数>=2的数的个数. 一眼莫队,可是我还不会莫队啊 那就树状数组吧 回忆一下\(HH\)的项链,套路差不多,那 ...

  5. springboot(服务端接口)获取URL请求参数的几种方法

    原文地址:http://www.cnblogs.com/xiaoxi/p/5695783.html 一.下面为7种服务端获取前端传过来的参数的方法  常用的方法为:@RequestParam和@Req ...

  6. (第四场)F Beautiful Garden

    题目: F Beautiful Garden 题目描述 There's a beautiful garden whose size is n x m in Chiaki's house. The ga ...

  7. umlの类图

    版权声明:本文为博主原创文章,若要转载请注明出处!^_^ https://blog.csdn.net/u010892841/article/details/24844825 类图class diagr ...

  8. Ajax实现异步操作实例_针对JSON格式的请求数据

    最近写了一篇ajax异步操作XML格式的,今天就写关于json格式的. 一.简单了解Json 1. JSON有两种表示结构,对象和数组. 1.1 对象: { key1:value1, key2:val ...

  9. 旧文备份:硬盘MBR引导记录损坏的一种修复方法

    硬盘MBR信息损坏原因:硬盘上安装了windows XP和linux双系统,在windows下安装一套软件,破解的时候修改了硬盘的序列号,结果导致引导系统的grub无法完成linux的引导,只能进到w ...

  10. Eslint代码规范