新闻中心

EEPW首页>嵌入式系统>设计应用> 详细解析众核多计算模式系统的构建

详细解析众核多计算模式系统的构建

作者: 时间:2018-08-02 来源:网络 收藏

2.2 计算模式构建与切换

本文引用地址://m.amcfsurvey.com/article/201808/385126.htm

计算模式构建是形态管理模块根据接收到的命令动态构建出被指定的目的计算模式的过程。众核处理系统在初始化时,就已经创建了指定数目的流(流的最大数目取决于GPU中硬件工作队列的数目),并采用空位标记法对创建的流进行管理,通过标记位的有效性描述CUDA 流的可用性。当目的计算模式为单任务计算时,只需将首位的CUDA流标记设置为有效,其他全部标记为无效,在对计算任务加载时,将计算任务放入该CUDA流中进行计算;当目的计算模式为多任务计算时,需要将指定数目CUDA流的标记位设置为有效,在对计算任务加载时,通过轮询的方式将计算任务放入到相应的CUDA 流中,利用CUDA 流的Hyper-Q特性,同时加载多个计算任务到众核计算单元;当目的计算模式为多任务流式计算时,需要将指定CUDA 流的标记设置为有效,从构建第一个计算步开始,将第一个计算步放入第一个CUDA 流中进行计算,当第一个计算步首次完成计算后,利用二元信号量通知众核控制单元中的任务管理模块开始构建第二个计算步,并重新构建第一个计算步,以此类推,完成对多任务流式计算中每个计算步的动态构建过程。

计算模式的切换是当众核计算单元的当前计算模式与计算任务执行需要的计算模式(即目的计算模式)不匹配时,需要对众核计算单元的计算模式进行切换,以适应计算模式变化的需求。

在从任务配置文件中获取适应于计算任务执行的目的计算模式后,首先与当前计算模式进行比较,若匹配成功则不需要进行计算模式的切换;若匹配失败则进一步判断众核在当前计算模式下是否空闲,如处于忙碌状态则需要等待,对于不同优先级的任务设有不同的等待时限,以保证对计算任务的及时响应,当大于这一时限时强制结束正在运行的任务以释放计算资源,从而构建新的计算模式,完成计算模的切换过程,流程图如图4 所示。


2.3 共享内存缓冲技术

众核计算单元在对主控机请求的计算任务加载前,必须获取来自主控机的任务数据,为了实现对任务数据的接收和发送,需要建立相应的数据缓冲区。传统的方法是采用消息队列和基于共享内存信号灯的方式来建立和管理数据缓冲区,但当数据的写入和读取速度差别较大时,容易造成数据缓冲区的阻塞。因此采用一种可滑动动态共享内存缓冲技术,如图5所示。

在众核控制单元的存储空间中申请存储空间作为存放数据的缓冲池,按需要建立指定数量的单向指针链表,每个指针链表代表一个数据缓冲区,在众核处理系统的计算模式切换时,可根据并行任务数目的变化修改指针链表的节点数,使每个数据缓冲区占用的存储空间按需滑动,以提高整个数据缓池数据的传递效率。

2.4 计算库动态加载

在对计算任务的执行函数进行加载时,采用动态共享库的方式,因为动态链接的共享库具有动态加载、封装实现、节省内存等优点,可以把众核计算单元的执行函数与逻辑控制程序相隔离,降低了众核计算与逻辑控制的耦合度,增加了可扩展性和灵活性。

在动态加载计算库前,需要将执行函数编译生成动态共享库,进而在程序中进行显示调用。当调用时使用动态加载API,该过程首先调用dlopen以打开指定名字的动态共享库,并获得共享对象的句柄;而后通过调用dlsym,根据动态共享库操作句柄与符号获取该符号对应的函数的执行代码地址;在取得执行代码地址后,就可以根据共享库提供的接口调用与计算任务对应的执行函数,将执行函数发射到众核计算单元,由众核计算单元根据执行函数的配置参数组织计算资源进行计算;当不会再调用共享对象时调用dlclose关闭指定句柄的动态共享库。

3 结语

针对复杂应用领域计算任务对多种计算模式的需求,本文研究了众核处理机结构,根据NVIDIA KeplerGK110架构中Hyper-Q 与CUDA 流的特性,构建了可单任务并行计算、多任务并行计算、多任务流式计算间动态切换的众核多计算模式系统,能够提高实时计算平台的灵活性,以适应不同的任务计算需求。下一步的研究方向是挖掘GPU中硬件工作链路与SM(Streaming Mul-tiprocessor)间的映射机制。


上一页 1 2 下一页

关键词:众核处理器CUDA

评论


技术专区

关闭