CUDA学习笔记05:矩阵相乘

参考资料

CUDA编程模型系列三(矩阵乘)_哔哩哔哩_bilibili

极力推荐的良心课程~

代码片段

#include <stdio.h>const int matrix_size = 32;
const int BLOCK_SIZE = 16;__global__ void matrix_multi(const int* a1, const int *b1, int *c1, const int size)
{int y = blockDim.y * blockIdx.y + threadIdx.y;int x = blockDim.x * blockIdx.x + threadIdx.x;int t_sum = 0;if(x < size && y < size) {for(int step = 0; step < size; step++) {t_sum += a1[y * size + step] * b1[step * size + x];}c1[y * size + x] = t_sum;printf("x: %d  y: %d  sum: %d \n", x, y, t_sum);}
}int main()
{int* a1, *b1, *c1;int msize = matrix_size * matrix_size * sizeof(int);// 分配内存空间cudaMallocHost((void**)&a1, msize);cudaMallocHost((void**)&b1, msize);cudaMallocHost((void**)&c1, msize);// 初始化for(int i = 0; i < matrix_size; i++) {for(int j = 0; j < matrix_size; j++) {a1[i * matrix_size + j] = 1;b1[i * matrix_size + j] = 1;}}printf("Check result a1: %d \n", a1[1]);printf("Check result b1: %d \n", b1[1]);// 分配设备空间int *x1, *y1, *z1;cudaMalloc((void**)&x1, msize);cudaMalloc((void**)&y1, msize);cudaMalloc((void**)&z1, msize); // Host => DevicecudaMemcpy(x1, a1, msize, cudaMemcpyHostToDevice);cudaMemcpy(y1, b1, msize, cudaMemcpyHostToDevice);// printf("Check result: %d \n", x1[1]);// printf("Check result: %d \n", y1[1]);int grid_rows = (matrix_size + BLOCK_SIZE - 1) / BLOCK_SIZE;int grid_cols = (matrix_size + BLOCK_SIZE - 1) / BLOCK_SIZE;dim3 gridDim(grid_cols, grid_rows);dim3 blockDim(BLOCK_SIZE, BLOCK_SIZE);// 计算matrix_multi<<<gridDim, blockDim>>>(x1, y1, z1, matrix_size);// Device => HostcudaMemcpy(c1, z1, msize, cudaMemcpyDeviceToHost);printf("Check result c1: %d \n", c1[1]);// 释放空间cudaFreeHost(a1);cudaFreeHost(b1);cudaFreeHost(c1);cudaFree(x1);cudaFree(y1);cudaFree(z1);return 0;
}

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

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

相关文章

Golang的Channel源码阅读、工作流程分析。

Channel整体结构 源码位置 位于src/runtime下的chan.go中。 Channel整体结构图 图源&#xff1a;https://i6448038.github.io/2019/04/11/go-channel/ Channel结构体 type hchan struct {qcount uint // total data in the queuedataqsiz uint // si…

lightGBM的学习整理

执行步骤 1、初始化&#xff0c;选择一个初始模型&#xff0c;通常是一个常数&#xff0c;比如分类问题中内的类别概率的先验值&#xff0c;回归问题中的目标变量的平均值。 2、训练决策树&#xff0c;对于每一轮迭代&#xff0c;计算当前模型的梯度&#xff08;损失函数的负…

外汇天眼:投其所好精设“杀猪盘”!假冒平台诈骗360万!

近年来&#xff0c;愈来愈多民众有感于物价急速上涨&#xff0c;为了避免因为通胀而导致资产持续缩水&#xff0c;纷纷开始寻找可以获利的投资机会&#xff0c;没想到却因此落入诈骗集团的陷阱&#xff0c;蒙受极大的财务损失。 最近外汇天眼就收到一位受害者针对IMX的爆料&…

亚信安慧AntDB:数据库自主创新的缩影

AntDB作为一款自主研发的数据库系统&#xff0c;具备了国产化升级改造的核心能力。这款数据库系统通过不懈努力和持续探索&#xff0c;实现了从跟随他人到引领潮流的华丽转身。AntDB不仅仅是一种技术产品&#xff0c;更是体现了自主研发能力的缩影&#xff0c;体现了科技企业在…

错误: 在字段 “id“ 中空值违反了非空约束

AUTO(0, “数据库ID自增”), INPUT(1, “用户输入ID”), ID_WORKER(2, “全局唯一ID”), UUID(3, “全局唯一ID”), NONE(4, “该类型为未设置主键类型”), ID_WORKER_STR(5, “字符串全局唯一ID”); TableId(value “id”,type IdType.INPUT) // 主键手动输入

操作系统---第一课

操作系统&#xff1a; 控制和管理整个计算机系统的硬件和软件资源。向上层提供方便易使用的服务&#xff0c;是最接近硬件的一层软件。 功能&#xff1a;文件管理&#xff0c;存储器管理&#xff0c;设备管理&#xff0c;处理机管理。 操作系统的四个特征&#xff1a; 并发 &…

2024最新Android大厂面试真题大全,推荐学习

历时半年&#xff0c;我们终于整理出了这份市面上最全面的最新Android面试题解析大全&#xff01; 章节目录 第一章&#xff1a;Android 基础 面试题 第二章&#xff1a;Android 高级 面试题 第三章&#xff1a;开源框架实战面试解析 第四章&#xff1a;Java 面试题 第五章&a…

Sqli-labs靶场第15关详解[Sqli-labs-less-15]自动化注入-SQLmap工具注入

Sqli-labs-Less-15 #自动化注入-SQLmap工具注入 SQLmap用户手册&#xff1a;文档介绍 - sqlmap 用户手册 由于这题是post请求&#xff0c;所以先使用burp进行抓包&#xff0c;然后将数据包存入txt文件中打包 用-r 选择目标txt文件 python sqlmap.py -r data.txt -current-db…

SpringMVC框架③

目录 五、SpringMVC的视图 2、转发视图 3、重定向视图 六、HttpMessageConverter 1、RequestBody 2、RequestEntity 3、ResponseBody 4、SpringMVC处理json&#xff08;浅析&#xff09; 五、SpringMVC的视图 2、转发视图 SpringMVC中默认的转发视图是InternalResourc…

算法练习:双指针

目录 1. 双指针1.1 移动 "0"1.2 复写 "0"1.3 快乐数&#xff08;快慢指针&#xff09;1.4 盛水最多的容器&#xff08;单调性原则&#xff09;1.5 有效三角形个数1.6 两个数之和1.7 三数之和1.8 四数之和 1. 双指针 1.1 移动 “0” 题目信息&#xff1a; …

JS跳出for循环

此跳出只针对for循环 1、continue&#xff1b;跳出当次循环&#xff0c;进行下一个循环; function ceshi(){for(var i 0 ; i < 6 ; i){if(i 3){continue;}console.log(i);} }2、break&#xff1b;跳出当前循环&#xff0c;不在进行此循环&#xff1b;多个嵌套不影响外层…

1.4 简述“分组卷积”及其应用场景

1.4 简述“分组卷积”及其应用场景 普通卷积&#xff1a;在普通的卷积操作中&#xff0c;一个卷积核对应输出特征图的一个通道&#xff0c;而每个卷积核又会作用在输入特征图的所有通道上(即卷积核的通道数等于输入特征图的通道数)&#xff0c;因此最终输出特征图的每个通道都…

java 中的 接口与抽象类

接口 interfacepublic interface 接口名{// 静态常量 及 抽象方法}接口名: I接口名接口不允许 使用 new 进行实例化接口 与 class 区别接口中方法 都是抽象方法 abstract, 接口中的方法默认 增加 public abstract 前缀接口中的属性 默认 增加 public static final 前缀定义…

vue3组件通信

props方式 1.父传子 父组件传递 <template><Child :car"car"/> </template> <script setup lang"ts"> import {ref} from vue import Child from ./Child.vue let car ref(宝马) </script>子组件接收 <template>&l…

算法简单试题

一、选择题 01.一个算法应该是( B ). A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C 02&#xff0e;某算法的时间复杂度为O(n)&#xff0c;则表示该…

Python学习日记(二:函数和逻辑操作)

概述&#xff1a; 函数和逻辑操作在python中的地位是非常重要的&#xff0c;当然不只是在python中&#xff0c;几乎每一门编程语言都会用到这两样&#xff0c;所以打好基础对我们以后的学习非常重要&#xff0c;Python中的函数有很多都是已经封装好的&#xff0c;我们可以自己…

【C++实战项目】Date日期类 --- 运算符重载的深入探索

&#x1f4f7; 江池俊&#xff1a;个人主页 &#x1f525; 个人专栏&#xff1a;✅C那些事儿 ✅Linux技术宝典 &#x1f305; 此去关山万里&#xff0c;定不负云起之望 文章目录 引言一、为什么需要运算符重载&#xff1f;二、日期类的实现1. 基本框架2. 预备工作3. Date 类…

JimuReport积木报表 v1.7.1 版本发布,低代码报表工具

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

Qt应用软件【文件篇】读写文件技巧

文章目录 简介按照偏移读文件按照偏移写文件Qt按行写文件Qt按行读文件注意事项指定文件编码格式UTF8转GBK简介 Qt提供了丰富的API来处理文件读写操作,使得读写文件变得简单。 按照偏移读文件 QFile file("example.txt"); if (file.open(QIODevice::ReadOnly)) {q…

2024年冲刺年薪40w,Android岗面试

一个程序员&#xff0c;如果不想35 岁被淘汰&#xff0c;请把它当成一种信仰&#xff01; 25岁&#xff0c;一个北漂程序员&#xff0c;入职三年&#xff0c;Android中级工程师&#xff0c;月薪15k&#xff0c;965的工作经常干成996&#xff0c;比起老家的同龄人&#xff0c;我…