3.6 QUERYING DEVICE PROPERTIES

我们关于将执行资源分配给区块的讨论提出了一个重要问题。我们如何确定可用资源的数量?当CUDA应用程序在系统上执行时,它如何确定设备中的SM数量以及可以分配给每个SM的块和线程数量?可能与执行CUDA应用程序相关的其他资源尚未讨论。一般来说,许多现代应用程序被设计为在各种硬件系统上执行。该应用程序通常需要查询底层硬件的可用资源和功能,以便利用能力更强的系统,同时补偿能力较差的系统。

在CUDA C中,存在主机代码的内置机制来查询系统中可用设备的属性。CUDA运行时系统(设备驱动程序)有一个API函数cudaGetDeviceCount,该函数返回系统中可用的CUDA设备数量。主机代码可以使用以下语句确定可用CUDA设备的数量:

int dev_count;
cudaGetDeviceCount(&dev_count);

资源和能力查询
在日常生活中,我们经常查询环境中可用的资源和能力。当我们预订酒店时,我们可以查看酒店房间附带的设施。如果房间里有吹风机,我们不需要带吹风机。大多数美国酒店客房都配有吹风机;其他地区的许多酒店没有。
一些亚洲和欧洲酒店提供牙膏甚至牙刷,而大多数美国酒店则不提供。许多美国酒店同时提供洗发水和护发素,而其他大洲的酒店通常只提供洗发水。
如果房间里有微波炉和冰箱,我们可以拿走晚餐的剩菜,预计第二天再吃。如果酒店有游泳池,我们可以带上泳衣,并在商务会议后畅游。如果酒店没有游泳池,但有健身室,我们可以带跑鞋和运动服。一些高端的亚洲酒店甚至提供运动服!
这些酒店设施是酒店财产或资源和能力的一部分。资深旅行者在酒店网站上查看这些酒店,选择更符合他们需求的酒店,并根据这些细节更高效地打包。

虽然可能并不明显,但现代PC系统通常有两个或多个CUDA设备。原因是许多PC系统都配有一个或多个“集成”GPU。这些GPU是默认的图形单元,提供基本的功能和硬件资源,为现代基于Windows的用户界面执行最小的图形功能。大多数CUDA应用程序在这些集成设备上表现不佳。这一弱点将是主机代码遍及所有可用设备,查询其资源和功能,并选择具有足够资源的设备来令人满意地执行应用程序的原因。

CUDA运行时从0到dev_count-1对系统中所有可用设备进行编号。它提供了一个APl函数cudaGetDeviceProperties,该函数返回其编号作为参数给出的设备的属性。我们可以使用主机代码中的以下语句来遍默化可用设备并查询其属性:
在这里插入图片描述

内置类型cudaDeviceProp是C结构类型,其字段表示CUDA设备的属性。读者参考该类型所有领域的CUDA C编程指南。我们将讨论其中一些与将执行资源分配给线程特别相关的领域。我们假设属性在dev_prop变量中返回,其字段由cudaGet- DeviceProperties函数设置。如果读者选择以不同的方式命名变量,则显然需要在下面的讨论中替换适当的变量名称。

顾名思义,dev_prop.maxThreadsPerBlock字段表示查询设备中块中允许的最大线程数。一些设备在每个块中允许多达1024个线程,而其他设备允许更少的线程。未来的设备甚至可能每个块允许超过1024个线程。因此,应该查询可用的设备,并确定每个块中允许足够数量线程的设备。

设备中的SM数量在dev_prop.multiProcessorCount中给出。正如我们之前所讨论的,一些设备只有少量的SM(例如tWO),有些设备的SM数量要多得多(例如30)。如果应用程序需要大量的SM才能达到令人满意的性能,它绝对应该检查潜在设备的此属性。此外,设备的时钟频率在dev_prop.clockRate中。时钟速率和SM数量的组合很好地表明了设备的硬件执行能力。

主机代码可以在字段dev_prop.maxThreadsDim[0]、dev_prop.maxThreads
Dim[1]和dev_prop.maxThreadsDim[2]
(用于x、y和z维度)中找到块每个维度允许的最大线程数。此类信息可用于自动调谐系统,以便在评估底层硬件性能最佳的块尺寸时设置块尺寸的范围。同样,它可以确定dev_prop.maxGridSize[0],、dev_prop.maxGridSize[1]和dev_prop.maxGridSize[2](用于x、y和z维度)中网格每个维度允许的最大块数。这些信息通常用于确定网格是否有足够的线程来处理整个数据集,或者是否需要一些迭代。

cudaDeviceProp类型还有更多字段。我们将在介绍它们旨在反映的概念和功能时讨论它们。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 自学(六) 之函数

目录 1. python函数的基本结构 P168 2. python函数的可变参数(不定长) *parameter P169 3. python函数的返回值(单个或多个) P173 4. python的匿名函数 lambda P177 1. python函数的基本结构 P168 2. python函数的可变参数(不定…

Samtec卓越应用 | SEARAY:最大限度提高设计灵活性和密度

【摘要/前言】 SEARAY™是Samtec 的高速、高密度栅格阵列连接器系列。SEARAY™为设计人员提供了大量的设计灵活性,远远超过业内任何其他阵列产品。 【灵活性】 SEARAY™ 是一种 1.27 毫米 X 1.27 毫米的栅格。它是一种开放式引脚字段栅格阵列,即引脚不…

找不到api-mswin-crt-runtime-|1-1-0.dll的修复方法解析

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“api-ms-win--crt-runtime-|1-1-0.dll丢失”。这个错误通常发生在Windows操作系统中,它表示一个关键的动态链接库文件丢失或损坏。这个问题可能会导致某些应用程序无法正常运行&…

docker/华为云cce 部署nacos 2.3.0 集群模式

镜像地址 https://hub.docker.com/r/nacos/nacos-server 版本 nacos/nacos-server:v2.3.0-slim 关键环境变量 使用mysql数据源 变量值备注MODEcluster启用集群模式MYSQL_SERVICE_DB_NAME数据库名MYSQL_SERVICE_USER数据库用户名MYSQL_SERVICE_PASSWORD数据库密码SPRING_D…

【愚公系列】2023年12月 HarmonyOS教学课程 049-Stage模型(AbilityStage组件容器)

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主&#xf…

护眼灯哪个品牌最好?2024年十大护眼灯品牌排行榜

由于科技水平的提高和电子产品的普及,儿童青少年的近视率正逐年攀升,出现低龄化现象,面对眼健康问题的严峻形势,我们应该还有爱眼意识、加强眼健康知识普及!现在呢,护眼台灯被越来越多的人发现了&#xff0…

【设计模式】解释器模式

一起学习设计模式 目录 前言 一、概述 二、结构 三、案例实现 四、优缺点 五、使用场景 总结 前言 【设计模式】——行为型模式。 一、概述 如上图,设计一个软件用来进行加减计算。我们第一想法就是使用工具类,提供对应的加法和减法的工具方法。 …

C++类与对象基础(5)——日期类的实现

对于实现日期类中需要用到的例如:构造函数,析构函数,运算符重载等内容,已经在前面几篇文章中进行介绍,故本文只给出关于类和对象中日期类的代码实现,对于代码的原理不给予详细的解释: 1.头文件…

[VUE]1-创建vue工程

目录 基于脚手架创建前端工程 1、环境要求 2、操作过程 3、工程结构 4、启动前端服务 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法&#xff0c…

Commander One for Mac:强大的双窗格文件管理器,让你的工作效率倍增!

Commander One for Mac是一款功能强大的文件管理工具,具有以下主要功能: 双窗格设计:主界面分为两个窗格,用户可以在左侧窗格中导航和浏览文件系统的目录结构,在右侧窗格中查看文件和文件夹的内容。文件操作&#xff…

Java:结束本机端口被占用进程

前言 在实际开发当中我们,往往在idea中将某个服务的启动给关闭了,但是在nacos的某个服务上,我们却可以看到本地别名服务还是在上面挂载着本地再次启动的时候就提示【端口被占用】,今天就说一下如何解决这个问题 操作 点击即可预…

C++_命令行操作

命令行操作 介绍第一步编译 源码第二部 找到exe 可执行文件第三步看图操作代码测试源码测试结果 介绍 本文介绍命令行操作 1.argc 表示当前输入 参数个数 2.argv 表示当前输入 字符串内容 第一步编译 源码 #include<iostream> #include<string>using namespace st…

el-table 展开行表格,展开的内容高度可以变化时,导致的固定列错位的问题

问题描述 一个可展开的表格&#xff08;列设置了type“expand”&#xff09;&#xff0c;并且展开后的内容高度可以变化&#xff0c;会导致后面所有行的固定列错位&#xff0c;图如下&#xff0c;展示行中是一个树形表格&#xff0c;默认不展示子级&#xff0c;点击树形表格的…

R4S软路由如何在iStoreOS后配置远程桌面本地电脑公网地址

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是&#xff1a;** 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家…

斑马斑马跳

欢迎来到程序小院 斑马斑马跳 玩法&#xff1a;行走的斑马&#xff0c;点击鼠标左键斑马左右跳动&#xff0c;左右两侧有大树&#xff0c;和移动的小鸟&#xff0c; 撞到大树和小鸟游戏结束&#xff0c;统计分数&#xff0c;快去斑马跳吧^^。开始游戏https://www.ormcc.com/pl…

项目总体测试计划书

一、 前言 &#xff08;一&#xff09; 背景 &#xff08;二&#xff09; 目的 &#xff08;三&#xff09; 测试目标 &#xff08;四&#xff09; 适用范围与读者对象 &#xff08;五&#xff09; 术语与缩写 二、 软件测试实施流程 &#xff08;一&#xff09; 测试工作总体流…

系统编程--VIM特辑

这里写目录标题 vim三种工作模式进入文本模式的快捷键在命令模式下进行文本编辑删除快捷键复制粘贴查找替换查找替换 vim其他操作 vim打造简易IDE vim 三种工作模式 具体可见第二章对vim的详细介绍 需要注意的是&#xff0c;在末行模式下执行完一次命令&#xff0c;就可以直接…

RTTI结构详细分析(VC++)

对于RTTI结构的资料真的屈指可数,类的逆向也一直是一个不好弄的问题.对此我只想贡献我的一份力量。 文中我不会分析类的内存布局,因为有很多资料已经分析的挺好的了(见参考资料)。但是现有我能找到的资料对RTTI结构的表述不完整,或者表述模糊不清,参考Clang的部分源码后&#…

什么是VR、AR、MR、XR?

VR、AR、MR、XR的定义 VR虚拟现实是利用计算机技术创造虚拟世界&#xff0c;用户可以通过穿戴VR设备&#xff0c;进入虚拟现实的环境&#xff0c;感受身临其境的体验。 AR增强现实技术是将现实和虚拟世界结合在一起&#xff0c;用户可以通过手机、平板电脑等设备&#xff0c;看…

Weblogic安全漫谈(四)

黑名单机制必然会推动两种研究方向的发展&#xff1a;一是挖掘不在黑名单的新组件&#xff0c;是为绕过规则&#xff1b;二是发掘检查的盲区&#xff0c;是为绕过逻辑。 CVE-2020-14756 二次反序列化具有对抗检查逻辑的天生丽质&#xff0c;在CVE-2018-2893中就有利用字节数组…