[发明专利]一种C/C++与COStream混合编程方法和可视化编译系统有效
申请号: | 201710491698.5 | 申请日: | 2017-06-26 |
公开(公告)号: | CN107341010B | 公开(公告)日: | 2019-12-13 |
发明(设计)人: | 于俊清;董慧;何云峰;唐九飞 | 申请(专利权)人: | 华中科技大学 |
主分类号: | G06F8/20 | 分类号: | G06F8/20;G06F8/41 |
代理公司: | 42201 华中科技大学专利中心 | 代理人: | 廖盈春;李智 |
地址: | 430074 湖北*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 c++ costream 混合 编程 方法 可视化 编译 系统 | ||
1.一种C/C++与COStream混合编程方法,其特征在于,所述方法包括:
对COStream编译器前端进行扩展,设计COStream单模式和C/C++与COStream混合模式的模式选择接口;
对COStream编译器后端进行扩展,设计C/C++程序与COStream程序数据通信的接口,设计混合模式后端多线程的处理方法;对COStream源程序进行词法分析、语法分析、语义动作分析和任务调度划分后生成目标代码;所述C/C++程序与COStream程序数据通信的接口具体设计方法为:
基于内存的对全局变量的数据通信,当需要处理的数据在编写程序时已经确定,则采用全局变量的方式对数据进行处理,在COStream程序中定义全局变量的数组结构来存储待处理的数据,静态数据流图的topleverNode节点直接访问全局变量,sink节点处理完数据后,将数据暂存在结果变量中,通过生成的类中的接口返回结果数据,当sink节点处理完数据并将结果返回给结果变量时,通过全局变量对结果进行计数;
基于内存的对中间结果的数据通信,当需处理的数据是在C/C++文件中被处理过后的中间结果,并且该数据作为COStream处理对象时,在COStream程序中必须定义能接受数据通信的接口,同时在编译生成的目标代码的类中必须有接受数据的存储结构以及结果返回的存储结构,由于从C/C++传入进来的数据类型以及数量是无法预先知道的,所以通过对传入进来的数据采用输入流的方式对数据进行处理,同时用vector结构对数据进行接收和结果存储;
所述混合模式后端多线程的处理具体方法为:
(1)获取分配在各个核上的所有actor集合,遍历集合,获取各个actor的边信息,并根据边信息构造actor对象;为每个运行核上所有的actor生成一个线程;
(2)对核上所有的actor进行初态调度,通过对图中的下游节点的工作量的计算来获得上游节点需要对下游节点的push值;然后,对所有的actor进行稳态调度,通过上游节点的push值和初态调度中获得的push值最终确定当程序运行到稳定状态下时上游节点须向其下游节点输出的最小数据量;在调度过程中同样需要通过barrier函数来实现各个线程间的同步操作;
(3)实现软件流水调度,软件流水调度分为三个阶段,即流水填充阶段、填满阶段以及排空阶段;为了保证流水调度的正常运行而不错乱,使用barrier函数进行核间同步操作。
2.根据权利要求1所述的一种C/C++与COStream混合编程方法,其特征在于,所述COStream单模式和C/C++与COStream混合模式的选择接口通过增设模式选择变量来对后端代码生成进行控制,默认的情况下该变量的值为FALSE,即为单模式编程,后端对COStream源码编译后会生成带有main函数的C++代码;当该变量的值置为TRUE时,后端对COStream源码编译后会生成C++代码的类,该类中包含了与C/C++文件进行数据交互的接口和对外进行多线程处理的方法。
3.根据权利要求1所述的一种C/C++与COStream混合编程方法,其特征在于,所述目标代码为一个类,类中包含基于内存的对全局变量的访问和对中间结果的访问及文件操作,返回数据结果的接口和返回数据结果数量的接口;在指定的核数上创建各个线程和各个线程相关的执行函数的调用接口,以及类中接受数据变量和结果的私有成员变量,同时还包含各个核之间的同步操作机制。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中科技大学,未经华中科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710491698.5/1.html,转载请声明来源钻瓜专利网。