项目组织架构
这个项目的组织架构清晰地划分了各个模块的功能,旨在支持针对特定硬件架构和工作负载(如卷积神经网络CNN层)的高效映射和性能分析。下面是每个目录的详细解释:
workload/(解析配置)
- 内容: 包含描述工作负载形状的数据结构和函数。例如,定义如何表示CNN层的尺寸、卷积核大小等,以及如何解析具体的工作负载定义文件到这些数据结构中。
mapsaces/
- 内容: 定义了映射空间,即给定硬件架构和问题形状(如CNN层)下的所有合法映射集合。这里包含针对不同架构类别的映射空间构建类,其中“Uber”映射空间是一个通用类,能够处理广泛类型的架构。
mapping/(存储各类硬件信息)
- 内容: 包含描述映射的代码,映射定义了在特定硬件架构上执行问题嵌套(如CNN层)的特定tiling(数据分块)和调度模式。包括描述映射结构和nest结构的代码。
loop-analysis/
- 内容: 提供了分析特定映射的数值属性的工具,例如每个嵌套级别上操作数体积的形状和大小、在不同嵌套级别间传输数据子集所需的读写次数等。
model/
- 内容: 实现了一个广泛的加速器架构类的通用分析模型。基于提供的参数构造模板化模型,能够“评估”映射在模拟架构上的性能,输出诸如周期计数、对各种硬件结构的访问次数等统计数据。该模块大量依赖于循环分析例程进行复杂计算。
pat/ (external)
- 内容: 提供技术参数和用于能量和面积建模的插值例程。从分析性能模型获得的访问计数可以应用到这些参数导出的访问成本上,从而得到能量消耗的预测。这是一个外部依赖项,可能是指外部库或工具。
search/
- 内容: 包含用于寻找最优映射的搜索算法。这些算法利用前面模块定义的映射空间、映射描述和性能模型,来自动化寻找最佳映射策略的过程。
applications/
- 内容: 包含使用timeloop基础设施的应用示例。其中,“timeloop”主应用在
applications/mapper.hpp中定义,展示了如何整合上述所有模块来解决实际的映射优化问题。
compound-config/(配置解析工具类)
- 内容: 提供了一个包装类,以便透明地支持yaml和libconfig两种配置文件格式的输入,增加了配置灵活性和兼容性。
这个项目的结构支持从定义工作负载到搜索最优映射的端到端流程。
workload
在这个项目中,工作负载到操作空间的映射过程主要是通过一系列步骤来完成的,旨在将抽象的计算任务(工作负载)转化为更加具体且可操作的数据处理框架(操作空间)。
1. 定义工作负载(Workload)
workload.cpp文件
首先,项目中有一个“工作负载”概念,它就像是一个蓝图,描述了我们要解决的具体计算问题是什么样的。比如,对于一个卷积神经网络(CNN)层,工作负载会说明这个层有多少输入通道、输出通道、卷积核的大小、步长等。这个信息通常来源于一个配置文件,里面详细定义了计算任务的维度(比如图像的宽、高、通道数)、系数(比如滤波器的数量)以及其他特性(比如数据空间)。
2. 解析问题形状(Shape)
problem-shape.cpp文件
接下来,有一个“问题形状”(Shape)的概念,它定义了计算任务的基本结构,包括维度、系数、数据空间等。通过解析配置文件,项目能够知道每个维度的名称(比如用单个字母表示)、系数的默认值以及数据空间的性质(是否可读写,如何映射到计算维度)。
3. 创建操作空间(OperationSpace)
operation-space.cpp文件
有了工作负载和问题形状的详细信息后,就可以创建操作空间了。操作空间实质上是工作负载在数据处理层面的具象化,它告诉我们每个数据空间(比如输入、输出、权重等)内部的操作分布情况。想象一下,操作空间是把抽象的计算需求分解到具体的数据块上,每个数据块代表一部分计算任务。
映射过程
-
数据空间映射:为了从工作负载映射到操作空间,项目首先会根据工作负载中的维度和系数,通过“投影”(Projection)过程,将操作点(即计算任务中的一个基本单位)映射到各个数据空间。这个过程涉及到将问题空间中的一个点(例如,卷积运算的一个位置)转换为不同数据空间中的对应位置。简单来说,如果某个操作涉及到多个维度,那么这个操作在每个数据空间的表现可能不同,映射就是找出这种对应关系。
-
范围确定:在某些情况下,我们不仅要知道单个操作点如何映射,还需要知道整个操作空间的范围,即操作点的最小值和最大值。这涉及到将工作负载定义的范围(比如,卷积层处理的图像区域)映射到各个数据空间,计算出每个数据空间的起始点和结束点。
-
操作空间操作:最后,操作空间可以进一步用于分析和优化,比如计算操作点总数、判断操作空间是否为空、比较不同操作空间的差异等。这有助于我们了解计算资源的利用情况,为调度、并行化、内存管理等提供依据。
总之,工作负载到操作空间的映射,就是将一个抽象的计算任务按照其结构特点,分解并映射到具体的数据处理单元上,使得我们能更细致地分析和优化计算任务在实际硬件上的执行方式。这个过程是优化算法性能、减少计算延迟、提高资源利用率的关键步骤。

最低0.47元/天 解锁文章
12万+






