当前位置: 首页 > news >正文

CUDA笔记

CUDA笔记

nvidia-smi 命令使用

nvidiasmi -q:查询GPU详细信息;
nvidia-smi -q -l 0:查询特定GPU详细信息;
nvidia-smi -q -l 0 -d MEMORY:显示GPU特定信息;
nvidia-smi -h:英伟达的帮助命令。

Cuda 程序

CUDA 核函数
注意事项:
1、核函数在 GPU 上进行并行执行;
2、注意:
(1) 核函数必须有 gloabl 进行修饰,限定词 global 修饰;
(2)返回值必须是 void;
3、形式:
(1)global void kernel_function(argument arg)
{
printf(“Hello World from the GPU! \n”);// gpu 的输出只能使用 printf 函数
}
(2)void global kernel_function(argument arg)
{
printf(“Hello World from the GPU! \n”);// gpu 的输出只能使用 printf 函数
}
核函数不同于其他函数的注意事项:

  • 核函数只能访问 GPU 内存;(不能访问 CPU 内存 (host),只能访问 GPU 内存 (device))
  • 核函数不能使用变长参数;(需要明确参数的个数)
  • 核函数不能使用静态变量;
  • 核函数不能使用函数指针;
  • 核函数具有异步性(由于 cpu 和 gpu 之间是异构的,所以 cpu 不会了解 gpu 线程是否执行完毕,需要显示的调用同步函数)。

CUDA 程序编写流程:

	int main(void){主机代码;核函数调用;主机代码;return 0;}
注意:核函数不支持 C++ 的 iostream。

cuda 代码:

// 文件命名后缀  **.cu
# include <stdio.h>
__global__ void hello_from_gpu()
{printf("Hello World from the GPU! \n");
}int main(void)
{hello_from_gpu<<<4, 4>>>();  // 第一个指的是线程块 blocks(x, y, z),第二个指的是每个线程块threads(x, y, z)cudaDeviceSynchronize();return 0;
}

CUDA 线程模型

线程模型结构:

  • 线程模型的重要概念:
    (1)grid:网格; (2)block 线程块。
  • 线程分块是逻辑上的划分,物理上线程部分块;
  • 配置线程 <<<grid_size, block_size>>>
  • 最大允许线程块大小:1024
    最大允许网格大小:2^31 - 1 (针对一维网格)

一维的线程模型

  • 每个线程在核函数中都有唯一的身份标识;
  • 每个线程的唯一标识由这两个<<< grid_size, block_size>>>确定;grid_size,block_size 保存在内建变量(build-in varibale), 目前考虑的是唯一的情况:
    (1)gridDim.x:该变量的数值等于执行配置中变量grid_size的值;
    (2)blockDim.x:该变量的数值等于执行配置文件中变量 block_size 的值。
  • 线程索引保存成内建变量(build-in variable):
    (1)blockIdx.x:该变量指定一个线程在一个网格中的线程块索引值,范围是0 ~ gridDim.x - 1;
    (2)threadIdx.x:该变量指定一个线程在一个线程块中的线程索引值,范围是0 ~ blockDim.x - 1;

代码:

# include <stdio.h>__global__ void hello_from_gpu(){const int bid = blockIdx.x;const int tid = threadIdx.x;const int id = threadIdx.x + blockIdx.x *  blockDim.xprintf(" Hello Wordl from block %d and thread %d, global id %d! \n", blockIdx.x, threadIdx.x, id);}int main(void){hello_from_gpu<<<4, 4>>>();cudaDeviceSynchrinize();}

推广到多维线程

1、CUDA 可以组织三维的网格和线程块;
2、blockIdx 和 threadIdx 是类型为 uint3 的变量,该类型是一个结构体,具有(x, y, z)三个成员:
blockIdx.x; blockIdx.y; blockIdx.z
threadIdx.x; threadIdx.y; threadIdx.z
注意:内建变量只在核函数中有用,且无需定义!

定义多维网格和线程块

dim3 grid_size(Gx, Gy, Gz);
dim3 block_size(Bx, By, Bz);

多维网格和线程块的限制条件

  • 网格大小限制:
    gridDim.x 最大值: 2^31 - 1;
    gridDim.y 最大值: 2^31 - 1;
    gridDim.z 最大值: 2^16 - 1;
  • 线程块大小的限制:
    blockDim.x 最大值:1024;
    blockDim.y 最大值:1024;
    blockDim.z 最大值:64;
    注意:线程总数不能超过1024;

相关文章:

CUDA笔记

CUDA笔记 nvidia-smi 命令使用 nvidiasmi -q&#xff1a;查询GPU详细信息&#xff1b; nvidia-smi -q -l 0&#xff1a;查询特定GPU详细信息&#xff1b; nvidia-smi -q -l 0 -d MEMORY&#xff1a;显示GPU特定信息&#xff1b; nvidia-smi -h&#xff1a;英伟达的帮助命令。…...

Open CASCADE学习| ​提取曲面的PCurve

PCurve这个概念&#xff0c;字面上来理解就是参数曲线&#xff08;Parametric Curve&#xff09;。参数空间曲线是在参数曲面的双参数空间中的二维样条曲线。 二维曲线定义的目的只有一个&#xff1a;pCurve&#xff0c;参数曲线。OCC采用参数法构建几何结构&#xff0c;所有的…...

GMS测试BTSfail-CVE-2022-20451

描述&#xff1a; 项目需要过GMS兼容性测试&#xff0c;BTS这块我们环境没有&#xff0c;送检之后出现了一个BTS的Alert&#xff0c;这个是必须要解决的。下面的warning可以不考虑。 这个是patch问题&#xff0c;根据代理提供的pdf文件找到一个id:为A-235098883的补丁&#xf…...

Vue学习笔记12--Vue3之setup/ref函数/reactive函数/Vue3响应式原理/reactive对比ref

一、拉开序幕的setup 理解&#xff1a;Vue3中一个新的配置项&#xff0c;值为一个函数。setup是所有Composition API(组合API&#xff09;表演的舞台。组件中所用到的&#xff1a;数据、方法等&#xff0c;均要配置在setup中。setup函数的两种返回值&#xff1a; 若返回一个对…...

座位预约|座位预约小程序|基于微信小程序的图书馆自习室座位预约管理系统设计与实现(源码+数据库+文档)

座位预约小程序目录 目录 基于微信小程序的图书馆自习室座位预约管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员服务端功能模块 2、学生微信端功能模块 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …...

03 Redis之命令(基本命令+Key命令+String型Value命令与应用场景)

Redis 根据命令所操作对象的不同&#xff0c;可以分为三大类&#xff1a;对 Redis 进行基础性操作的命令&#xff0c;对 Key 的操作命令&#xff0c;对 Value 的操作命令。 3.1 Redis 基本命令 一些可选项对大小写敏感, 所以应尽量将redis的所有命令大写输入 首先通过 redis-…...

go语言函数进阶

1.变量作用域 全局变量 全局变量是定义在函数外部的变量&#xff0c;它在程序整个运行周期内都有效。 在函数中可以访问到全局变量。 package mainimport "fmt"//定义全局变量num var num int64 10func testGlobalVar() {fmt.Printf("num%d\n", num) /…...

Python编程技巧 – 函数参数

Python编程技巧 – 函数参数 Python Programming Skills - Functional Parameters 1. 函数的定义 函数有简明扼要的定义。 函数是一个代码块&#xff0c;仅在调用时运行。可以将数据&#xff08;称为参数&#xff09;传递到函数中。函数可以返回数据作为结果。 2. 函数的结…...

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子管理实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…...

LabVIEW扫频阻抗测试系统

实现扫频阻抗法用于检测变压器绕组变形&#xff0c;结合了短路阻抗法和频响法的优点&#xff0c;但受限于硬件精度&#xff0c;尤其是50 Hz短路阻抗测试存在稳定性和准确性的问题。通过LabVIEW编程&#xff0c;控制宽频带信号发生器和高速采集卡&#xff0c;提高测试结果的稳定…...

C语言——指针进阶(四)

目录 一.前言 二.指针和数组笔试题解析 2.1 二维数组 2.2 指针笔试题 三.全部代码 四.结语 一.前言 本文我们将迎来指针的结尾&#xff0c;包含了二维数组与指针的试题解析。码字不易&#xff0c;希望大家多多支持我呀&#xff01;&#xff08;三连&#xff0b;关注&…...

Django介绍

一、介绍 Django是Python语言中的一个Web框架&#xff0c;Python语言中主流的web框架有Django、Tornado、Flask 等多种 优势&#xff1a;大而全&#xff0c;框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等功能&#xff0c;是一个全能型框架&#xff0c;拥有自己的A…...

【idea】几个不错的idea插件让我码速又快了

目录 前言 Gradianto插件 jclasslib Bytecode viewer插件 Grep Console 插件 GenerateAllSetter 插件 GsonFormat 插件 JRebel and XRebel 插件 leetcode editor 插件 maven helper 插件 SequenceDiagram 插件 Statistic 插件 Translation 插件 前言 idea可以说是j…...

LabVIEW直流电机转速检测与控制

研究了使用LabVIEW软件和ELVIS实验平台来检测和控制直流电机的转速。通过集成光电传感器和霍尔传感器&#xff0c;实现了对电机转速的精确测量和调节。 系统组成&#xff1a;系统由NI ELVIS实验平台、光电传感器、霍尔传感器和直流电机组成。通过这些硬件元件&#xff0c;系统…...

༺༽༾ཊ—Unity之-05-抽象工厂模式—ཏ༿༼༻

首先创建一个项目&#xff0c; 在这个初始界面我们需要做一些准备工作&#xff0c; 建基础通用文件夹&#xff0c; 创建一个Plane 重置后 缩放100倍 加一个颜色&#xff0c; 任务&#xff1a;使用 抽象工厂模式 创建 人物与宠物 模型&#xff0c; 首先资源商店下载 人物与宠物…...

力扣面试题02.07-链表相交

链表相交 题目链接 解题思路&#xff1a; 题目可以确定如果相交&#xff0c;那么相交的部分一定是在链表的结尾部分第一步求得两条链表的长度第二步长度做差&#xff0c;将长的那条链表与短的那条链表后部分对其第三步遍历后面的部分&#xff0c;如果当前节点相等&#xff0c;…...

Java集合-ArrayList

集合就是一个保存数据的容器。在计算机中引入集合&#xff0c;是为了便于处理一组类似的数据。Java标准库自带的java.util包提供了集合相关的接口和实现类&#xff1a;Collection接口&#xff0c;它是除了Map接口外所有其他集合类的根接口。 Java的Java.uitl包主要提供以下三种…...

数据结构·单链表经典例题

1. 移除链表元素 OJ链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 本题是说给出一个链表的头节点head和一个整数val&#xff0c;如果发现节点中存的数据有val就删掉它&#xff0c;最后返回修改后的链表头节点地址 如果题目中没有明确…...

Linux常用指令的整合

之前面试被问到了Linux相关的指令&#xff0c;所以我整理的一份常用的Linux指令列表&#xff0c;适用于大多数Linux发行版&#xff0c;现分享给大家&#xff1a; 文件操作 ls&#xff1a;列出目录内容。cd [目录]&#xff1a;更改当前目录。pwd&#xff1a;显示当前目录路径。m…...

阿里云centos安装mysql,并修改初始密码

阿里云centos安装mysql&#xff0c;并修改初始密码 安装数据库、修改初始密码、并测试建立自己的数据库步骤1&#xff1a;创建数据库和用户步骤2&#xff1a;配置Nginx1. 创建新的站点配置文件2. 编辑配置文件3. 保存并退出编辑器4. 测试配置文件是否正确5. 重新加载 Nginx 以应…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...