前言 这是对官方文档中对占用率解释的部分的翻译。原文: 点击前往 在原文的基础上增加了自己的一些评述,不一定对,看个乐呵。 概述 在CUDA的Profile和Trace模式下记录的所有CUDA核函数启动中的Occupancy(占用率)实验详情窗格显示“理论占用率”,即由核函数启动配置和CUDA设备的能力强加的占用率上限。在Profile模式的Achieved Occupancy实验中,测量了核函数执行期间的占用率,并将实际值添加到Occupancy实验详情窗格中,与理论值一起显示。额外的图表显示每个SM的实际占用率…

2024年2月2日 0条评论 144点热度 0人点赞 大脸猫 阅读全文

前言 核函数不能像普通函数一样可以在IDE中调试,在运行时发生错误时也不会中断,或者抛出错误信息。 但是CUDA提供了一些函数用于捕获这些错误信息。 错误捕捉函数 //返回运行时的最后一个错误代码,并清除掉这个错误 __host__​__device__​cudaError_t cudaGetLastError ( void ) //返回运行时的最后一个错误代码,但不清除掉这个错误 __host__​__device__​cudaError_t cudaPeekAtLastError ( void ) //通过错误…

2023年8月8日 0条评论 1011点热度 1人点赞 大脸猫 阅读全文

前言 统一内存是指只需要一次内存申请,就可以在任意的GPU或者CPU中访问这块内存中的数据,不用在手动的在设备与主机之间拷贝数据。 在了解统一内存之前,需要知道一些相关的概念。 页面错误 页面错误是计算机操作系统中的一种异常情况,它发生在程序试图访问虚拟内存中的某个页面(也称为页)时,而该页当前并未加载到物理内存中。 虚拟内存是一种使用硬盘空间模拟扩展内存的技术。在现代操作系统中,每个程序都有其虚拟地址空间,其中包含多个页面。这些页面通常是固定大小的。 当程序访问某个虚拟地址时,操作系统会检查该地址对应的页面是否已…

2023年8月8日 0条评论 1069点热度 0人点赞 大脸猫 阅读全文

CUDA GPU编程指南:内存的申请,释放与拷贝 前言 ​ 在CPU上运行的程序,会将数据存放在内存中,在C++中直接使用new delete 或者malloc free就可以管理内存的申请和释放。 ​ 在GPU上运行的程序,会将数据放入显存中,需要CUDA提供的API来管理内存,并且在显存中存放的数据,是不能被CPU直接访问的。 主机内存(host)和设备内存(device) ​ 主机内存指在CPU上运行的代码所使用的内存,正常C/C++代码中的使用的变量,无论是在堆还是栈上,使用的都是主机内存。 ​ 使用设备内…

2023年7月26日 2条评论 2737点热度 0人点赞 大脸猫 阅读全文

前言 这篇博文会介绍如何使用CUDA 在屏幕上打出Hello World! 直接上代码 #include <stdio.h> #include <cuda_runtime.h> __host__ void cpuSayHello() { printf("CPU: hello world!\n"); } __device__ int getThreadID() { return threadIdx.x; } __global__ void sayHello() { prin…

2023年7月26日 0条评论 874点热度 1人点赞 大脸猫 阅读全文

准备工作 ​ 在使用CUDA前,应该在电脑上安装如下工具 CUDA Toolkit 英伟达为CUDA提供的工具包,下载地址:https://developer.nvidia.com/cuda-toolkit。 CMake 版本在3.11以上。 C/C++编译器,如果是在Windows系统上,推荐使用visual studio 20xx。 添加CUDA环境 ​ 有两种方法可以添加CUDA的支持,如果工程默认使用CUDA,那么可以使用这条命令: project(CUDA_PROJECT LANGUAGES CUDA C…

2023年7月24日 0条评论 2317点热度 0人点赞 大脸猫 阅读全文