GPU
文章平均质量分 92
从善若水
本人就职于国际知名终端厂商,负责modem芯片研发。在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。
展开
-
【NVIDIA】如何使用nvidia-smi命令管理和监控GPU
当前各行各业都离不开GPU的加持,随着6G的研究进展,未来6G会是一个技术大融合的系统,其中就包括算力网络、AI、通信感知等对算力需求比较大的服务。下面我们学习一下GPU的管理和监控方法。原创 2024-10-01 11:19:09 · 1197 阅读 · 0 评论 -
安装cuda支持的opencv-python Windows版本(包含常见错误处理)
宏名值WITH-CUDAONONONONON上面都是布尔参数,下面配置的是opencv的外部库,执行配置过程,正常会失败,没关系我们还有一些参数没有配置宏名值ONRelease下面配置的是cudnn的库(一定要明确到具体的库文件,不能只定位到目录,感觉是bug进入cuda toolkit安装目录(默认安装目录),在cmd中执行可以看到博主的GPU能力是8.6,配置下面的宏定义宏名值8.6执行配置过程问题现象。原创 2024-08-18 20:57:58 · 1355 阅读 · 4 评论 -
【NVIDIA Jetpack6.0】Jetson AGX Orin内核、设备树更新指南
2024年5月4号,nvidia正式发布了Jetpack6.0版本,这个版本带来了很多功能,包括:- 新的cude、tensorrt等库,可以大幅提升AI推理性能(亲测提升很明显,所以才考虑从Jetpack5.1升级到最新版本);- 可以使用UpStreaming Linux内核版本,并且提供了实时内核;- 根文件系统升级到了Ubuntu2204;原创 2024-05-12 15:25:32 · 2545 阅读 · 1 评论 -
【NVIDIA CUDA】2023 CUDA夏令营编程模型(四)
CUDA流在加速应用程序方面起到重要的作用,他表示一个GPU的操作队列,操作在队列中按照一定的顺序执行,也可以向流中添加一定的操作如核函数的启动、内存的复制、事件的启动和结束等,添加的顺序也就是执行的顺序;- 一个流中的不同操作有着严格的顺序。但是不同流之间是没有任何限制的。多个流同时启动多个内核,就形成了网格级别的并行;- CUDA流中排队的操作和主机都是异步的,所以排队的过程中并不耽误主机运行其他指令,所以这就隐藏了执行这些操作的开销原创 2023-09-16 11:00:00 · 251 阅读 · 0 评论 -
【NVIDIA CUDA】2023 CUDA夏令营编程模型(三)
CUDA的原子操作可以理解为对一个Global memory或Shared memory中变量进行“读取-修改-写入”这三个操作的一个最小单位的执行过程,在它执行过程中,不允许其他并行线程对该变量进行读取和写入的操作。 基于这个机制,原子操作实现了对在多个线程间共享的变量的互斥保护,确保任何一次对变量的操作的结果的正确性。原创 2023-09-10 10:53:45 · 626 阅读 · 0 评论 -
【NVIDIA CUDA】2023 CUDA夏令营编程模型(二)
Local Memory and Global Memory:位于Device memory中,空间最大,latency最大,是GPU最基础的内存;实际驻留在GPU芯片上的内存只有两种类型:寄存器和共享内存。所以,Shared Memory是目前最快的可以让多个线程通信的地方。那么,就有可能会出现同时有很多线程访问Shared Memory上的数据。为了克服这个同时访问的瓶颈,Shared Memory被分成32个逻辑块,称为bank。原创 2023-08-27 14:32:27 · 728 阅读 · 0 评论 -
【NVIDIA CUDA】2023 CUDA夏令营编程模型(一)
_global__执行空间说明符将函数声明为内核。在设备上执行;可从主机调用,可在计算能力为 3.2或更高的设备调用;__global__ 函数必须具有 void 返回类型,并且不能是类的成员;对global函数的任何调用都必须指定其执行配置;对global函数的调用是异步的,这意味着它在设备完成执行之前返回;原创 2023-07-30 17:56:36 · 898 阅读 · 0 评论 -
【NVIDIA Jetpack5.x】Jetson AGX Orin内核、设备树更新指南
博文总结了如何快速更新Jetson AGX orin内核和设备树文件。官网提供的资料分散而且有些是错误的操作,博主踩坑了多次后整理成此文。原创 2023-07-02 14:05:05 · 5599 阅读 · 19 评论 -
【Nvidia】nvidia 高级特性MIG详细介绍(三)
本篇博文我们使用命令创建几个具体的GI。可以使用NVIDIA Management Library (NVML)APIs或其命令行接口nvidia-smi以编程方式管理MIG。请注意,为简洁起见,下面示例中的一些nvidia-smi输出可能会被裁剪,以展示感兴趣的相关部分。有关MIG命令的更多信息,请参阅nvidia-smi手册页或。原创 2023-04-08 21:00:44 · 2578 阅读 · 1 评论 -
【Nvidia】nvidia 高级特性MIG详细介绍(二)
MIG对于CUDA应用程序来说基本上是透明的,因此CUDA的编程模型可以保持不变,以降低编程工作量。CUDA已经公开了多种在GPU上并行运行工作的技术,下面展示了这些技术与MIG的比较。请注意,Streams和MPS是CUDA编程模型的一部分,因此可以在GPU实例中使用。CUDA Streams是一种CUDA编程模型特性,在CUDA应用程序中,不同的工作可以提交到独立的队列,并由GPU独立处理。CUDA Streams只能在单个进程内使用。原创 2023-04-02 23:00:11 · 2145 阅读 · 0 评论 -
【Nvidia】nvidia 高级特性MIG详细介绍(一)
新的多实例GPU(MIG)功能允许GPU(从NVIDIA Ampere architecture开始)安全地划分为最多7个独立的GPU实例,用于CUDA应用程序,为多个用户提供独立的GPU资源,以实现最佳的GPU利用率。此功能对于工作负载未完全饱和的GPU来说特别有益,因此用户可能希望并行运行不同的工作负载以最大化利用率。使用MIG,每个实例的处理器都有独立和隔离的路径通过整个存储系统,芯片上的crossbar端口,L2 cache,内存控制器和DRAM地址总线都被唯一地分配给一个单独的实例。原创 2023-02-07 09:15:00 · 3930 阅读 · 2 评论 -
【nvidia CUDA 高级编程】使用cub库优化分布式计算下的原子操作
cub是一个由 NVIDIA 提供的标头库,作为 CUDA 的一部分,可为内核中常用的原始操作提供接口,如归约和扫描操作。就目前而言,我们在cub中使用 BlockReduce 接口来执行模块级归约,然后只让每个模块中的线程“0”向对称数据`l2_norm`执行原子添加。如要使用cub,我们要先添加文件头:原创 2023-01-21 22:13:32 · 3160 阅读 · 0 评论 -
【nvidia CUDA 高级编程】NVSHMEM 直方图——复制式方法
在多个 GPU 上分配工作量的一种方法与我们在 𝜋 估算器上使用的方法相同:给定 𝑁 个整数,我们即可把它们均匀地分配到所有 GPU 上,然后可以对所有 PE 进行归约。我们将此称为**“复制式”方法**,因为在所有 GPU 上都存在完整的直方图副本。我们将第一步,即增加每个直方图桶内的计数值,命名为“列表”步骤;将合并所有 PE 上的结果的第二步命名为“结合”步骤,并分别计算时间(以便与下一个方法进行比较)。原创 2023-01-15 10:30:22 · 938 阅读 · 1 评论 -
【GPU】Nvidia CUDA 编程高级教程——NVSHMEM 内存模型
NVSHMEM 的内存分配 API nvshmem_malloc(),其工作方式有点类似于标准的cudaMalloc(),但cudaMalloc()会返回一个本地 GPU 的私有地址[^1]。**使用nvshmem_malloc()分配的对象称为对称数据对象**。**每个对称数据对象在所有 PE 上都有一个名称、类型和大小相同的对应数据对象。由nvshmem_malloc()返回的指针对应的虚拟地址称为对称地址**。在 NVSHMEM 通信例程中使用对称地址对其他 PE 进行远程访问是合法的(对称地址也可以原创 2023-01-15 10:29:53 · 2340 阅读 · 1 评论 -
【nvidia CUDA 高级编程】NVSHMEM 直方图——分布式方法
另一种方法就是**分割直方图**并把各个部分分配到不同的GPU上。**当输入数据中的一个条目不属于该 GPU 上的直方图位置时,我们将自动递增远程 PE 中的相关直方图条目**。然后我们必须在最后把直方图的各个部分拼接起来。我们将这种方法称为“分布式”方法。原创 2023-01-15 10:29:05 · 958 阅读 · 0 评论 -
【GPU】Nvidia CUDA 编程高级教程——利用蒙特卡罗法求解近似值(NVSHMEM)
`NVSHMEM`是一个并行编程模型,用于在多个 NVIDIA GPU 之间进行高效和可扩展的通信。**NVSHMEM 依托于 OpenSHMEM 构建而成**,可为横跨多个 GPU 内存的数据提供全局地址空间,并可通过细粒度的由 GPU 发起的操作、由 CPU 发起的操作和 CUDA 流操作访问该空间。NVSHMEM 为许多应用提供了令人信服的多 GPU 编程模型,对于具有高密度 GPU 和复杂互连的现代 GPU 服务器(例如NVIDIA DGX A100 服务器 的 NVIDIA NVSwitch)来说原创 2022-12-17 23:00:16 · 1304 阅读 · 0 评论 -
【GPU】Nvidia CUDA 编程高级教程——利用蒙特卡罗法求解近似值(CUDA-Aware MPI)
MPI 帮助我们清理了在显式管理多个设备时使用的样板程序,但也牺牲了多个 GPU 之间直接对话的好处。**MPI 是一种==分布式内存==并行编程模型,其中每个处理器都有自己的(虚拟)内存和地址空间,即使所有成员都在同一服务器上并因此共享相同的物理内存也不例外**。(通常情况下,与之不同的是==共享内存==并行编程模型 ,其中每个处理线程都可以访问相同的内存空间,如 `OpenMP`。类似的还有传统的单 GPU CUDA 编程,其中所有线程都可以访问全局内存。) 因此我们将每个 GPU 的结果复制到 CPU原创 2022-11-19 21:14:49 · 784 阅读 · 1 评论 -
【GPU】Nvidia CUDA 编程高级教程——利用蒙特卡罗法求解近似值(MPI方法)
在单一程序中管理所有设备可能比较麻烦。这类工作通常看来就像我们目前所做的那样,对所有的可用设备进行循环,每次循环执行相同的操作(例如启动核函数)。使用 MPI(消息传递接口)可以大大简化程序。使用 MPI 时,我们独立多次启动相同的程序(单程序多数据范例)。在最常见的使用情况下,我们会在您的服务器中启动尽可能多的独立进程副本,并且每个副本只使用一个 GPU。原创 2022-11-19 20:32:07 · 899 阅读 · 1 评论 -
【GPU】Nvidia CUDA 编程高级教程——利用蒙特卡罗法求解 的近似值
估算 𝜋 有一个著名的技巧,那就是在单位面积内随机选择大量点,并计算落在单位圆内的点数。因为正方形的面积是 1,圆的面积是 𝜋/4 ,所以落在圆上的点的点数乘以 4,就是一个 𝜋 的良好近似值。原创 2022-11-12 21:05:22 · 633 阅读 · 0 评论 -
【GPU】Nvidia CUDA 编程高级教程——支持点对点访问的多 GPU
CUDA 使用`通用虚拟地址 (UVA) 空间`。在 UVA 空间中,CPU 和 GPU 上的所有通过 CUDA 分配的空间(包括cudaMalloc和cudaMallocHost)都**可确保享有唯一的虚拟地址**。例如,您可以使用cudaMallocHost或cudaHostAlloc分配**固定的主机内存**,并在**设备代码**中直接获取其地址(同时固定了虚拟到物理的地址转换,这样 GPU 就不需要与 CPU 的内存管理单元对话)。原创 2022-11-12 21:04:26 · 1140 阅读 · 0 评论 -
【GPU】运行nvvp失败“A Java Runtime Environment (JRE) or Java Development Kit (JDK)”
错误原因在于没有安装JDK,运行下面的指令安装JDK8,虽然现在多用nsys,但是偶尔也用一下nvvp。安装完成之后,nvvp就可以正常使用了,如下。原创 2022-10-08 22:10:19 · 1146 阅读 · 0 评论 -
【GPU】no kernel image is available for execution on the device
前段时间在一个很古老的笔记本(lenovo Y400 GT650M*2)上安装NVIDIA内核驱动和CUDA,安装过程也是一波三折,首先是NVIDIA内核一直无法加载,提示原因是内核签名失败,最后发现是因为UEFI开启了选项,后来关闭这个feature之后内核正常加载了,nvidia-smi也可以正常使用了,原创 2022-10-08 16:12:32 · 4777 阅读 · 0 评论 -
【GPU】Nvidia CUDA 编程中级教程——在多个 GPU上实现数据复制与计算的重叠
本人就职于国际知名终端厂商,负责modem芯片研发。在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。博客内容主要围绕:5G/6G协议讲解算力网络讲解(云计算,边缘计算,端计算)高级C语言讲解Rust语言讲解。原创 2022-08-19 21:38:34 · 718 阅读 · 0 评论 -
【GPU】Nvidia CUDA 编程中级教程——数据复制与计算的重叠
流是一个 GPU 操作序列,依发布顺序执行,CUDA 编程人员能创建并利用多个流。名为默认流的特殊流(此处标记为 stream0) ,其他所有流均称为非默认流(此处标记为 streams 1-3)。同一流中的操作将依发布顺序执行。然而,不同的非默认流中启动的操作并无固定的执行顺序。...原创 2022-08-08 22:50:15 · 941 阅读 · 0 评论 -
【GPU】Nvidia CUDA 编程基础教程——异步流及 CUDA C/C++ 应用程序的可视化性能分析
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!博主链接 CUDA工具包附带了 ,这是一个功能强大的,可支持CUDA应用程序的开发。 Nsight Systems为被加速的应用程序生成图形化的活动时间表,其中包含有关CUDA API调用、内核执行、内存活动以及CUDA流的使用的详细信息。我们先使用编译下面的code:编译命令:生成分析文件:新启一个命令行,执行,出现界面,选择上面生成的报告文件,显示的结果如下: 您现在将学习一个新概念 CUDA St原创 2022-07-10 22:25:13 · 1670 阅读 · 2 评论 -
【GPU】Nvidia CUDA 编程基础教程——利用基本的 CUDA 内存管理技术来优化加速应用程序
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!博主链接 如要确保优化加速代码库的尝试真正取得成功,唯一方法便是分析应用程序以获取有关其性能的定量信息。nsys 是指 NVIDIA 的Nsight System命令行分析器。该分析器附带于CUDA工具包中,提供分析被加速的应用程序性能的强大功能。 nsys 使用起来十分简单,最基本用法是向其传递使用 nvcc 编译的可执行文件的路径。随后 nsys 会继续执行应用程序,并在此之后打印应用程序 GPU 活动的摘要输出原创 2022-07-10 13:44:50 · 1642 阅读 · 2 评论 -
【GPU】Nvidia CUDA 编程基础教程——使用 CUDA C/C++ 加速应用程序
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!博主链接加速计算正在取代 CPU 计算,成为最佳计算做法。加速计算带来的层出不穷的突破性进展、对加速应用程序日益增长的需求、轻松编写加速计算的编程规范以及支持加速计算的硬件的不断改进,所有这一切都在推动计算方式必然会过渡到加速计算。无论是从出色的性能还是易用性来看,CUDA 计算平台均是加速计算的制胜法宝。CUDA 提供一种可扩展 C、C++、Python 和 Fortran 等语言的编码范式,能够在世界上性能超强劲的并行处理器 NV原创 2022-07-03 23:34:16 · 4818 阅读 · 2 评论