高性能计算

异构计算-待解决的问题

2009年4月23日 阅读(304)

1.测试数据生成器:主要作用生成大小规模可定制的测试数据,
比如高斯消元测试:采用预先设定x的指,然后随机生成符合条件的可解方程
比如矩阵相乘:采用随机方法,串行版本,生成矩阵及相乘结果,用以测试并行运算结果

2.运行环境初始化:环境信息,如何定义一个数据结构来保存这些信息
包括:节点计算能力,节点间通讯速度,当前负载,能耗,内存大小。
初步设计有两种:作为配置文件信息保存,运行测试程序包实时获取。可能主要由配置信息来实现,即我们在主节点,放置节点信息,读取后根据分配算法,分析节点信息以及程序的dag图,然后计算分配结果。

节点映射及性能分析辅助工具:

当然我们可以为程序员提供一个简单的分析工具,主要界面大概是这个样子的:两个由各个节点构成的图,其中一个是当前机群的节点图(每个节点代表一个计算节点,包括节点的计算速度,硬件类型,负载等),另一个则是程序的dag图,节点代表了一个独立的计算过程(包含该过程针对各个机群物理节点的适应性,计算耗费),程序员可以通过点击修改节点信息,程序将根据分配算法,对这两个节点图完成物理节点在dag图上的映射,同时提供对于完成时间以及耗费的一个预测。当然也可以由程序员手动修改当前的映射,同时重新预测这种映射情况下的完成时间和耗费。

进一步细化这个工具,我们可以将节点类型做成固定的类型,针对处理机类型,然后模拟,也就是我们可以让节点从已经设计好的一系列节点(intel系列,cell系列)中选择,然后生成我们现有的节点集合。同时也可以让用户添加新的处理器定义,如果继续深化,可以做一个类似于ns2的模拟机群,模拟网络环境,然后将dag在这个模拟机群上,看如何分配。当然需要一系列工作,比如测试各个处理器对各种运算的适应性,处理时间(比如向量乘,浮点运算,并且将这些适应性作为处理器的属性保存起来,我们可以提供脚本语言,定义各种运算适应性,并允许在分配算法中使用这些适应性定义,也就是说我们对运算根据进行分类,在dag图的节点中需要选择某个类别,这样计算时就可以根据这个选择结合处理器对该运算的适应性,建立起一个分配模型。

3.任务分配算法
如何结合运行环境+任务属性,对数据进行划分,达到高的效率
参考目前的算法,提出改进。

在考虑组合,排列生成的时候,突然想到了采用并行分配的方法,实现这样的分配算法,而不是只由控制节点进行计算。比如将dag图的映射方案,按照排列进行划分,让每个节点负责一部分方案的计算,然后综合最终的计算结果得出一个方案。实现分配过程的计算加速

4.当分配方案确定后,如何在程序中支持这样的划分方法

想到了一个方法,该方法可以在mpi环境中实现。我们首先对任务要处理的数据进行单元化,比如一个高斯消元,我们把矩阵的一行作为一个单元,这样把这个单元包装起来,用一个数据结构,里面要包含各个系数,该行的行号。分配的时候,单位按照行计算,比如某个节点分配到了几个行,这样我们就把这些行用那个数据结构包裹起来,传给这个节点。这样实际上把一个行作为一个基本任务处理,这样就可以实现mpi上基于行的独立的调度分配计算方法,每个节点可以得到按照分配算法得到任意的离散分布的行,并还能完成计算。也就是说我们将一个行的处理,线程化,这样产生了以数据划分为基础的线程化调度方法。

5.异构环境的屏蔽
主要通过脚本控制编辑工具链的选择,对不同的函数包装成相同的函数。
通过调用系统特定的BLAS程序库,获取平台相关的效率提升。

 

我们将上面的一系列的想法,整合到一个异构计算模式中来:

1.描述异构环境(根据异构环境模型,及环境描述工具)

2.任务图工具(输入程序任务图,并将任务图与程序参数结合)

3.配置调度算法(将调度算法作为一个可配置模块,用户可以选择一个调度算法,也可以添加自定义的算法)

4.实际库,调用

5.性能预测分析,根据调度算法,任务图,给出程序运行效果的预测分析

6.自动测试模块 帮助并行程序的自动测试

You Might Also Like