这里先仅仅关注 C++ 层的介绍,python DSL 以后再说。

在 ubuntu 22.04 X64 中,RTX 5080

1. 环境搭建

1.1 安装 cuda

1.2 下载源码

git clone 	https://github.com/NVIDIA/cutlass.git

1.3 编译

mkdir build/
cmake .. -DCUTLASS_NVCC_ARCHS="120" -DCMAKE_BUILD_TYPE="Debug"
make -j20

如果内存不是太大,cpu核心不是太多,那么可以使用 make -j8 等较小的编译线程数量。

查看生成的文件:

2. 调试一个示例

cutlass/examples/cute/tutorial/sgemm_1.cu

2.1 先跑起来

build/examples/cute/tutorial$ ./cute_tutorial_sgemm_1 

2.2 调试一下

启动调试器,启动程序,进入 main 函数:

build/examples/cute/tutorial$ cuda-gdb ./cute_tutorial_sgemm_1
(cuda-gdb) layout src
(cuda-gdb) start

接下来定义了矩阵A、B、C:

其中 初始化 gpu 的函数 cute::device_init(0) 的代码内容如下:

其中,thrust::host_vector<> () 是使用 c++ new表达式申请的内存。

而 thrust::device_vector<> () 是使用 cudaMalloc 申请的显存:

赌一把:

(cuda-gdb) break  cudaMalloc
(cuda-gdb) continue 
(cuda-gdb) bt

可以看到停在了 cudaMalloc() 函数上。

会调用到 gemm_device():

接下来分析一下这个 kernel 的实现:

这个kernel 代码比较长,我们一段段地分析:


template <class ProblemShape, class CtaTiler,class TA, class AStride, class ASmemLayout, class AThreadLayout,class TB, class BStride, class BSmemLayout, class BThreadLayout,class TC, class CStride, class CSmemLayout, class CThreadLayout,class Alpha, class Beta>
__global__ static
__launch_bounds__(decltype(size(CThreadLayout{}))::value)
void
gemm_device(ProblemShape shape_MNK, CtaTiler cta_tiler,TA const* A, AStride dA, ASmemLayout sA_layout, AThreadLayout tA,TB const* B, BStride dB, BSmemLayout sB_layout, BThreadLayout tB,TC      * C, CStride dC, CSmemLayout          , CThreadLayout tC,Alpha alpha, Beta beta)
{using namespace cute;// PreconditionsCUTE_STATIC_ASSERT_V(rank(shape_MNK) == Int<3>{});                   // (M, N, K)CUTE_STATIC_ASSERT_V(rank(cta_tiler) == Int<3>{});                   // (BLK_M, BLK_N, BLK_K)static_assert(is_static<AThreadLayout>::value);static_assert(is_static<BThreadLayout>::value);static_assert(is_static<CThreadLayout>::value);CUTE_STATIC_ASSERT_V(size(tA) == size(tB));                          // NumThreadsCUTE_STATIC_ASSERT_V(size(tC) == size(tA));                          // NumThreadsCUTE_STATIC_ASSERT_V(size<0>(cta_tiler) % size<0>(tA) == Int<0>{});  // BLK_M / THR_MCUTE_STATIC_ASSERT_V(size<2>(cta_tiler) % size<1>(tA) == Int<0>{});  // BLK_K / THR_KCUTE_STATIC_ASSERT_V(size<1>(cta_tiler) % size<0>(tB) == Int<0>{});  // BLK_N / THR_NCUTE_STATIC_ASSERT_V(size<2>(cta_tiler) % size<1>(tB) == Int<0>{});  // BLK_K / THR_KCUTE_STATIC_ASSERT_V(size<0>(cta_tiler) % size<0>(tC) == Int<0>{});  // BLK_M / THR_MCUTE_STATIC_ASSERT_V(size<1>(cta_tiler) % size<1>(tC) == Int<0>{});  // BLK_N / THR_Nstatic_assert(is_static<ASmemLayout>::value);static_assert(is_static<BSmemLayout>::value);static_assert(is_static<CSmemLayout>::value);CUTE_STATIC_ASSERT_V(size<0>(ASmemLayout{}) == size<0>(cta_tiler));  // BLK_MCUTE_STATIC_ASSERT_V(size<0>(CSmemLayout{}) == size<0>(cta_tiler));  // BLK_MCUTE_STATIC_ASSERT_V(size<0>(BSmemLayout{}) == size<1>(cta_tiler));  // BLK_NCUTE_STATIC_ASSERT_V(size<1>(CSmemLayout{}) == size<1>(cta_tiler));  // BLK_NCUTE_STATIC_ASSERT_V(size<1>(ASmemLayout{}) == size<2>(cta_tiler));  // BLK_KCUTE_STATIC_ASSERT_V(size<1>(BSmemLayout{}) == size<2>(cta_tiler));  // BLK_KCUTE_STATIC_ASSERT_V(congruent(select<0,2>(shape_MNK), dA));         // dA strides for shape MKCUTE_STATIC_ASSERT_V(congruent(select<1,2>(shape_MNK), dB));         // dB strides for shape NKCUTE_STATIC_ASSERT_V(congruent(select<0,1>(shape_MNK), dC));         // dC strides for shape MN

CUTE_STATIC_ASSERT_V(rank(shape_MNK) == Int<3>{});

为 ProblemShape shape_MNK 类型,

rank

未完待续

。。。。

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

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

相关文章

Python实现异步多线程Web服务器:从原理到实践

目录Python实现异步多线程Web服务器&#xff1a;从原理到实践引言第一章&#xff1a;Web服务器基础1.1 Web服务器的工作原理1.2 HTTP协议简介1.3 同步 vs 异步 vs 多线程第二章&#xff1a;Python异步编程基础2.1 异步I/O概念2.2 协程与async/await2.3 事件循环第三章&#xff…

Deep Think with Confidence:llm如何进行高效率COT推理优化

1. 引言:大模型的推理解码优化 大型语言模型(LLM)在处理数学、编码等复杂推理任务时,一种强大但“耗能巨大”的技术是self-consistency,也称并行思考(parallel thinking)。其核心思想是让模型对同一个问题生成多条不同的“思考路径”(reasoning traces),然后通过多数…

vscode克隆远程代码步骤

一、直接使用VsCode1.复制git的https链接代码2.在vscode中点击 代码管理-克隆仓库3.粘贴&#xff08;在git里面复制的https链接&#xff09;4.选择需要存储的文件位置5.确认6.代码克隆成功二、使用命令行克隆1.确定文件放置位置&#xff0c;右键2.复制git的https链接代码3.粘贴…

spi总线

一、介绍SPI总线&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;是一种高速全双工同步串行通信总线&#xff0c;核心通过“主从架构同步时钟”实现设备间数据传输&#xff0c;因结构简单、速率高&#xff0c;广泛用于MCU与传感器、存储芯片、显示…

COLA:大型语言模型高效微调的革命性框架

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 1 COLA技术概述 COLA&#xff08;Chain of LoRA&#xff09;是一种创…

数据结构与算法:线段树(三):维护更多信息

前言 这次的题思维上倒不是很难&#xff0c;就是代码量比较大。 一、开关 洛谷的这种板子题写起来比cf顺多了&#xff08;&#xff09; #include <bits/stdc.h> using namespace std;typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll&…

【LeetCode_27】移除元素

刷爆LeetCode系列LeetCode27题&#xff1a;github地址前言题目描述题目思路分析代码实现算法代码优化LeetCode27题&#xff1a; github地址 有梦想的电信狗 前言 本文用C实现LeetCode 第27题 题目描述 题目链接&#xff1a;https://leetcode.cn/problems/remove-element/ …

C++11语言(三)

一、引言上期我们介绍了C11的大部分特性。C11的初始化列表、auto关键字、右值引用、万能引用、STL容器的的emplace函数。要补充的是右值引用是不能取地址的&#xff0c;我们程序员一定要遵守相关的语法。操作是未定义的很危险。二、 仿函数和函数指针我们先从仿函数的形…

性能优化三剑客:`memo`, `useCallback`, `useMemo` 详解

性能优化三剑客&#xff1a;memo, useCallback, useMemo 详解 作者&#xff1a;码力无边各位React性能调优师&#xff0c;欢迎来到《React奇妙之旅》的第十二站&#xff01;我是你们的伙伴码力无边。在之前的旅程中&#xff0c;我们已经掌握了如何构建功能丰富的组件&#xff0…

好用的电脑软件、工具推荐和记录

固态硬盘读写测试 AS SSD Benchmark https://gitee.com/qlexcel/common-resource-backup/blob/master/AS%20SSD%20Benchmark.exe 可以测试SSD的持续读写、4K随机读写等性能。也可以测试HDD的性能。 操作非常简单&#xff0c;点击Start(开始)即可测试。 体积小&#xff0c;免安…

Spring Task快速上手

一. 介绍Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑&#xff0c;无需依赖额外组件&#xff08;如 Quartz&#xff09;&#xff0c;配置简单、使用便捷&#xff0c;适合处理周期性执行的任务&#xff08;如定时备份数据、定…

函数(2)

6.定义函数的终极绝杀思路&#xff1a;三个问题&#xff1a;1.我定义函数&#xff0c;是为了干什么事情 函数体、2.我干完这件事&#xff0c;需要什么才能完成 形参3.我干完了&#xff0c;调用处是否需要继续使用 返回值类型需要继续使用 必须写不需要返回 void小程序#include …

BGP路由协议(一):基本概念

###BGP概述 BGP的版本&#xff1a; BGP-1 RFC1105BGP-2 RFC1163BGP-3 RFC1267BGP-4 RFC1771 1994年BGP-4 RFC4271 2006年 AS Autonomous System 自治系统&#xff1a;由一个单一的机构或者组织所管理的一系列IP网络及其设备所构成的集合 根据工作范围的不同&#xff0c;动态路…

mit6.031 2023spring 软件构造 笔记 Testing

当你编码时&#xff0c;目标是使程序正常工作。 但作为测试设计者&#xff0c;你希望让它失败。 这是一个微妙但重要的区别。 为什么软件测试很难&#xff1f; 做不到十分详尽&#xff1a;测试一个 32 位浮点乘法运算 。有 2^64 个测试用例&#xff01;随机或统计测试效果差&am…

【Unity开发】Unity核心学习(三)

四、三维模型导入相关设置 1、Model模型页签&#xff08;1&#xff09;场景相关&#xff08;2&#xff09;网格相关&#xff08;3&#xff09;几何体相关2、Rig操纵&#xff08;骨骼&#xff09;页签 &#xff08;1&#xff09;面板基础信息&#xff08;i&#xff09;None&…

C#语言入门详解(17)字段、属性、索引器、常量

C#语言入门详解&#xff08;17&#xff09;字段、属性、索引器、常量前言一、字段 Field二、属性三、索引器四、常量内容来自刘铁猛C#语言入门详解课程。 参考文档&#xff1a;CSharp language specification 5.0 中文版 前言 类的成员是静态成员 (static member) 或者实例成…

Total PDF Converter多功能 PDF 批量转换工具,无水印 + 高效处理指南

在办公场景中&#xff0c;PDF 格式的 “不可编辑性” 常成为效率瓶颈 —— 从提取文字到格式转换&#xff0c;从批量处理到文档加密&#xff0c;往往需要多款工具协同。Total PDF Converter 破解专业版作为一站式 PDF 解决方案&#xff0c;不仅支持 11 种主流格式转换&#xff…

[Windows] WPS官宣 64位正式版(12.1.0.22525)全新发布!

[Windows] WPS官宣 64位正式版 链接&#xff1a;https://pan.xunlei.com/s/VOYepABmXVfXukzlPdp8SKruA1?pwdeqku# 自2024年5月&#xff0c;WPS 64位版本在WPS社区发布第一个内测体验安装包以来&#xff0c;在近一年多的时间里&#xff0c;经过超过3万名WPS体验者参与版本测试…

WinExec

函数原型&#xff1a; __drv_preferredFunction("CreateProcess","Deprecated. See MSDN for details") WINBASEAPI UINT WINAPI WinExec(__in LPCSTR lpCmdLine,__in UINT uCmdShow); preferred : 更好的 __drv_preferredFunction("CreateProcess…

基于GA遗传优化的双向LSTM融合多头注意力(BiLSTM-MATT)时间序列预测算法matlab仿真

目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 7.参考文献 8.算法完整程序工程 1.前言 时间序列预测是机器学习领域的重要任务&#xff0c;广泛应用于气象预报、金融走势分析、工业设备故障预警等场景。传统时间…