CUDA的设备,流处理器(Streams),核,线程块(threadblock),线程,网格(‌gridDim),块(block)和多gpu设备同步数据概念

CUDA的设备,流处理器,核,线程块(threadblock),线程,网格(‌gridDim),块(block)和多gpu设备同步数据概念

CUDA的设备,流处理器,核,线程块(threadblock),线程,网格(‌gridDim),块(block)和多gpu设备同步数据概念

  • CUDA的设备,流处理器,核,线程块(threadblock),线程,网格(‌gridDim),块(block)和多gpu设备同步数据概念
  • 前言
    • 一、介绍CUDA编程的并行原理,了解线程、线程块、网格等概念,了解CUDA的同步机制
      • blockSize(线程块尺寸)‌
      • gridSize(网格尺寸)‌
    • 二、CUDA流的应用:CUDASTREAM,CUDA流的使用、同步,用CUDA流完成矩阵运算
      • 1 流Streams在GPU上按顺序的操作
      • 2 多GPU 编码
  • 总结


在这里插入图片描述

前言

在这里插入图片描述
SIMT和SIMD

CUDA执行的是SIMT架构(单指令多线程架构),SIMT和SIMD(Single Instruction, Multiple Data)类似,SIMT应该算是SIMD的升级版,更灵活,但效率略低,SIMT是NVIDIA提出的GPU新概念。二者都通过将同样的指令广播给多个执行官单元来实现并行。一个主要的不同就是,SIMD要求所有的vector element在一个统一的同步组里同步的执行,而SIMT允许线程们在一个warp中独立的执行。

一、介绍CUDA编程的并行原理,了解线程、线程块、网格等概念,了解CUDA的同步机制

基于硬件的支持,通过cuda来实现对底层GPU的调用,关于这部分内容,首先需要熟悉一些关键名词。
在这里插入图片描述
在这里插入图片描述

thread:一个CUDA的并行程序会被以许多个thread来执行,每个thread都有自己的register 和 local memory 的空间。
block:数个thread会组成一个block,同一个block中的thread可以同步运行,他们通过shared memory来进行通信。
grid:多个block则会再构成grid,每个grid会有自己的global memory、constant memory 和 texture memory。
warp:warp是SM的基本执行单元,一个block里面的线程,通过warp进行调用,使用SIMT模式。如A100机器,每个warp可以执行32个thread。

....
// 2D int thread = 16;int grid = (numRows()*numCols() + thread - 1)/ (thread * thread);const dim3 blockSize(thread, thread);const dim3 gridSize(grid);rgba_to_greyscale<<<gridSize, blockSize>>>(d_rgbaImage, d_greyImage, numRows(), numCols());
.....

blockSize(线程块尺寸)‌

类型为dim3,表示每个线程块包含的线程数量13

在示例中dim3 blockSize(thread, thread)创建了二维线程块,每块包含thread×thread个线程5

每个线程块最大线程数限制为102457

同一线程块内的线程可通过共享内存通信

gridSize(网格尺寸)‌

类型为dim3,表示网格中包含的线程块数量

在示例中dim3 gridSize(grid)创建了一维网格,包含grid个线程块3

最大网格维度为65535(x/y/z方向)

‌执行配置<<<gridSize, blockSize>>>‌

该语法指定核函数启动时的并行执行结构35

总线程数 = gridSize.x * gridSize.y * gridSize.z * blockSize.x * blockSize.y * blockSize.z13

二、CUDA流的应用:CUDASTREAM,CUDA流的使用、同步,用CUDA流完成矩阵运算

在这里插入图片描述

1 流Streams在GPU上按顺序的操作

在这里插入图片描述

  1. 定义流
  2. 创建流
  3. 使用流
  4. 销毁流
//1. 定义流 cudaStream_t s1;//2. 创建流cudaStreamCreate(&s1);//3. 使用流cudaMemcpyAsync(...., s1);//4. 销毁流cudaStreamDestroy(s1);

在这里插入图片描述

2 多GPU 编码

  • 两个GPU之间数据访问是通过PCIe

在这里插入图片描述

  int gpu1 = 0;int gpu2 = 1;void* d_A = NULL;//1. 设置当前使用gpu索引idcudaSetDevice(gpu1);cudaMalloc(&d_A, 1024);int accessible = 0;cudaDeviceCanAccessPeer(&accessible, gpu1, gpu2);if (accessible){cudaSetDevice(gpu2);//设置gpu2 可以访问gpu1的内存地址cudaDeviceEnablePeerAccess(gpu1, 0);// kernel<<<x, y, z>>>核心函数}
  • 两个GPU设备之间的数据拷贝函数 字节

cudaMemcpyPeerAsync(void* dst, int dstDevice, const void* src, int srcDevice, size_t count, cudaStream_t stream );

  1. 如果两个设备允许字节在最短的PCIe路径PCIe路径上传输
  2. 如果两个设备不允许CUDA驱动通过CPU驱动通过CPU memory传输

CUDA Device Query (Runtime API) version (CUDART static linking)Detected 1 CUDA Capable device(s)Device 0: "NVIDIA GeForce MX150"CUDA Driver Version / Runtime Version          12.9 / 12.9CUDA Capability Major/Minor version number:    6.1Total amount of global memory:                 2048 MBytes (2147352576 bytes)
MapSMtoCores for SM 6.1 is undefined.  Default to use 192 Cores/SM
MapSMtoCores for SM 6.1 is undefined.  Default to use 192 Cores/SM( 3) Multiprocessors x (192) CUDA Cores/MP:    576 CUDA CoresGPU Clock rate:                                1532 MHz (1.53 GHz)Memory Clock rate:                             3004 MhzMemory Bus Width:                              64-bitL2 Cache Size:                                 524288 bytesMax Texture Dimension Size (x,y,z)             1D=(131072), 2D=(131072,65536), 3D=(16384,16384,16384)Max Layered Texture Size (dim) x layers        1D=(32768) x 2048, 2D=(32768,32768) x 2048Total amount of constant memory:               65536 bytesTotal amount of shared memory per block:       49152 bytesTotal number of registers available per block: 65536Warp size:                                     32Maximum number of threads per multiprocessor:  2048Maximum number of threads per block:           1024Maximum sizes of each dimension of a block:    1024 x 1024 x 64Maximum sizes of each dimension of a grid:     2147483647 x 65535 x 65535Maximum memory pitch:                          2147483647 bytesTexture alignment:                             512 bytesConcurrent copy and kernel execution:          Yes with 5 copy engine(s)Run time limit on kernels:                     YesIntegrated GPU sharing Host Memory:            NoSupport host page-locked memory mapping:       YesAlignment requirement for Surfaces:            YesDevice has ECC support:                        DisabledDevice supports Unified Addressing (UVA):      YesDevice PCI Bus ID / PCI location ID:           2 / 0Compute Mode:< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 12.9, CUDA Runtime Version = 12.9, NumDevs = 1, Device0 = NVIDIA GeForce MX150

总结

CUDA项目源码地址:https://github.com/chensongpoixs/ccuda

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

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

相关文章

解码AI教育革命的核心价值链:算法、神经界面与数字基建

在技术重构教育的深层变革中&#xff0c;三个核心价值维度正在重塑行业本质。这些价值创造点突破传统教育范式&#xff0c;形成万亿级市场的战略锚点。 一、认知算法的效能革命 深度学习模型正以量子级速度突破教学效率天花板。基于NVIDIA H200的超算集群&#xff0c;认知诊断…

WebSocket 从入门到进阶实战

好记忆不如烂笔头&#xff0c;能记下点东西&#xff0c;就记下点&#xff0c;有时间拿出来看看&#xff0c;也会发觉不一样的感受. 聊天系统是WebSocket的最佳实践&#xff0c;以下是使用WebSocket技术实现的一个聊天系统的关键代码&#xff0c;可以通过这些关键代码&#xff…

边缘云的定义、实现与典型应用场景!与传统云计算的区别!

一、什么是边缘云&#xff1f;‌ 边缘云是一种‌分布式云计算架构‌&#xff0c;将计算、存储和网络资源部署在‌靠近数据源或终端用户的网络边缘侧‌&#xff08;如基站、本地数据中心或终端设备附近&#xff09;&#xff0c;而非传统的集中式云端数据中心。 ‌核心特征‌&…

【爬虫】12306自动化购票

上文&#xff1a; 【爬虫】12306查票-CSDN博客 下面是简单的自动化进行抢票&#xff0c;只写到预定票&#xff0c;没有写完登陆&#xff0c; 跳出登陆后与上述代码同理修改即可。 感觉xpath最简单&#xff0c;复制粘贴&#xff1a; 还有很多写法&#xff1a; 官网地址&#…

Docker 推出强化镜像以增强容器安全性

Docker 推出了Docker Hardened Images&#xff0c;这是一个企业级、安全强化的容器镜像目录&#xff0c;旨在防御软件供应链威胁。Docker 表示&#xff0c;通过减轻 DevOps 团队自行保护容器安全的繁琐工作&#xff0c;强化镜像提供了一种更简便的方式来满足企业级安全和合规性…

SQLMesh 宏操作符详解:@IF 的条件逻辑与高级应用

SQLMesh 的 IF 宏提供了一种在 SQL 查询中嵌入条件逻辑的方法&#xff0c;允许根据运行时条件动态调整查询结构。本文深入探讨 IF 的语法、使用场景及实际案例&#xff0c;帮助开发者构建更灵活、可维护的 SQL 工作流。 1. IF 宏简介 IF 是 SQLMesh 提供的条件逻辑宏&#xff…

SpringBoot为什么要禁止循环依赖?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot为什么要禁止循环依赖?】面试题。希望对大家有帮助&#xff1b; SpringBoot为什么要禁止循环依赖? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot&#xff08;以及Spring框架&#xff09;禁止循…

塔能科技:工厂能耗精准节能全方位解决方案

在工业生产中&#xff0c;工厂能耗管理是企业运营的关键环节。随着制造业的快速发展&#xff0c;工厂对能源的需求持续攀升&#xff0c;然而能耗监测与管理难题却成为众多企业实现节能增效的阻碍。塔能科技凭借在智慧物联节能领域的深厚积累&#xff0c;为工厂能耗精准节能打造…

无人机避障——深蓝学院浙大Ego-Planner规划部分

ESDF-free&#xff1a; 被这种类型的障碍物死死卡住的情况&#xff1a; 在一定范围内建立ESDF&#xff1a; Ego-Planner框架&#xff1a; 找到{p,v} pair&#xff1a; 【注意】&#xff1a;首先根据在障碍物内航迹上的点Q&#xff0c;以及与它相邻但不在障碍物内的两个点&#…

CentOS7挂载hgfs文件夹(VMware 共享文件夹)及网卡的自启动。

1、设置网卡自启动 # 启用网络服务 systemctl enable network # 修改网卡配置 # eth0 为网卡名称&#xff0c;修改那个网卡就改那个网卡&#xff0c;格式&#xff1a;ifcfg-网卡名 vim /etc/sysconfig/network-scrips/ifcfg-eth0 # 把ONBOOT设置为 yes&#xff0c;&#xf…

【LLIE专题】基于事件相机照度估计的暗光增强方案

Low-Light Image Enhancement using Event-Based Illumination Estimation&#xff08;2025&#xff0c;CVPR&#xff09; 专题介绍一、研究背景二、RETINEV方法1.事件相机2. 本文方案2.1 事件时间戳与光照的物理关系2.2 总体架构&#xff1a;Retinex 理论驱动的分解2.3 时间到…

腾讯云媒体AI解码全球视频出海智能密码

当短剧平台撞上多语种字幕困境&#xff0c;当直播电商遭遇文化审核危机&#xff0c;当经典影视困于格式壁垒——这些内容出海的难题&#xff0c;正被腾讯云媒体AI的智能引擎逐个破解。从东南亚的直播卡顿到中东的宗教符号雷区&#xff0c;从老片的低清画质到元宇宙的渲染瓶颈&a…

Spring Boot 多租户架构实现:基于上下文自动传递的独立资源隔离方案

一、核心设计思想 通过线程上下文自动传递租户ID&#xff0c;结合动态数据源路由和中间件连接工厂&#xff0c;实现MySQL、Redis、RocketMQ的完全自动化资源隔离。关键设计如下&#xff1a; #mermaid-svg-ZjXCGSWoCuNFMIch {font-family:"trebuchet ms",verdana,aria…

参与开发的注意事项

1.开发期间&#xff0c;不要擅自修改架构的内容 使用技术官发的项目文件夹来开发&#xff0c;而不是自己建立项目&#xff0c; 否则会导致环境不统一 架构内容&#xff1a;&#xff08;不能更改&#xff09; 1.类型定义&#xff0c;全局变量声明 2.函数申明&#xff08;函数名称…

产业互联网+三融战略:重构企业增长密码

产业互联网时代&#xff1a;用"三融"重构企业增长飞轮 在产业互联网浪潮下&#xff0c;企业面临资源分散、资金短缺、人才难聚的三重挑战。本文提出的"融人、融资、融资源"顶层设计&#xff0c;正为新时代企业构建增长新引擎。 一、三级合伙人体系&#x…

【JavaScript异步编程终极指南】从回调地狱到Async/Await的实战突围

目录 &#x1f30d; 前言&#xff1a;技术背景与价值&#x1f494; 当前技术痛点&#x1f6e0; 解决方案概述&#x1f465; 目标读者说明&#x1f50d; 一、技术原理剖析&#x1f9e0; 核心作用讲解&#x1f9e9; 关键技术模块说明⚖️ 技术选型对比 &#x1f4bb; 二、实战演示…

国标GB28181设备管理软件EasyGBS视频监控系统打造工厂可视化监管场景解决方案

一、引言​ 随着工厂规模扩大、生产流程复杂化&#xff0c;传统管理模式已难以满足精细化运营需求。当前部分工厂视频监控系统存在设备协议不兼容、功能分散等问题。EasyGBS视频监控系统基于GB28181标准协议&#xff0c;以高兼容性架构实现设备统一接入&#xff0c;集成视频全…

# 终端执行 java -jar example.jar 时(example.jar为项目jar包)报错:“没有主清单属性” 的解决方法

终端执行 java -jar example.jar 时&#xff08;example.jar为项目jar包&#xff09;报错&#xff1a;“没有主清单属性” 的解决方法 在Java中&#xff0c;一个JAR文件必须包含一个主清单属性&#xff08;Main-Class属性&#xff09;才能在命令行中直接运行。如果你在尝试运行…

使用 mutt 发送邮件:Linux 下轻量高效的命令行邮件工具

文章目录 一、安装 mutt二、配置 .muttrc三、发送一封简单邮件四、发送给多个收件人五、发送附件六、临时设置发件人七、脚本示例&#xff1a;八.结语 在 Linux 或类 Unix 系统中&#xff0c;mutt 是一款经典且强大的命令行邮件客户端&#xff08;MUA&#xff0c;邮件用户代理&…

OceanBase 开发者大会,拥抱 Data*AI 战略,构建 AI 数据底座

5 月 17 号以“当 SQL 遇见 AI”为主题的 OceanBase 开发者大会在广州举行&#xff0c;因为行程的原因未能现场参会&#xff0c;仍然通过视频直播观看了全部的演讲。总体来说&#xff0c;这届大会既有对未来数据库演进方向的展望&#xff0c;也有 OceanBase 新产品的发布&#…