本发明属于异构众核技术领域,尤其涉及一种用户透明的运算核并行打印保序代理方法。
背景技术:
异构众核的运算核心不支持运行通常意义上的操作系统,只有一个简单的管理库,对用户程序打印函数的支持力度有限,在多个运算核心同时调用打印函数时,多个运算核心的屏幕输出会交错在一起,无法识别有用信息,影响程序的调试和运行控制。图1所示,其为八个运算核心的打印信息示意,可以看出打印信息交错混乱,无法有效识别有用信息。多个运算核心无法有效识别打印信息会严重影响程序的调试和运行控制。
虽然,2011年11月的《计算机工程》第37卷第21期公开了一篇文章《异构多核系统中编译器指导的i/o代理技术》,该文章中描述了一种编译器指导、主处理器代理i/o的实现方案,其中并行编译器的指导分析是重点所在,通过并行编译器对并行程序的分析处理,会生成主处理器c程序和从处理器c程序,从处理器程序中的i/o语句在主处理器程序中都拷贝了一份,代理实现时需要识别当前时间点主处理器应该代理执行哪一条i/o语句。该i/o代理技术存在以下不足:(1)该i/o代理技术必须要并行编译器对并行程序进行源到源的处理,重点在于编译器的处理,所以每一种并行语言的编译器都要进行复杂分析和程序变换才能解决本语言的问题,其适用范围不广;(2)该处理方法基于静态程序变换,所以需要对每一条i/o语句进行二级标识用于区分真正的代理语句,处理复杂。
技术实现要素:
本发明目的在于提供一种用户透明的运算核并行打印保序代理方法,以解决如何在对用户透明的情况下让异构众核的所有运算核的打印输出做到有序可读、互不影响。
为达到上述目的,本发明采用的技术方案是:一种用户透明的运算核并行打印保序代理方法,包括以下步骤,
s1、编译器对运算核上的打印输出语句进行扩展替换,将打印输出语句变换成调用运行时系统中的线程打印处理函数;
s2、运行时系统根据s1的线程打印处理函数的参数进行数据转存且中断控制核,发出代理请求,具体步骤如下:
s21、运行时系统中的线程打印处理函数进行参数解析,申请数据转存缓冲区,根据参数类型进行数据转存;
s22、运算核发出信号中断控制核,请求控制核进行打印保序代理,同时将申请的数据转存缓冲区的首地址通过中断信号传送给控制核;
s3、控制核接收到s22的中断信号后,转入中断处理,根据数据转存缓冲区中的参数类型执行对应的嵌汇编指令装填打印函数参数,调用printf函数代理实现运算核的打印输出。
上述技术方案中进一步改进的技术方案如下:
1.上述方案中,所述打印输出语句进行扩展替换包括以下步骤,
替换函数名,编译器将打印输出语句替换为运行时系统的线程打印处理函数;
扩展参数链,编译器分析打印输出语句中的变量信息,为每一个需要打印输出的变量扩展一个类型参数,说明该变量的数据类型,为运行时的所述数据转存提供需要的空间长度信息,统计打印输出语句中的变量总数,将该变量总数作为一个扩展参数加入参数链,为运行时的数据转存提供控制信息。
2.上述方案中,所述数据转存是运算核打印输出的所有源变量在运算核与控制核都可以访问的空间中拷贝一份,其中所述空间为转存缓冲,所述转存缓冲分为三个区域:参数信息区域、输出变量索引区域和输出变量池,所述参数信息区域说明了参数个数和每一个参数的数据类型,用于构建打印输出语句时的输出变量;所述输出变量索引区域存放每一个输出变量在转存缓冲中的索引值,用于输出变量的使用定位;所述输出变量池存放所有的输出变量值。
3.上述方案中,所述数据转存中的参数数据类型不同,使用的嵌汇编指令不同。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
1)本发明用户透明的运算核并行打印保序代理方法,采用编译器和运行时相结合的方式,自动完成所有运算核的并行有序输出。
2)本发明用户透明的运算核并行打印保序代理方法,对用户透明,用户不需要对运算核的打印输出进行额外的管理,只需要按照标准i/o的格式书写就可以了,减轻用户负担,增加了友善性。
3)本发明用户透明的运算核并行打印保序代理方法,保证了输出的有序可读,每一个运算核的每一句打印都是完整的,完全按照打印格式要求输出,而且不同运算核的打印信息不会互相干扰,可读性好,有效保障了用户程序的调试和运行。
4)本发明用户透明的运算核并行打印保序代理方法,适用性广,不需要并行编译器对并行程序进行源到源的处理,也不需要对每一条i/o语句进行复杂标识以区分定位真正的代理语句,只需要运算核的基础编译器对运算核程序进行简单的程序变换,实现的重点在运行时系统的实时相应处理,所以可支持多种并行语言。
附图说明
附图1为未经过保序代理的多个运算核心的打印信息示意图。
附图2为本发明的流程图。
附图3为本发明打印输出语句进行扩展替换的示意图。
附图4为本发明转存缓冲结构示意图。
具体实施方式
在本专利的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制;术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性;此外,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本专利的具体含义。
下面结合实施例对本发明作进一步描述:
实施例:如图2所示,一种用户透明的运算核并行打印保序代理方法,包括以下步骤,
s1、编译器对运算核上的打印输出语句进行扩展替换,将打印输出语句变换成调用运行时系统中的线程打印处理函数;
s2、运行时系统根据s1的线程打印处理函数的参数进行数据转存且中断控制核,发出代理请求,具体步骤如下:
s21、运行时系统中的线程打印处理函数进行参数解析,申请数据转存缓冲区,根据参数类型进行数据转存;
s22、运算核发出信号中断控制核,请求控制核进行打印保序代理,同时将申请的数据转存缓冲区的首地址通过中断信号传送给控制核;
s3、控制核接收到s22的中断信号后,转入中断处理,根据数据转存缓冲区中的参数类型执行对应的嵌汇编指令装填打印函数参数,调用printf函数代理实现运算核的打印输出。
如图3所示,所述打印输出语句进行扩展替换包括以下步骤,
替换函数名,编译器将打印输出语句替换为运行时系统的线程打印处理函数;
扩展参数链,编译器分析打印输出语句中的变量信息,为每一个需要打印输出的变量扩展一个类型参数,说明该变量的数据类型,为运行时的所述数据转存提供需要的空间长度信息,统计打印输出语句中的变量总数,将该变量总数作为一个扩展参数加入参数链,为运行时的数据转存提供控制信息。
如图4所示,所述数据转存是运算核打印输出的所有源变量在运算核与控制核都可以访问的空间中拷贝一份,其中所述空间为转存缓冲,所述转存缓冲分为三个区域:参数信息区域、输出变量索引区域和输出变量池,所述参数信息区域说明了参数个数和每一个参数的数据类型,用于构建打印输出语句时的输出变量;所述输出变量索引区域存放每一个输出变量在转存缓冲中的索引值,用于输出变量的使用定位;所述输出变量池存放所有的输出变量值。
所述数据转存中的参数数据类型不同,使用的嵌汇编指令不同。
实施例进一步解释如下:本发明中并行打印保序代理方法是将运算核的打印输出交给控制核代理完成,其中需要编译器协同运行时共同完成,其使用的编译器为运算核基础编译器就可以,不需要用户参与,用户只需要按照标准i/o的方式书写打印语句即可。
打印输出语句的变换是编译器在程序分析的基础上自动完成的,不仅需要替换函数名,而且要改变参数链,扩展参数信息,以方便运行时系统的处理。其中,打印输出语句扩展替换的方法:(1)替换函数名,将打印输出语句替换为运行时系统的线程打印处理函数;(2)扩展参数链,分析打印输出语句中的变量信息,为每一个需要打印输出的变量扩展一个类型参数,说明该变量的数据类型,为运行时的数据转存提供需要的空间长度信息,为打印代理参数重构提供类型信息;统计打印输出语句中的变量总数,将该总数作为一个扩展参数加入参数链,为运行时的数据转存提供控制信息。
在异构众核系统中,运算核与控制核可以访问的存储空间是有交叉的,就是说存在只有运算核可以访问的空间,也存在运算核与控制核都可以访问的空间。为了能够有效进行打印输出的代理,就必须保证所有的打印输出变量都在运算核与控制核都可以访问的空间中,这就要求运行时系统必须进行数据转存。
数据转存是由运算核完成的,基本思想是将一条打印输出语句中运算核需要打印输出的所有源变量在运算核与控制核都可以访问的空间中拷贝一份,该空间被称为转存缓冲,这就需要知道变量的个数用于确认申请转存缓冲的大小,还需要知道每一个变量的类型信息和值以得到每一个变量的正确取值,所有这些信息都是通过设定好的线程打印处理函数的参数得到的。
进行数据转存设计时没有考虑运算核打印输出的源变量的空间属性,即使该变量原来就在运算核与控制核都可以访问的空间中,仍然需要将其拷贝到新申请的转存缓冲中,这样所有的参数都被转存到新申请的转存缓冲中统一管理,控制核代理打印输出时,根据每一个输出参数的位置得到当前参数的访问索引值,可以方便快捷地取得参数值,提高打印输出的效率。
转存缓冲分为三个区域:参数信息区域、输出变量索引区域和输出变量池。参数信息区域说明参数个数和每一个参数的数据类型,用于构建打印输出语句时的输出变量;输出变量索引区域存放每一个输出变量在转存缓冲中的索引值,用于输出变量的使用定位;输出变量池存放所有的输出变量值,包括打印语句的格式控制字符串。
运算核完成数据转存后,中断控制核,同时将申请的转存缓冲的首地址传送给控制核。控制核接收到中断后,转入中断处理,代理实现运算核的打印输出。控制核上运行着完整的操作系统,中断处理机制齐全,保证了多个运算核同时对控制核发送中断时中断处理的保序性和完整性。控制核代理打印输出的目标是通过控制核调用打印函数完成打印输出。
打印输出printf是一个可变参数函数,其参数个数是不确定的,控制核的代理是在运行时进行的,所有的信息都来源于转存缓冲,控制核调用printf时,只能通过转存缓冲构建参数。由于转存缓冲中参数的个数、每一个参数的类型都有多种选择,printf语句的输出参数需要直接体现出参数类型,情况太多太复杂,不适合本发明中printf书写。
本发明通过嵌汇编来解决可变参数函数printf的书写表达问题。高级语言中的一条打印输出语句在翻译到汇编程序时,是每一个参数逐个装填的,每一个参数只要知道自己的参数位置和类型,就可以装填到对应的寄存器或者存储器的对应位置,参数的装填是独立于彼此的,所以使用嵌汇编实现,按序装填每一个参数,可变参数以及参数的多种类型问题就迎刃而解。
每一个处理器架构对于函数参数的传递接收都有自己的特点。下面以申威异构众核处理器为例,说明使用嵌汇编如何进行参数构建和打印输出。
申威处理器的函数参数传递使用了特定的寄存器,函数的前六个参数是放在$16~$21中的,如果有浮点参数,按照参数的位置放在对应的$f16~$f21中。如果函数的参数多于6个,其余参数放在父栈的栈底。所以对于前6个参数,只要装填对应的寄存器就行了,对于后面的参数,需要在调用printf前下挖当前栈,将参数装填到栈底,在调用结束后恢复当前栈。
参数的数据类型不同,所使用的嵌汇编指令也是不同的。所以在参数装填的时候,必须参照转存缓冲中的参数类型信息,使用正确的指令和正确的寄存器。
使用嵌汇编语句将参数装填完毕后,直接调用c语句printf(ss)就可以完成打印输出了,ss指向打印输出格式控制字符串。printf语句执行的时候会解析格式控制字符串,根据解析结果到相应的寄存器或者父栈底读取参数,这些参数已经用嵌汇编语句准备完毕了。这样直接调用c语句而不是嵌汇编调用的好处在于函数调用前后相关的gp指针的改变都由编译器保证正确性,安全好用。
采用一种用户透明的运算核并行打印保序代理方法时,(1)打印输出语句的扩展替换方法,该方法为运行时的打印代理提供有效的参数信息;(2)转存缓冲的结构设置方法,该结构直接服务于打印代理,有效的结构设置可以确保参数的快速构建,促进打印代理的高效完成;(3)嵌汇编方法的参数构建策略,解决了运行时代理过程中可变参函数printf的书写表达难题。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
1.一种用户透明的运算核并行打印保序代理方法,其特征在于:包括以下步骤,
s1、编译器对运算核上的打印输出语句进行扩展替换,将打印输出语句变换成调用运行时系统中的线程打印处理函数;
s2、运行时系统根据s1的线程打印处理函数的参数进行数据转存且中断控制核,发出代理请求,具体步骤如下:
s21、运行时系统中的线程打印处理函数进行参数解析,申请数据转存缓冲区,根据参数类型进行数据转存;
s22、运算核发出信号中断控制核,请求控制核进行打印保序代理,同时将申请的数据转存缓冲区的首地址通过中断信号传送给控制核;
s3、控制核接收到s22的中断信号后,转入中断处理,根据数据转存缓冲区中的参数类型执行对应的嵌汇编指令装填打印函数参数,调用printf函数代理实现运算核的打印输出。
2.根据权利要求1所述的用户透明的运算核并行打印保序代理方法,其特征在于:所述打印输出语句进行扩展替换包括以下步骤,
替换函数名,编译器将打印输出语句替换为运行时系统的线程打印处理函数;
扩展参数链,编译器分析打印输出语句中的变量信息,为每一个需要打印输出的变量扩展一个类型参数,说明该变量的数据类型,为运行时的所述数据转存提供需要的空间长度信息,统计打印输出语句中的变量总数,将该变量总数作为一个扩展参数加入参数链,为运行时的数据转存提供控制信息。
3.根据权利要求2所述的用户透明的运算核并行打印保序代理方法,其特征在于:所述数据转存是运算核打印输出的所有源变量在运算核与控制核都可以访问的空间中拷贝一份,其中所述空间为转存缓冲,所述转存缓冲分为三个区域:参数信息区域、输出变量索引区域和输出变量池,所述参数信息区域说明了参数个数和每一个参数的数据类型,用于构建打印输出语句时的输出变量;所述输出变量索引区域存放每一个输出变量在转存缓冲中的索引值,用于输出变量的使用定位;所述输出变量池存放所有的输出变量值。
4.根据权利要求1-3任意一项所述的用户透明的运算核并行打印保序代理方法,其特征在于:所述数据转存中的参数数据类型不同,使用的嵌汇编指令不同。
技术总结