本发明涉及gpu错误处理,具体地,涉及一种gpu错误恢复方法及系统。
背景技术:
1、图形处理单元(graphic processing unit,简称gpu)是一种专门的数字电路设备,最早被用来加速计算机图像处理的计算,后来其使用范围扩展,被广泛应用于图像渲染,加密货币,人工智能模型训练、推理等高并行性的计算任务。
2、图形处理单元上的通用计算(general-purpose computing on graphicsprocessing units,简称gpgpu)实现了gpu上的通用并行计算,使得gpu的能力不再局限于处理图像相关的任务。由于该架构极大拓展了gpu的功能,所以得到了广泛的应用。统一计算架构(compute unified device architecture,简称cuda)是英伟达公司开发的一种gpu上的软硬件结合技术,该技术是英伟达gpu上面的gpgpu实现。
3、gpgpu计算一般以gpu核函数作为基本的计算单元。gpu核函数是由程序员编写的函数,用于在gpu上执行并行计算。gpu将在gpu核函数被调用时启动多个gpu线程来并行执行该gpu核函数的代码,通过在计算中同时处理多个数据元素来加速计算过程,从而提高了计算效率。一般一个gpu程序将会含有非常多的gpu核函数。
4、在计算中,gpu可能会因硬件错误而出现故障。现有的gpu硬件具备自我检测机制,可以及时发现这些错误。一旦错误被检测到,gpu会停止当前正在执行的任务,并将错误内容报告给用户,以便及时处理。
5、幂等性是计算机领域中的一个重要性质。当一个函数具有幂等性时,无论该函数被调用多少次,其结果都将保持一致。这不仅包括函数的返回值,还包括函数对外部环境产生的任何影响,比如文件写入或对全局变量的修改等。
6、通常的错误恢复系统并没有充分利用gpu核函数的幂等性属性。这意味着当gpu核函数遭遇错误时,通常需要重新启动整个程序才能恢复正常运行。如果能够充分利用gpu核函数的幂等性特性,我们就可以通过快速重启内核的方式更快地从错误中恢复。这样做不仅可以缩短系统恢复所需时间,还可以提高系统的容错性。因此,对于具备幂等性的gpu核函数,我们应该充分利用这个特性来加快错误恢复过程。这将使得计算任务能够更加高效地运行,并提升整体系统的可靠性。
7、专利文献cn113127260a(申请号:cn201911410080.7a)公开了一种显示异常处理方法、装置、设备及介质,以解决在gpu出现异常时,快速恢复业务的问题。但该发明仅应用于gpu的图形显示功能,不能应用于gpgpu等领域。
技术实现思路
1、针对现有技术中的缺陷,本发明提供一种gpu错误恢复方法及系统。
2、根据本发明提供的一种gpu错误恢复方法及系统,所述方案如下:
3、第一方面,提供了一种gpu错误恢复方法,所述方法包括:
4、步骤s1:在程序编译阶段,为每个生成的gpu核函数生成包装代码;
5、步骤s2:在运行阶段,用户调用gpu核函数,如果gpu核函数正常执行,则将返回值正常返回,否则进入步骤s3;
6、步骤s3:当检测到发生错误后,通过错误分类器查询错误的可恢复性,如果错误可恢复,则进入步骤s4,否则进入步骤s6;
7、步骤s4:通过幂等性验证器查询当前gpu核函数的幂等性,根据幂等性决定是否重新执行gpu核函数;
8、步骤s5:如果gpu核函数具有幂等性,则重新执行该gpu核函数,否则进入步骤s6;
9、步骤s6:将截获的错误重新返回。
10、优选地,所述步骤s1包括:
11、步骤s1.1:在离线阶段验证即将执行的gpu核函数是否具有幂等性,如果无法验证,则推迟到运行时验证;
12、步骤s1.2:对即将执行的gpu核函数代码进行插桩,插桩的内容包括在gpu核函数开始运行前捕获gpu核函数的参数作为幂等性验证的输入,在gpu核函数结束时捕获错误并执行步骤s3的内容。
13、优选地,所述步骤s2包括:
14、步骤s2.1:在运行阶段,当用户调用gpu核函数后,插桩代码将截获gpu核函数的参数;
15、步骤s2.2:在运行阶段,当gpu核函数执行结束之后,如果没有错误,插桩代码将返回gpu核函数的结果。
16、优选地,所述步骤s3包括:
17、步骤s3.1:当gpu核函数执行过程中或执行结束后检测到错误时,捕获该错误信息;
18、步骤s3.2:将捕获到的错误信息发送到错误分类器,通过错误分类器对错误进行分类。
19、优选地,所述步骤s4包括:
20、步骤s4.1:读取步骤s2中截取的gpu核函数的参数;
21、步骤s4.2:通过幂等性验证器查询当前gpu核函数的幂等性,查询时应当向幂等性验证器传递读取到的参数;
22、步骤s4.3:根据幂等性验证器返回的结果确定接下来执行的代码,如果该gpu核函数具有幂等性,则进入步骤s5,否则进入步骤s6。
23、优选地,所述步骤s5包括:
24、步骤s5.1:如果出现错误的gpu核函数具有幂等性,则将步骤s2中截获的gpu核函数参数重新传入该gpu内核中;
25、步骤s5.2:调用启动gpu核函数的指令,重新执行该gpu核函数。
26、优选地,所述步骤s6包括:
27、如果出现错误的gpu核函数不可恢复或不具有幂等性,则无法在保证正确性的前提下重新执行,此时将截获的错误直接返回给上层应用处理。
28、第二方面,提供了一种gpu错误恢复系统,所述系统包括:
29、模块m1:为每个gpu核函数生成包装代码,截获gpu核函数发生的错误;
30、模块m2:包括幂等性验证器,动态验证gpu核函数的幂等性;
31、模块m3:包括错误分类器,区分可恢复错误与不可恢复错误。
32、优选地,所述模块m1在程序编译阶段为每个生成的gpu核函数生成包装代码,在错误发生时截获控制流,并在运行阶段捕捉到在gpu核函数执行期间发生的错误。
33、优选地,所述模块m2在错误发生后接收来自模块m1的查询请求,并对当前gpu核函数的幂等性进行验证;
34、模块m3接收来自模块m1的错误信息,并利用预定义的错误分类规则来判断错误是否可以通过重新执行相应的gpu核函数来恢复。
35、与现有技术相比,本发明具有如下的有益效果:
36、1、本发明具有普适性,可以用于任何图形处理单元上的通用计算,而不局限于图形用途;
37、2、本发明提高了系统的容错能力,当错误发生在具有幂等性的gpu核函数上时,将能自动恢复错误;
38、3、本发明能够降低系统的错误恢复延迟,使用本发明提供的方法,可以在gpu核函数的粒度上对错误进行恢复,而不需要重启整个程序。
39、本发明的其他有益效果,将在具体实施方式中通过具体技术特征和技术方案的介绍来阐述,本领域技术人员通过这些技术特征和技术方案的介绍,应能理解所述技术特征和技术方案带来的有益技术效果。
1.一种gpu错误恢复方法,其特征在于,包括:
2.根据权利要求1所述的gpu错误恢复方法,其特征在于,所述步骤s1包括:
3.根据权利要求1所述的gpu错误恢复方法,其特征在于,所述步骤s2包括:
4.根据权利要求1所述的gpu错误恢复方法,其特征在于,所述步骤s3包括:
5.根据权利要求1所述的gpu错误恢复方法,其特征在于,所述步骤s4包括:
6.根据权利要求1所述的gpu错误恢复方法,其特征在于,所述步骤s5包括:
7.根据权利要求1所述的gpu错误恢复方法,其特征在于,所述步骤s6包括:
8.一种gpu错误恢复系统,基于权利要求1-7任意一项所述的gpu错误恢复方法,其特征在于,包括:
9.根据权利要求8所述的gpu错误恢复系统,其特征在于,所述模块m1在程序编译阶段为每个生成的gpu核函数生成包装代码,在错误发生时截获控制流,并在运行阶段捕捉到在gpu核函数执行期间发生的错误。
10.根据权利要求8所述的gpu错误恢复系统,其特征在于,所述模块m2在错误发生后接收来自模块m1的查询请求,并对当前gpu核函数的幂等性进行验证;
