一种锁的卸载运行方法、装置及计算机设备制造方法及图纸

技术编号:37503443 阅读:12 留言:0更新日期:2023-05-07 09:39
本申请公开了一种锁的卸载运行方法、装置及计算机设备。该方法包括:根据用户输入的导语生成关于锁的主机端文件和卸载节点文件,卸载节点运行卸载节点文件以执行:向主机端发送对目标锁变量的上锁请求,在主机端确定该卸载节点对目标锁变量上锁后对目标锁变量进行访问;主机端运行主机端文件以执行:在获取到卸载节点对目标锁变量的上锁请求时,根据目标锁变量当前的状态和/或等锁队列中的上锁请求,确定卸载节点是否能够目标锁变量上锁。该方法实现编译器自动根据导语生成锁的相关执行文件,以保证锁变量在主机端、卸载节点的统一,使得卸载节点顺利完成卸载任务,提高锁在卸载场景下的易用性;有效提高了编程人员的工作效率。率。率。

【技术实现步骤摘要】
一种锁的卸载运行方法、装置及计算机设备


[0001]本申请涉及计算机
,尤其涉及一种锁的卸载运行方法、装置及计算机设备。

技术介绍

[0002]随着数据规模的增长,如今对计算能力的要求已越来越高,不断提升单核或者单台服务器的计算能力已无法得到较高的性价比收益。为满足日益增长的计算能力需求,异构加速、集群计算等技术被不断提出并发展,希望通过将部分计算任务卸载(offload)至其他节点,提高计算系统整体计算能力。
[0003]多线程程序如果涉及到对共享资源的并发读写,就会产生资源争用,一种解决资源争用的方式是通过锁进行访问控制,对并发读写的数据进行保护。然而,锁作为程序中常见的同步手段,会因为计算系统的扩展而导致使用复杂度上升甚至不可用。如果将含有锁的代码卸载至卸载节点,由于主机与卸载节点的锁变量不一致,则卸载节点所运行的代码无法正常发挥应有的作用。
[0004]而目前主流的基于导语的编译器,如共享存储并行编程(open multi

processing,OpenMP),并没有提供主机与卸载节点锁同步的机制,因此需要由编程人员对卸载的程序代码进行修改,增加了编程人员的工作量且不符合导语式编程不修改原有程序代码的初衷。基于数据库、远程字典服务(remote dictionary server,Redis),分布式应用程序协调服务(zookeeper)等实现的分布式锁方案,能够在分布式系统的各个节点去访问全局统一维护的锁变量,因此可以将原程序代码中的锁修改为上述分布式锁,以适应卸载运行的场景。但是,对于已经开发完成的程序,原代码修改工作量大,且该方式依赖第三方组件。

技术实现思路

[0005]本申请实施例提供一种锁的卸载运行方法、装置及计算机设备,用于实现基于导语的锁卸载运行,简化编程人员的操作且能够避免锁变量在主机端、卸载节点不一致的问题。
[0006]第一方面,本申请实施例提供一种锁的卸载运行方法,包括:编译器获取用户输入的导语,所述导语用于指示生成锁的执行文件;所述编译器根据所述导语生成主机端执行文件和目标卸载节点执行文件,并将所述主机端执行文件发送至主机端,将所述目标卸载节点执行文件发送至目标卸载节点;所述目标卸载节点执行文件在被所述目标卸载节点运行时,使得所述目标卸载节点执行:在需要对目标锁变量上锁时,向主机端发送对所述目标锁变量的第一上锁请求,在所述主机端确定所述目标卸载节点对所述目标锁变量上锁后,对所述目标锁变量进行访问;所述主机端执行文件在被所述主机端运行时,使得所述主机端执行:在获取到所述目标卸载节点的第一上锁请求时,根据所述目标锁变量当前的状态和/或等锁队列中的上锁请求,确定所述目标卸载节点是否能够对所述目标锁变量上锁。
[0007]在上述方案中,实现了基于导语的锁卸载运行,实现编译器自动根据导语生成锁的主机端执行文件和卸载节点执行文件,从而使得主机端和卸载节点执行相应的文件,以保证锁变量在主机端、卸载节点的统一,从而使得卸载节点顺利完成卸载任务,提高了锁在卸载场景下的易用性。在实现上述方案时,编程人员可以通过简单的导语输入,即可使得编译器自动实现上述功能,有效降低了编程人员修改程序代码的工作量及学习成本,有效提高了编程人员的工作效率。
[0008]在一种可能的实现方式中,所述导语中包括锁变量的标识信息,所述主机端执行文件和目标卸载节点执行文件为针对所述锁变量的执行文件,所述目标锁变量属于所述锁变量。在该实现方式中,可以由用户确定针对卸载程序中的哪些锁变量生成相应的执行文件,并在输入导语时将确定出的锁变量的标识携带在导语中,以使编译器能够根据导语中锁变量的标识自动生成相应的执行文件。
[0009]在一种可能的实现方式中,在所述编译器根据所述导语生成主机端执行文件和目标卸载节点执行文件之前,所述方法还包括:所述编译器获取卸载区域的程序代码,所述卸载区域的程序代码为卸载至所述目标卸载节点执行的程序代码;所述编译器识别所述程序代码中的锁变量;所述主机端执行文件和目标卸载节点执行文件为针对所述锁变量的执行文件,所述目标锁变量属于所述锁变量。在该实现方式中,编译器能够自动对卸载程序中的变量进行识别,识别出哪些变量为锁变量,从而能够进一步降低编程人员识别锁变量的工作,提高编程人员的工作效率。
[0010]在一种可能的实现方式中,所述编译器识别所述程序代码中的锁变量,包括:所述编译器识别所述程序代码中是否存在与锁相关的函数,若存在,根据与锁相关的函数识别所述程序代码中的锁变量;和/或,所述编译器通过线程运行卸载区域的程序代码,根据所述卸载区域的程序代码中对非卸载区域的写操作识别所述程序代码中的锁变量。编译器识别锁变量的方式包括静态识别和/或动态识别,静态识别即根据常见的锁操作函数进行识别,简单易操作,动态识别则是在程序运行过程中根据对非卸载区域的写操作进行识别,有助于更加全面地识别锁变量,避免遗漏。
[0011]在一种可能的实现方式中,所述主机端执行文件在被所述主机端运行时,使得所述主机端在执行根据所述目标锁变量当前的状态和/或等锁队列中的上锁请求确定所述目标卸载节点是否能够对所述目标锁变量上锁时,具体执行:确定所述目标锁变量是否为空闲状态;若为所述目标锁变量空闲状态,对所述目标锁变量上锁,根据所述第一上锁请求和所述等锁队列中的上锁请求确定当前对所述目标锁变量上锁的卸载节点;若确定出的卸载节点不是所述目标卸载节点,将所述第一上锁请求添加至等锁队列,若确定出的卸载节点为所述目标卸载节点,确定所述目标卸载节点对所述目标锁变量上锁成功;若所述目标锁变量为上锁状态,将所述第一上锁请求添加至所述等锁队列。
[0012]在一种可能的实现方式中,所述主机端执行文件在被所述主机端运行时,使得所述主机端在执行根据所述第一上锁请求和所述等锁队列中的上锁请求确定当前对所述目标锁变量上锁的卸载节点时,具体执行:根据所述第一上锁请求和所述等锁队列中的上锁请求,确定请求访问所述目标锁变量的卸载节点的优先级;将优先级最高的卸载节点作为当前对所述目标锁变量上锁的卸载节点。
[0013]在一种可能的实现方式中,所述主机端执行文件在被所述主机端运行时,使得所
述主机端还执行:将所述锁变量的状态同步至所述目标卸载节点;所述目标卸载节点执行文件在被所述目标卸载节点运行时,使得所述目标卸载节点向主机端发送对所述目标锁变量的第一上锁请求时,具体执行:根据获取到的所述锁变量的状态,确定所述目标锁变量的状态,当所述目标锁变量的状态为空闲状态时,向所述主机端发送对所述目标锁变量的第一上锁请求,当所述目标锁变量的状态为上锁状态时,将对所述目标锁变量的第一上锁请求添加至所述目标卸载节点的等锁队列,将所述目标卸载节点的等锁队列的信息同步至所述主机端。在多线程、多并发的场景下,主机端和卸载节点之间进行锁变量状态、等锁队列信息的同步,能够进一步避免资源争用。
[0014]在一种可能的实现方式中,所述目标卸载节点执行文件在被所述目标卸载节点运行时,使得所述目标卸载节点还执行本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种锁的卸载运行方法,其特征在于,包括:编译器获取用户输入的导语,所述导语用于指示生成锁的执行文件;所述编译器根据所述导语生成主机端执行文件和目标卸载节点执行文件,并将所述主机端执行文件发送至主机端,将所述目标卸载节点执行文件发送至目标卸载节点;所述目标卸载节点执行文件在被所述目标卸载节点运行时,使得所述目标卸载节点执行:在需要对目标锁变量上锁时,向主机端发送对所述目标锁变量的第一上锁请求,在所述主机端确定所述目标卸载节点对所述目标锁变量上锁后,对所述目标锁变量进行访问;所述主机端执行文件在被所述主机端运行时,使得所述主机端执行:在获取到所述目标卸载节点的第一上锁请求时,根据所述目标锁变量当前的状态和/或等锁队列中的上锁请求,确定所述目标卸载节点是否能够对所述目标锁变量上锁。2.根据权利要求1所述的方法,其特征在于,所述导语中包括锁变量的标识信息,所述主机端执行文件和目标卸载节点执行文件为针对所述锁变量的执行文件,所述目标锁变量属于所述锁变量。3.根据权利要求1或2所述的方法,其特征在于,在所述编译器根据所述导语生成主机端执行文件和目标卸载节点执行文件之前,所述方法还包括:所述编译器获取卸载区域的程序代码,所述卸载区域的程序代码为卸载至所述目标卸载节点执行的程序代码;所述编译器识别所述程序代码中的锁变量;所述主机端执行文件和目标卸载节点执行文件为针对所述锁变量的执行文件,所述目标锁变量属于所述锁变量。4.根据权利要求3所述的方法,其特征在于,所述编译器识别所述程序代码中的锁变量,包括:所述编译器识别所述程序代码中是否存在与锁相关的函数,若存在,根据与锁相关的函数识别所述程序代码中的锁变量;和/或所述编译器通过线程运行卸载区域的程序代码,根据所述卸载区域的程序代码中对非卸载区域的写操作识别所述程序代码中的锁变量。5.根据权利要求1

4任一项所述的方法,其特征在于,所述主机端执行文件在被所述主机端运行时,使得所述主机端在执行根据所述目标锁变量当前的状态和/或等锁队列中的上锁请求确定所述目标卸载节点是否能够对所述目标锁变量上锁时,具体执行:确定所述目标锁变量是否为空闲状态;若所述目标锁变量为空闲状态,对所述目标锁变量上锁,根据所述第一上锁请求和所述等锁队列中的上锁请求确定当前对所述目标锁变量上锁的卸载节点;若确定出的卸载节点不是所述目标卸载节点,将所述第一上锁请求添加至等锁队列,若确定出的卸载节点为所述目标卸载节点,确定所述目标卸载节点对所述目标锁变量上锁成功;若所述目标锁变量为上锁状态,将所述第一上锁请求添加至所述等锁队列。6.根据权利要求5所述的方法,其特征在于,所述主机端执行文件在被所述主机端运行时,使得所述主机端在执行根据所述第一上锁请求和所述等锁队列中的上锁请求确定当前对所述目标锁变量上锁的卸载节点时,具体执行:根据所述第一上锁请求和所述等锁队列中的上锁请求,确定请求访问所述目标锁变量的卸载节点的优先级;
将优先级最高的卸载节点作为当前对所述目标锁变量上锁的卸载节点。7.根据权利要求1

6任一项所述的方法,其特征在于,所述主机端执行文件在被所述主机端运行时,使得所述主机端还执行:将所述锁变量的状态同步至所述目标卸载节点;所述目标卸载节点执行文件在被所述目标卸载节点运行时,使得所述目标卸载节点向主机端发送对所述目标锁变量的第一上锁请求时,具体执行:根据获取到的所述锁变量的状态,确定所述目标锁变量的状态;当所述目标锁变量的状态为空闲状态时,向所述主机端发送对所述目标锁变量的第一上锁请求;当所述目标锁变量的状态为上锁状态时,将对所述目标锁变量的第一上锁请求添加至所述目标卸载节点的等锁队列,将所述目标卸载节点的等锁队列的信息同步至所述主机端。8.根据权利要求1

7任一项所述的方法,其特征在于,所述目标卸载节点执行文件在被所述目标卸载节点运行时,使得所述目标卸载节点还执行:当所述目标卸载节点中的第一线程对所述目标锁变量上锁并访问完成后,判断所述目标卸载节点的等锁队列中是否存在所述目标卸载节点的其他线程对所述目标锁变量的上锁请求;若不存在,向所述主机端发送对所述目标锁变量的第一释放请求;若存在,确定所述其他线程中优先级最高的线程对所述目标锁变量上锁;或者,判断所述其他线程中优先级最高的线程的优先级是否小于所述主机端的优先级,若小于,向所述主机端发送对所述目标锁变量的释放请求,否则,确定所述优先级最高的线程对所述目标锁变量上锁。9.根据权利要求1

8任一项所述的方法,其特征在于,所述主机端执行文件在被所述主机端运行时,使得所述主机端还执行:当接收到对所述目标锁变量的第一释放请求时,确定所述等锁队列中是否存在其他卸载节点对所述目标锁变量的上锁请求;若不存在,对所述目标锁变量进行释放,释放后的目标锁变量的状态变为空闲状态;若存在,确定所述其他卸载节点中优先级最高的卸载节点对所述目标锁变量上锁;或者,判断所述其他卸...

【专利技术属性】
技术研发人员:季晨鹏杨仲凯郑卫炎郭海涛
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1