cuda矩阵相乘_cuda初学(1):稀疏矩阵向量乘法(单精度)

初步学习CUDA编程,实现简单稀疏矩阵向量乘法运算,由于硬件限制,目前只测试了单精度程序

GPU计算子程序gpu_fmmv.cu:

#include #include // CUDA-C includes

#include

#ifdef __cplusplus

extern "C" {

#endif

//   For Fortran interface  //

#define GPU_fmmv gpu_fmmv_

extern void GPU_fmmv(int *, int *, int *, float *, float *, float *);

#ifdef __cplusplus

}

#endif

#define THREAD_NUM 512

__global__ static void fmmv(int *neq, int *numcol, int *ia, float *a, float *v, float *w)

{

const int tId = threadIdx.x;

int row, col;

for(row = tId; row < *neq; row += THREAD_NUM){

w[row] = 0.0;

for(int num = numcol[row]; num < numcol[row+1]; num ++){

col = ia[num]-1;

w[row] += a[num]*v[col];

}

}

}

void GPU_fmmv(int *neqi, int *numcol, int *ia, float *a, float *v, float *w)

{

int *gpu_neq;

int *gpu_ia, *gpu_numcol;

float *gpu_a, *gpu_v, *gpu_w;

int neq = *neqi;

int nnz = numcol[neq];

/*   Malloc space on GPU device   */

cudaMalloc((void **) &gpu_neq, sizeof(int));

cudaMalloc((void **) &gpu_numcol, sizeof(float)*(neq+1));

cudaMalloc((void **) &gpu_ia, sizeof(int)*nnz);

cudaMalloc((void **) &gpu_a, sizeof(float)*nnz);

cudaMalloc((void **) &gpu_v, sizeof(float)*neq);

cudaMalloc((void **) &gpu_w, sizeof(float)*neq);

/*  Copy data to GPU device  */

cudaMemcpy(gpu_neq, &neq, sizeof(int), cudaMemcpyHostToDevice);

cudaMemcpy(gpu_numcol, numcol, sizeof(int) * (neq+1), cudaMemcpyHostToDevice);

cudaMemcpy(gpu_ia, ia, sizeof(int) * nnz, cudaMemcpyHostToDevice);

cudaMemcpy(gpu_a, a, sizeof(float) * nnz, cudaMemcpyHostToDevice);

cudaMemcpy(gpu_v, v, sizeof(float) * neq, cudaMemcpyHostToDevice);

fmmv<<<1,THREAD_NUM,0>>>(gpu_neq, gpu_numcol, gpu_ia, gpu_a, gpu_v, gpu_w);

cudaMemcpy(w, gpu_w, sizeof(float) * neq, cudaMemcpyDeviceToHost);

cudaFree(gpu_neq);

cudaFree(gpu_numcol);

cudaFree(gpu_ia);

cudaFree(gpu_a);

cudaFree(gpu_v);

cudaFree(gpu_w);

}

主调用程序testgpu.f:

implicit real*4(a-h, o-z)

dimension numcol(1000), ia(10000)

dimension a(10000), v(1000), w(1000)

character*12 fname

numarg = 0

numarg = numarg + 1

call getarg(numarg, fname)

print *,'fname : ', fname

open(21,file=fname,form='formatted',status='old')

read(21,*) neq

read(21,*) (numcol(i),i=1,neq+1)

do i=1, neq

read(21,*) (ia(j),j=numcol(i)+1, numcol(i+1))

enddo

do i=1,neq

read(21,*) (a(j),j=numcol(i)+1, numcol(i+1))

enddo

read(21,*) (v(i),i=1,neq)

close(21)

call gpu_fmmv(neq, numcol, ia, a, v, w)

print *,'w ======'

print *,(w(i),i=1,neq)

stop 0000

end

编译命令:

nvcc -c gpu_fmmv.cu

ifort -o fmvv -L /usr/local/cuda/lib64/ -lcudart gpu_fmmv.o testgpu.f

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

素数问题是物质的几何学问题

来源&#xff1a;知乎大家知道&#xff0c;黎曼猜想、孪生素数猜想、哥德巴赫猜想中皆涉及素数&#xff08;质数&#xff09;。关于黎曼猜想&#xff0c;黄逸文说“这是1900年希尔伯特提出的23个唯一未被解决的问题&#xff0c;也是数学中最重大的未解决的难题。1859年&#xf…

IEEE期刊LaTeX模板

https://template-selector.ieee.org/secure/templateSelector/publicationType

shell sort 最后一列排序_没想到 Shell 命令竟然还能这么玩?| Shell 玩转大数据分析...

关于作者&#xff1a;程序猿石头(ID: tangleithu)&#xff0c;现任阿里巴巴技术专家&#xff0c;清华学渣&#xff0c;前大疆后端 Leader。正文开始本文是一个命令行工具的综合应用&#xff0c;将用一个具体的例子来阐述如何用 Shell 来进行高效地数据统计和分析。最近北京又开…

对于不是特别擅长Photoshop的人来说,熟悉和运用Photoshop工具提供的各类便捷的快捷键,是有帮助的。...

应用程序菜单快捷键之文件 应用程序菜单快捷键之编辑 应用程序菜单快捷键之图像图层 应用程序菜单快捷键 应用程序菜单快捷键之视图 Ctrl H 取消参考线调板菜单快捷键一览。 工具板快捷键一览 其他类别的快捷键。 按Shift时可画出正圆和方形的选区、图形、直线。 按Shift时可…

ireport参数传递json_Json传递数据两种方式(json大全)

1.Json传递数据两种方式(json大全)----------------------------字符串var list1 ["number","name"];var param{};param["list1"] list1;param["test"] "java";var jsonJSON.stringify(param);$.ajax({type:POST,url: CTX …

懂数学人的都认同:数学的本质[关联]万物(二)

来源&#xff1a;数学职业家结构、关系与信息关系是与结构绑定的不可分割的&#xff0c;是对结构从某个视角观察的结果&#xff0c;并且这个角度看到的是可以被观察者所理解和可感知的。这里的可感知&#xff0c;即是可以被人体的感觉系统&#xff08;如视觉、听觉、触觉等&…

java比较StringBuilder和StringBuffer字符串内容是否相等

由于StringBuilder和StringBuffer没有重写equals方法&#xff0c;所以还是使用的Object的equals方法。对比的是两个对象的地址是否相等。为了比较StringBuilder和StringBuffer字符串内容是否相等&#xff0c;需要先将其转换为string&#xff0c;String 由于重写了equals方法&am…

计算虚拟化涉及的关键技术有哪几项_都开始商用了 5G的这些关键技术还不知道?...

[PConline 杂谈]作为新一代移动通信技术&#xff0c;5G为我们带来了更高的数据速率与更低的延迟&#xff0c;甚至比4G快了100倍。在满足移动超高清视频、AR/VR等大流量应用的同时&#xff0c;更将开启万物互联、深度融合的发展新阶段。如果说3G提升了速度&#xff0c;4G改变了生…

有效沟通

先看两个笑话&#xff1a; 一个苏格兰人去伦敦&#xff0c;想顺便探望一位老朋友&#xff0c;但却忘了他的住址&#xff0c;于是给家父发了一份电报&#xff1a;“您知道托马的住址吗&#xff1f;速告&#xff01;”当天&#xff0c;他就收到一份加急回电&#xff1a;“知道。”…

)类 新建javafx程序时_第三章 第一个OpenCV的JavaFX应用程序.md

# 第三章 第一个OpenCV的JavaFX应用程序---***注意***&#xff1a;我们假设您现在已经阅读了之前的教程。如果没有&#xff0c;请在[http://opencv-java-tutorials.readthedocs.org/en/latest/index.html](http://opencv-java-tutorials.readthedocs.org/en/latest/index.html)…

公式和图片转LaTeX网址

在线LaTeX公式编辑器-编辑器

沃丰报告:物联网的未来

物联网的未来激动人心&#xff0c;但物联网并不只为那些极具创新精神的创业企业而生。大多数物联网项目都不是为了创造头条新闻&#xff0c;而是为了做出切实的成果。我相信我们已经越过了临界点&#xff0c;物联网已经成为主流。来源 | 沃达丰物联网近日&#xff0c;沃达丰(vo…

推销员(codevs 5126)

题目描述 Description阿明是一名推销员&#xff0c;他奉命到螺丝街推销他们公司的产品。螺丝街是一条死胡同&#xff0c;出口与入口是同一个&#xff0c;街道的一侧是围墙&#xff0c;另一侧是住户。螺丝街一共有N家住户&#xff0c;第i家住户到入口的距离为Si米。由于同一栋房…

python管理系统web版_Python学生管理系统(web网页版)-Go语言中文社区

前言&#xff1a;本项目是使用Python的Django的web框架搭建的&#xff0c;是一个完整的学生管理系统&#xff0c;功能包括基本的增删改查 项目演示图&#xff1a; 首页展示数据的页面&#xff08;index.html&#xff09;添加学生的页面&#xff08;add.html&#xff09;搜索学生…

hog函数的用法 python_Python常见内置函数用法(三)

本文作者&#xff1a;孙雪丽文字编辑&#xff1a;周聪聪技术总编&#xff1a;张学人重大通知&#xff01;&#xff01;&#xff01;2019年6月22日至24日在河南郑州举行Stata编程技术特别训练营&#xff0c;招生工作已经圆满结束。另外爬虫俱乐部将于2019年7月5日至7月8日在武汉…

pytorch打印模型每层的结构

可以用torchsummary下的summary方法&#xff0c;或者torchinfo下的summary方法&#xff0c;两者功能是一样的 以torchsummary下的summary方法为例说明 首先通过pip install torchsummary 之后在代码中&#xff1a; from torchsummary import summarysummary(model, (1, 28,…

学会动态丨中国人工智能学会成功召开重大科学问题《智能生成机理》研讨会...

来源&#xff1a;中国人工智能学会为配合国家科技发展的重大需求&#xff0c;推进重大科学问题的研究&#xff0c;形成相应的政策建议&#xff0c;中国人工智能学会于9月29日上午9时在北邮科技大厦召开了“重大科学问题《智能生成机理》研讨会”。现场专家们通过深入交流&#…

Linux文件(区域)锁函数 -- open()、fcntl()

一、什么是文件锁定 对于锁这个字&#xff0c;大家一定不会陌生&#xff0c;因为我们生活中就存在着大量的锁&#xff0c;它们各个方面发挥着它的作用&#xff0c;现在世界中的锁的功能都可归结为一句话&#xff0c;就是阻止某些人做某些事&#xff0c;例如&#xff0c;门锁就是…

**Java有哪些悲观锁的实现_「Java并发编程」何谓悲观锁与乐观锁,Java编程你会吗...

何谓悲观锁与乐观锁悲观锁乐观锁两种锁的使用场景乐观锁常见的两种实现方式1. 版本号机制2. CAS算法乐观锁的缺点1 ABA 问题2 循环时间长开销大3 只能保证一个共享变量的原子操作CAS与synchronized的使用情景何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方…