首页 > 编程语言 >nvidia gpu结构简介和cuda编程入门

nvidia gpu结构简介和cuda编程入门

时间:2025-01-13 22:36:20浏览次数:1  
标签:GPU grid 线程 cuda SM nvidia gpu block CUDA

0. 前言

最近本人在写硕士大论文,需要写一些GPU相关的内容作为引言,所以在此总结一下。

1. NVIDIA GPU线程管理

image

CUDA的线程模型如上图,在调用一个CUDA函数时,需要定义grid和block的形状:
func<<<grid, block>>>();
在程序里定义的gridblock都是dim3类型的变量。当调用一个函数时,该函数会启动众多线程(thread)进行执行,所有的线程称为一个网格(grid)。一个grid又分为多个线程块(block),一个block由多个线程组成。

以上内容参见:https://ther-nullptr.github.io/posts/high-performance-computing/cuda/

2. NVIDIA GPU硬件结构

以上所说的grid和block都是软件层面的逻辑编程模型,在硬件上,一个GPU由多个SM组成,每个SM内部包含多个CUDA核心,一个CUDA核心就是一个单精度浮点数计算单元。

GPU在执行时,会把一个block调度到一个SM上,然后把block中的线程划分成线程束(wrap),每个线程束最多包含32个线程。需要注意,一个block只能被调度到一个SM上,然后warp scheduler会选择一个wrap执行。

3. CUDA逻辑线程和硬件CUDA core的调度对应关系

一个block会被调度到一个SM上,一个SM可以运行多个warps,至于具体不是很了解,感兴趣的读者可以阅读stackoverflow上的这个问题自学一下。

4. NVIDIA GPU的内存模型

image

这是本人论文中涉及到的部分。HBM是所有SM共享的全局显存,SRAM是每个SM中的L1 Cache和Shared Memory。GPU计算一个数据,必须先弄HBM送到SRAM中才能让每个core计算,core是不能直接读HBM的。至于Shared Memory和L1 Cache,实际上是一块内存,根据需要,将一部分分给Shared Memory,剩余部分就作为L1 Cache使用。

以上内容参见:https://zhuanlan.zhihu.com/p/677756901

标签:GPU,grid,线程,cuda,SM,nvidia,gpu,block,CUDA
From: https://www.cnblogs.com/wangbingbing/p/18669546

相关文章

  • 使用 Podman Desktop 在 Windows 11 WSL2 环境中启动宿主机的 GPU 进行深度学习
    使用PodmanDesktop在Windows11WSL2环境中启动宿主机的GPU进行深度学习概述本文将指导您如何利用PodmanDesktop安装时提供的WSL2环境,来启动宿主机的GPU进行深度学习任务。前提条件确保您的Windows11已经启用了WSL2和虚拟化功能,并且安装了最新版本的NVIDI......
  • NVIDIA GPU Operator
    NVIDIAGPUOperator是一个用于在Kubernetes集群上自动化部署、配置和管理NVIDIAGPU及相关硬件资源的工具。它通过KubernetesOperator框架来实现自动化管理,简化了在Kubernetes环境中使用GPU的过程。以下是NVIDIAGPUOperator的主要功能和组件:###主要功能1.**自......
  • 无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型
    无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型随着人工智能技术的快速发展,越来越多的AI模型被广泛应用于各个领域。然而,运行这些模型通常需要高性能的硬件支持,特别是GPU(图形处理器),这往往导致较高的成本门槛。为了打破这一限制,开源AI项目LocalAI提供了一种......
  • 无需昂贵GPU:本地部署开源AI项目LocalAI你在消费级硬件上运行大模型
    前言本文主要介绍如何在本地服务器部署无需依托高昂价格的GPU,也可以在本地运行离线AI项目的开源AI神器LoaclAI,并结合cpolar内网穿透轻松实现远程使用的超详细教程。随着AI大模型的发展,各大厂商都推出了自己的线上AI服务,比如写文章的、文字生成图片或者视频的......
  • CUDA_VISIBLE_DEVICES
    CUDA_VISIBLE_DEVICESflyfishCUDA_VISIBLE_DEVICES是一个环境变量,它用于控制哪些GPU设备对CUDA应用程序可见。通过设置这个环境变量,可以指定应用程序可以使用的特定GPU,而忽略其他。当你在命令行中使用exportCUDA_VISIBLE_DEVICES=0,1,2,3或者exportCUDA_VISIB......
  • 集智书童 | 清华大学/NVIDIA/斯坦福等在没有3D数据的情况下训练一个开放词汇的单目3D
    本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。原文链接:清华大学/NVIDIA/斯坦福等在没有3D数据的情况下训练一个开放词汇的单目3D物体检测模型!最近,由于其在自动驾驶和机器人领域的广泛应用,无词汇3D目标检测受到了广泛关注,该方法旨在有效识别以前未见过的领域......
  • CPU、MCU、MPU、SOC、DSP、ECU、GPU、FPGA傻傻分不清楚?一文讲清它们的区别
    前言在电子领域中,我们经常提到CPU、MCU、MPU、SOC、DSP、ECU、GPU、FPGA等,它们都是常见的芯片或处理器类型,但是却在结构、功能和应用场景上存在着显著的差异。有些朋友可能不太能区分,今天我们就来依次介绍一下。一、定义与功能1、CPU(CentralProcessingUnit,中央处理器)定义:是......
  • 解锁新应用:探索GPU扩展是如何提升渲染农场的工作效率
    渲染农场是一种基于计算机GPU集群的渲染解决方案,主要用于分布式渲染。它将渲染任务分发到多个计算机(渲染节点)上,通过GPU并行计算和协同工作,实现大规模的3D渲染任务,从而提高渲染效率和速度。渲染农场广泛应用于影视制作、三维动画、游戏开发、广告设计、建筑可视化设计等领域。联瑞......
  • cuda profiler
    cudaapi的采样主要cudart提供了profiler的接口,定义在cuda_profiler_api.h文件中,下面的代码是一个例子。参考https://blog.csdn.net/weixin_43603658/article/details/130441136,可以看到使用cudaProfilerStart和cudaProfilerEnd可以查看程序中指定段的性能数据。nsys在这个基础......
  • C# 调用YoloSharp.Gpu,调用Microsoft.ML.OnnxRuntime.Gpu出错126
    今天使用C#调用YoloSharp.Gpu,加载onnx模型,然后检测,代码很简单。//LoadtheYOLOpredictorpredictor??=newYoloPredictor(@"pathtoyour.onnx");//Runmodelvarresult=predictor.Detect(@"pathtoyourimage");一运行就爆错ONNXRuntimeError:1:FAIL:LoadL......