CN117785591A - 用于计算设备的计算内核的调试方法、计算设备、计算机可读存储介质和计算机程序产品 - Google Patents

用于计算设备的计算内核的调试方法、计算设备、计算机可读存储介质和计算机程序产品 Download PDF

Info

Publication number
CN117785591A
CN117785591A CN202410216791.5A CN202410216791A CN117785591A CN 117785591 A CN117785591 A CN 117785591A CN 202410216791 A CN202410216791 A CN 202410216791A CN 117785591 A CN117785591 A CN 117785591A
Authority
CN
China
Prior art keywords
debug
tensor
log
application
thread
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202410216791.5A
Other languages
English (en)
Other versions
CN117785591B (zh
Inventor
请求不公布姓名
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Bi Ren Technology Co ltd
Beijing Bilin Technology Development Co ltd
Original Assignee
Shanghai Bi Ren Technology Co ltd
Beijing Bilin Technology Development Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Bi Ren Technology Co ltd, Beijing Bilin Technology Development Co ltd filed Critical Shanghai Bi Ren Technology Co ltd
Priority to CN202410216791.5A priority Critical patent/CN117785591B/zh
Publication of CN117785591A publication Critical patent/CN117785591A/zh
Application granted granted Critical
Publication of CN117785591B publication Critical patent/CN117785591B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本公开提供了一种用于计算设备的计算内核的调试方法、计算设备、计算机可读存储介质和计算机程序产品。该调试方法包括:配置调试张量以用于一个应用的多个线程束在所述计算设备的所述计算内核上的调试,所述调试张量的参数包括所述多个线程束的数量、用于每个线程束的调试内存大小以及所述多个线程束的偏移向量;在所述计算内核上对所述应用进行编译后,将所述计算设备的一个或多个计算单元的调试日志打印到所述调试张量所指示的调试内存;以及输出所述调试日志以确定调试日志异常的计算单元以及所述调试日志异常的计算单元所运行的线程束。

Description

用于计算设备的计算内核的调试方法、计算设备、计算机可读 存储介质和计算机程序产品
技术领域
本公开概括而言涉及处理器领域,更具体地,涉及一种用于计算设备的计算内核的调试方法、计算设备、计算机可读存储介质和计算机程序产品。
背景技术
当前,在各种复杂网络,如人工智能(Artificial Intelligence,AI)网络、大模型等,中广泛使用了通用计算,这些复杂网络通常是由大量的算子节点组成的深度网络。这些网络的硬件实现可以是包含计算内核的计算设备,如AI芯片、GPU(Graphic ProcessingUnit,图形处理单元)、通用GPU(General Purpose GPU,GPGPU)等。在这样的计算设备中,内存墙的问题始终是高性能计算的关键瓶颈,训练框架和推理框架常常会选择更大粒度的算子融合来实现更好的性能表现。这又对计算内核运行和编译过程中的调试带来了极大的挑战。
当前,虽然存在一些计算内核调试方法,但是这些调试方法都存在着各自的问题,受到适用场景的限制。
发明内容
针对上述问题,本发明通过基于芯片架构的内存抽象设计调试张量结构,能够充分应用硬件的内存加载和存储指令来进行内核状态和关键信息的打印,并且可以通过底层驱动对调试日志进行解释以还原运行时的关键信息,从而快速定位深度学习网络运行时的复杂内核问题。
根据本公开的一个方面,提供了一种用于计算设备的计算内核的调试方法。该调试方法包括:配置调试张量以用于一个应用的多个线程束在所述计算设备的所述计算内核上的调试,所述调试张量的参数包括所述多个线程束的数量、用于每个线程束的调试内存大小以及所述多个线程束的偏移向量;在所述计算内核上对所述应用进行编译后,将所述计算设备的一个或多个计算单元的调试日志打印到所述调试张量所指示的调试内存;以及输出所述调试日志以确定调试日志异常的计算单元以及所述调试日志异常的计算单元所运行的线程束。
在一种实现中,所述调试张量还包括用于所述应用的唯一标识符。
在一种实现中,在所述应用包括一个或多个引擎,每个引擎对应于一个或多个应用程序接口的情况下,配置所述调试张量包括:基于同一调试张量结构配置用于所述应用的应用调试张量,用于每个引擎的引擎调试张量和用于每个应用程序接口的应用程序接口调试张量,并且在所述多个线程束在所述计算内核上运行时,按照所述应用程序接口调试张量、所述引擎调试张量和所述应用调试张量的顺序依次传递所述参数。
在一种实现中,所述多个线程束的偏移向量包括针对每个线程束的地址偏移,并且按照所述应用程序接口调试张量、所述引擎调试张量和所述应用调试张量的顺序依次传递所述参数还包括:在所述应用程序接口调试张量的偏移向量被传递给所述引擎调试张量和所述应用调试张量之后,所述应用程序接口调试张量和所述引擎调试张量的偏移向量复位;以及在常量和标量寄存器中对所述偏移向量进行累加。
在一种实现中,将所述计算内核的一个或多个计算单元的调试日志打印到所述调试张量所指示的调试内存包括:接收打印指令,所述打印指令包括要打印的线程束的标识符和要打印的线程束的调试日志的数量;以及基于所述打印指令中指示的要打印的线程束的标识符、用于每个线程束的调试内存大小、所述常量和标量寄存器中与要打印的线程束相对应的地址偏移、所述应用程序接口调试张量中与要打印的线程束相对应的地址偏移以及每个调试日志的大小确定打印地址。
在一种实现中,所述调试日志包括日志序号、日志类型、调试信息以及时间信息。
在一种实现中,所述日志类型包括融合输出参数,并且所述日志序号包括所有线程束的最大日志序号。
在一种实现中,所述日志类型包括同步指令,并且所述日志序号包括所有线程束的最大日志序号和第二大日志序号。
根据本发明的另一个方面,提供了一种计算设备,包括:至少一个处理器;以及至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理器并且存储用于由所述至少一个处理器执行的指令,所述指令当由所述至少一个处理器执行时,使得所述计算设备执行根据上述方法的步骤。
根据本发明的另一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序代码,所述计算机程序代码在被运行时执行如上所述的方法。
根据本发明的另一个方面,提供了一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序被机器执行时执行如上所述的方法。
附图说明
通过参考下列附图所给出的本公开的具体实施方式的描述,将更好地理解本公开,并且本公开的其他目的、细节、特点和优点将变得更加显而易见。
图1示出了用于实现根据本发明实施例的用于计算内核的调试方法的计算系统的示意图。
图2示出了根据本发明一些实施例的用于计算内核的调试方法的示意性流程图。
图3示出了根据本发明一些实施例的调试张量的物理内存的排布格式的示意图。
图4示出了根据本发明一些实施例的应用的层级结构的示意图。
图5A至图5D示出了根据本发明的实施例的对应用进行运行和编译的过程的调试内存的变化过程的示意图。
图6示出了根据本发明一些实施例的调试日志的数据结构的示意图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一些实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。
图1示出了用于实现根据本发明实施例的用于计算内核的调试方法的计算系统100的示意图。如图1中所示,计算系统100可以包括中央处理单元(CPU)110和在CPU 110控制下执行特定应用的一个或多个计算设备 120。这里,计算设备120可以是如上所述的AI芯片、GPU、GPGPU等。在每个计算设备120中,由计算内核负责对进程、线程、内存以及其他硬件设备进行管理和调用。本文中,以一个计算设备120中的计算内核为例来描述其调试方法,计算内核是基于计算设备120的硬件结构的软件扩充,用于支持实现计算设备120的基本功能。
计算设备120可以包括多个计算单元122,这里,计算单元122可以是GPU或GPGPU中的通用计算单元(Compute Unit ,CU)或者计算执行单元(Execution Unit ,EU)等。在计算设备120运行一个特定应用时,每个计算单元122负责独立处理该应用的一个线程束(warp)。
当前,可用的一些计算内核调试方法包括:能够模拟硬件的软件模拟器、硅后诊断工具、内核单步调试工具、内核裁剪、人工排查数据内存等。
然而,这些调试方法都有适用的场景限制。例如,软件模拟器无法仿真硬件时序,因此真实芯片的问题在软件模拟器上无法复现或者捕获。硅后诊断工具和硬件有限的调试信号对于大模型或者大的计算图往往束手无措,因为难以及时捕捉问题发生点。内核单步调试工具也会面临内核函数过于复杂而无法单步定位到内核代码的精确位置。内核裁剪的问题是会造成真实现场很难还原,耗费大量的实验并带有一定的随机性,让内核程序在芯片上定位周期变得不可控。人工排查数据内存则需要消耗大量人力且排查结果大大依赖于人员的经验水平,从而调试结果不可靠。
对此,在本文中,创新性地设计了专用于计算内核的调试的调试张量,为该调试张量定义了专用的物理内存排布格式,并且定义打印指令以在计算内核的代码运行期间将计算内核的调试日志打印到所定义的物理内存(调试内存),从而使得能够根据所打印的调试日志来快速定位计算内核调试过程中的异常。
图2示出了根据本发明一些实施例的用于计算内核的调试方法200的示意性流程图。
在方框210,首先为一个计算设备120配置调试张量以用于一个特定应用的多个线程束在该计算设备120的计算内核上的调试。
本文中,可以预先定义一个调试张量结构,并且基于该预先定义的调试张量结构配置各个调试张量。每个调试张量的参数可以至少包括该应用的线程束的数量、用于每个线程束的调试内存大小以及多个线程束的偏移向量。
例如,在一种实施例中,调试张量结构可以通过如下伪代码表示:
struct DebugTensor {
uint32_t usharp_id = 0;
uint32_t warp_num = 10;
uint32_t cwarp_size = 4096;
std::vector<uint32_t> current_offsets;
}
其中,warp_num表示该应用的线程束的线程束的数量,其例如可以是32位整数值,本文中以warp_num=10为例来进行描述;cwarp_size表示用于每个线程束的调试内存的大小,其例如可以是32位整数值,本文中以cwarp_size=4096B(4KB)为例来进行描述;current_offsets表示多个线程束的偏移向量,其例如可以是32位标准整数向量,其中,偏移向量的每个元素指示一个对应的线程束的地址偏移。
对于上述调试张量结构,可以为其定义物理内存排布格式。图3示出了根据本发明一些实施例的调试张量的物理内存300的排布格式的示意图。如图3中所示,假设在物理内存300中为每个线程束分配一个调试内存310(如图3中所示的调试内存310-0、310-1、310-2……310-9),每个调试内存310的大小为4096B。每个调试内存310可以用于存放对应的线程束在每个计算单元122上编译产生的调试日志。在本文中,假设每个调试日志的大小为12B,每个调试日志的数据结构如下文结合图6所示。
此外,物理内存300还可以包括为每个线程束分配的头部内存320,用于存放该线程束运行所产生的头部信息。在一些实例中,假设为每个线程束分配如图3所示的64B的头部内存320。这里的头部信息是线程束运行所产生的公共信息,本文中不对头部信息和头部内存进行详细描述。
此外,如上所示,该调试张量结构还可以包括用于该应用的唯一标识符usharp_id,该标识符usharp_id可以在该应用的所有线程束的运行和调试期间用于计算各个线程束的地址偏移。注意,标识符usharp_id可以不是必需的,或者可以不在调试张量结构中定义而通过其他方式指示。本文中,假设在调试张量结构中定义usharp_id,并且以usharp_id=0为例来进行描述。
取决于应用的结构层级,在该应用运行和编译过程中可能涉及多个层次的结构,在方框210中,需要为每个层次的结构配置单独的调试张量。
图4示出了根据本发明一些实施例的应用的层级结构的示意图。如图4中所示,假设该应用为一个DNN(Deep Neural Network,深度神经网络)应用,该应用包括一个或多个引擎(如图4中所示的引擎GE0、GE1),每个引擎包括一个或多个核函数kernel(如图4中引擎GE0包括核函数kernel0和kernel1,引擎GE1包括核函数kernel2),并且每个核函数kernel对应于一个应用程序接口llapi,这里为了简洁起见也可以称为每个引擎对应于一个或多个应用程序接口llapi,如图4中所示的引擎GE0对应于两个应用程序接口llapi0和llapi1,引擎GE1对应于一个应用程序接口llapi2。
在这种情况下,在方框210中,可以基于上述同一调试张量结构配置用于该应用的应用调试张量(dnn::debug_tensor),用于每个引擎的引擎调试张量(ge::debug_tensor)和用于每个应用程序接口的应用程序接口调试张量(llapi::debug_tensor)。
继续图2,在方框220,在计算设备120的计算内核上对该应用进行编译后,可以将一个或多个计算单元122的调试日志打印到调试张量所指示的调试内存中。
接着,在方框230,计算内核可以输出方框220产生的调试日志以确定调试日志异常的计算单元122以及调试日志异常的计算单元122所运行的线程束。例如,可以将调试日志输出并可视化显示在CPU 110连接的显示器上。在调试日志的产生过程中,如果所有计算单元122都正常执行,则所有调试内存都将被写入调试日志并被输出,而在计算单元122出现挂起或错误等异常情况时,将有部分调试内存未被写入调试日志。在这种情况下,可以通过确定调试日志异常来确定对应的计算单元122异常,并且确定该异常的计算单元122上运行的线程束。
图5A至图5D示出了根据本发明的实施例的对应用进行运行和编译的过程的调试内存的变化过程的示意图。这里,结合图3所示的物理内存300的排布格式和图4所示的应用DNN的层级结构来对图5A至图5D进行描述。
图5A示出了应用初始运行时的调试内存的示意图。如图5A所示,在应用DNN初始运行时,为每个线程束warp0、warp1、……warp9配置的调试内存都为空。此时,基于上述调试张量结构可以将应用调试张量dnn::debug_tensor初始化为:
dnn::debug_tensor
usharp_id: 0
warp_num: 10
cwarp_size: 4096
current_offsets:
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
这里,假设每个线程束的初始地址偏移都为0,从而应用调试张量dnn::debug_tensor的偏移向量表示为{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}。
在开始对核函数kernel0进行编译时,依次使用上述应用调试张量dnn::debug_tensor来初始化引擎调试张量ge::debug_tensor和应用程序接口调试张量llapi::debug_tensor。
此外,计算设备120中的常量和标量寄存器(Constant and Scalar Register,CSR)也可以保存一个偏移向量,用于记录执行每个打印指令之后调试内存的累计地址偏移,并且在初始化时CSR中的偏移向量也被初始化,例如为{0, 0, 0, 0, 0, 0, 0, 0, 0,0}。
图5B示出了应用的核函数kernel0编译时的调试内存的示意图。
这里,假设打印指令是在线程束warp3上打印3条调试日志,在线程束warp4上打印2条调试日志,则执行该打印指令后的调试内存如图5B所示(其中12B指示每个调试日志的大小,图中的每个12B表示一个调试日志)。
此时,应用程序接口调试张量llapi::debug_tensor中的偏移向量被修改为{0,0, 0, 36B, 24B, 0, 0, 0, 0, 0},即,基于打印指令中的要打印的线程束的调试日志的数量和每个调试日志的大小修改偏移向量中与要打印的线程束相对应的地址偏移。例如,在图5B的实例中,在线程束warp3上打印3条12B的调试日志,则调试向量中与线程束warp3相对应的地址偏移为3*12B=36B,类似地,在线程束warp4上打印2条12B的调试日志,则调试向量中与线程束warp4相对应的地址偏移为2*12B=24B。
在编译之后,修改后的偏移向量{0, 0, 0, 36B, 24B, 0, 0, 0, 0, 0}被依次传递给引擎调试张量ge::debug_tensor和应用调试张量dnn::debug_tensor。
之后,可以将引擎调试张量ge::debug_tensor和应用程序接口调试张量llapi::debug_tensor中的偏移向量复位为{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},并且在CSR中对偏移向量进行累加,即,将CSR中的偏移向量也修改为{0, 0, 0, 36B, 24B, 0, 0, 0, 0,0}。
图5C示出了应用的核函数kernel1编译时的调试内存的示意图。
这里,假设打印指令是在线程束warp3上打印2条调试日志,在线程束warp4上打印3条调试日志,则执行该打印指令后的调试内存如图5C所示(其中12B指示每个调试日志的大小,图中的每个12B表示一个调试日志)。
此时,应用程序接口调试张量llapi::debug_tensor中的偏移向量被修改为{0,0, 0, 24B, 36B, 0, 0, 0, 0, 0},即,基于打印指令中的要打印的线程束的调试日志的数量和每个调试日志的大小修改偏移向量中与要打印的线程束相对应的地址偏移。例如,在图5C的实例中,在线程束warp3上打印2条12B的调试日志,则调试向量中与线程束warp3相对应的地址偏移为2*12B=24B,类似地,在线程束warp4上打印3条12B的调试日志,则调试向量中与线程束warp4相对应的地址偏移为3*12B=36B。
在编译之后,修改后的偏移向量{0, 0, 0, 24B, 36B, 0, 0, 0, 0, 0}被依次传递给引擎调试张量ge::debug_tensor和应用调试张量dnn::debug_tensor。
之后,可以将引擎调试张量ge::debug_tensor和应用程序接口调试张量llapi::debug_tensor中的偏移向量复位为{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},并且在CSR中对偏移向量进行累加,即,将CSR中的偏移向量修改为{0, 0, 0, (36+24)B, (24+36)B, 0, 0,0, 0, 0}。
图5D示出了应用的核函数kernel2编译时的调试内存的示意图。
这里,假设打印指令是在线程束warp4上打印1条调试日志,在线程束warp6上打印2条调试日志,则执行该打印指令后的调试内存如图5D所示(其中12B指示每个调试日志的大小,图中的每个12B表示一个调试日志)。
此时,应用程序接口调试张量llapi::debug_tensor中的偏移向量被修改为{0,0, 0, 0, 12B, 0, 24B, 0, 0, 0},即,基于打印指令中的要打印的线程束的调试日志的数量和每个调试日志的大小修改偏移向量中与要打印的线程束相对应的地址偏移。例如,在图5D的实例中,在线程束warp4上打印1条12B的调试日志,则调试向量中与线程束warp4相对应的地址偏移为1*12B=12B,类似地,在线程束warp6上打印2条12B的调试日志,则调试向量中与线程束warp6相对应的地址偏移为2*12B=24B。
在编译之后,修改后的偏移向量{0, 0, 0, 0, 12B, 0, 24B, 0, 0, 0}被依次传递给引擎调试张量ge::debug_tensor和应用调试张量dnn::debug_tensor。
之后,可以将引擎调试张量ge::debug_tensor和应用程序接口调试张量llapi::debug_tensor中的偏移向量复位为{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},并且在CSR中对偏移向量进行累加,即,将CSR中的偏移向量修改为{0, 0, 0, 60B, (60+12)B, 0, 24B, 0,0, 0}。
根据上述图5A至图5D,方框220可以进一步包括:首先,计算设备120的计算内核接收例如来自CPU 110的打印指令。
在一些实施例中,该打印指令可以包括要打印的线程束的标识符和要打印的线程束的调试日志的数量(如上述图5B至图5D所述)。
在另一些实施例中,该打印指令可以是完全打印指令,即打印所有线程束所产生的调试日志。在这种情况下,可以打印在所有计算单元122上运行的线程束的调试日志。
之后,计算内核可以基于打印指令中指示的要打印的线程束的标识符、用于每个线程束的调试内存大小、CSR中与要打印的线程束相对应的地址偏移、应用程序接口调试张量的地址偏移以及每个调试日志的大小确定打印地址。
例如,如图5C所示,对于线程束warp3,打印地址可以如下确定:
addr = cwarp_size * 3 + (csr[3] + llapi::current_offsets[3] * 12B) %cwarp_size
对于线程束warp4,打印地址可以如下确定:
addr = cwarp_size * 4 + (csr[4] + llapi::current_offsets[4] * 12B) %cwarp_size
更一般性地,对于线程束warpn(n=0、1、2……9),打印地址可以如下确定:
addr = cwarp_size * n + (csr[n] + llapi::current_offsets[n] * 12B) %cwarp_size
其中,n表示打印指令中指示的要打印的线程束的标识符,cwarp_size表示用于每个线程束的调试内存大小(这里例如是4096B),csr[n]表示CSR中与要打印的线程束相对应的地址偏移,llapi::current_offsets[n]表示应用程序接口调试张量中与要打印的线程束相对应的地址偏移,12B表示每个调试日志的大小。
此外,上述打印地址的计算是假设该应用的调试内存的初始地址为0,在初始地址不为0的情况下,还需要加上该应用的位移标识符usharp_id的初始地址。
在确定了上述打印地址之后,计算内核可以在所确定的打印地址打印该打印指令中所指示的线程束的调试日志。
图6示出了根据本发明一些实施例的调试日志的数据结构的示意图。这里,假设一个调试日志为12B,如上所述。
如图6中所示,一个调试日志可以包括:日志序号(Log_Num)字段,用于指示该调试日志的序号;日志类型(Log_Type)字段,用于指示输出参数的类型;调试信息(Value)字段,用于指示对应线程束在对应计算单元122上进行编译所产生的调试信息和状态信息;以及时间信息(Time)字段,用于指示产生该调试日志的时间。此外,调试日志还可以包括其他字段或者预留字段以供拓展使用。
在本发明的一些实施例中,日志类型可以包括融合输出参数,并且在这种情况下,日志序号包括所有线程束的最大日志序号。
在本发明的另一些实施例中,日志类型包括同步指令(Bar),并且在这种情况下,日志序号包括所有线程束的最大日志序号和第二大日志序号。
利用本发明的方案,通过基于芯片架构的内存抽象设计调试张量结构,能够充分应用硬件的内存加载和存储指令来进行内核状态和关键信息的打印,并且可以通过底层驱动对调试日志进行解释以还原运行时的关键信息,从而快速定位深度学习网络运行时的复杂内核问题。
以上结合附图对根据本公开的用于计算设备的计算内核的调试方法、计算设备、计算机可读存储介质和计算机程序产品进行了描述。然而本领域技术人员可以理解,上述方法的执行并不局限于图中所示和以上所述的顺序,而是可以以任何其他合理的顺序来执行。此外,计算设备也不必须包括图中所示的所有组件,其可以仅仅包括执行本公开中所述的功能所必须的其中一些组件或更多组件,并且这些组件的连接方式也不局限于图中所示的形式。
本公开可以实现为方法、计算设备、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。计算设备可以包括至少一个处理器和耦合到该至少一个处理器的至少一个存储器,该存储器可以存储用于由至少一个处理器执行的指令。该指令在由该至少一个处理器执行时,该计算设备可以执行上述方法。
在一个或多个示例性设计中,可以用硬件、软件、固件或它们的任意组合来实现本公开所述的功能。例如,如果用软件来实现,则可以将所述功能作为一个或多个指令或代码存储在计算机可读介质上,或者作为计算机可读介质上的一个或多个指令或代码来传输。
本文公开的装置的各个单元可以使用分立硬件组件来实现,也可以集成地实现在一个硬件组件,如处理器上。例如,可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或者晶体管逻辑、分立硬件组件或用于执行本文所述的功能的任意组合来实现或执行结合本公开所描述的各种示例性的逻辑块、模块和电路。
本领域普通技术人员还应当理解,结合本公开的实施例描述的各种示例性的逻辑块、模块、电路和算法步骤可以实现成电子硬件、计算机软件或二者的组合。
本公开的以上描述用于使本领域的任何普通技术人员能够实现或使用本公开。对于本领域普通技术人员来说,本公开的各种修改都是显而易见的,并且本文定义的一般性原理也可以在不脱离本公开的精神和保护范围的情况下应用于其它变形。因此,本公开并不限于本文所述的实例和设计,而是与本文公开的原理和新颖性特性的最广范围相一致。

Claims (11)

1.一种用于计算设备的计算内核的调试方法,包括:
配置调试张量以用于一个应用的多个线程束在所述计算设备的所述计算内核上的调试,所述调试张量的参数包括所述多个线程束的数量、用于每个线程束的调试内存大小以及所述多个线程束的偏移向量;
在所述计算内核上对所述应用进行编译后,将所述计算设备的一个或多个计算单元的调试日志打印到所述调试张量所指示的调试内存;以及
输出所述调试日志以确定调试日志异常的计算单元以及所述调试日志异常的计算单元所运行的线程束。
2.如权利要求1所述的调试方法,其中所述调试张量还包括用于所述应用的唯一标识符。
3.如权利要求1所述的调试方法,其中在所述应用包括一个或多个引擎,每个引擎对应于一个或多个应用程序接口的情况下,配置所述调试张量包括:
基于同一调试张量结构配置用于所述应用的应用调试张量,用于每个引擎的引擎调试张量和用于每个应用程序接口的应用程序接口调试张量,并且在所述多个线程束在所述计算内核上运行时,按照所述应用程序接口调试张量、所述引擎调试张量和所述应用调试张量的顺序依次传递所述参数。
4.如权利要求3所述的调试方法,其中所述多个线程束的偏移向量包括针对每个线程束的地址偏移,并且按照所述应用程序接口调试张量、所述引擎调试张量和所述应用调试张量的顺序依次传递所述参数还包括:
在所述应用程序接口调试张量的偏移向量被传递给所述引擎调试张量和所述应用调试张量之后,所述应用程序接口调试张量和所述引擎调试张量的偏移向量复位;以及
在常量和标量寄存器中对所述偏移向量进行累加。
5.根据权利要求4所述的调试方法,其中将所述计算内核的一个或多个计算单元的调试日志打印到所述调试张量所指示的调试内存包括:
接收打印指令,所述打印指令包括要打印的线程束的标识符和要打印的线程束的调试日志的数量;以及
基于所述打印指令中指示的要打印的线程束的标识符、用于每个线程束的调试内存大小、所述常量和标量寄存器中与要打印的线程束相对应的地址偏移、所述应用程序接口调试张量中与要打印的线程束相对应的地址偏移以及每个调试日志的大小确定打印地址。
6.根据权利要求1所述的调试方法,其中所述调试日志包括日志序号、日志类型、调试信息以及时间信息。
7.根据权利要求6所述的调试方法,其中所述日志类型包括融合输出参数,并且所述日志序号包括所有线程束的最大日志序号。
8.根据权利要求6所述的调试方法,其中所述日志类型包括同步指令,并且所述日志序号包括所有线程束的最大日志序号和第二大日志序号。
9.一种计算设备,包括:
至少一个处理器;以及
至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理器并且存储用于由所述至少一个处理器执行的指令,所述指令当由所述至少一个处理器执行时,使得所述计算设备执行根据权利要求1至8中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序代码,所述计算机程序代码在被运行时执行如权利要求1至8中任一项所述的方法。
11.一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序被机器执行时执行根据权利要求1-8中任一项所述的方法。
CN202410216791.5A 2024-02-27 2024-02-27 用于计算设备的计算内核的调试方法、计算设备、计算机可读存储介质和计算机程序产品 Active CN117785591B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410216791.5A CN117785591B (zh) 2024-02-27 2024-02-27 用于计算设备的计算内核的调试方法、计算设备、计算机可读存储介质和计算机程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410216791.5A CN117785591B (zh) 2024-02-27 2024-02-27 用于计算设备的计算内核的调试方法、计算设备、计算机可读存储介质和计算机程序产品

Publications (2)

Publication Number Publication Date
CN117785591A true CN117785591A (zh) 2024-03-29
CN117785591B CN117785591B (zh) 2024-04-26

Family

ID=90385449

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410216791.5A Active CN117785591B (zh) 2024-02-27 2024-02-27 用于计算设备的计算内核的调试方法、计算设备、计算机可读存储介质和计算机程序产品

Country Status (1)

Country Link
CN (1) CN117785591B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017050287A1 (zh) * 2015-09-25 2017-03-30 华为技术有限公司 一种调试方法、多核处理器和调试设备
US20190149565A1 (en) * 2017-11-13 2019-05-16 International Business Machines Corporation Anomaly detection using cognitive computing
CN110476151A (zh) * 2017-01-31 2019-11-19 脸谱公司 使用并行处理的k选择
CN113723586A (zh) * 2020-04-28 2021-11-30 辉达公司 使用一个或更多个神经网络确定的通知
CN114625600A (zh) * 2020-12-11 2022-06-14 慧与发展有限责任合伙企业 基于内存扫描的进程监测
US20220269667A1 (en) * 2021-02-24 2022-08-25 Ronen Grosman Method and system for non-blocking database logging batching

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017050287A1 (zh) * 2015-09-25 2017-03-30 华为技术有限公司 一种调试方法、多核处理器和调试设备
CN110476151A (zh) * 2017-01-31 2019-11-19 脸谱公司 使用并行处理的k选择
US20190149565A1 (en) * 2017-11-13 2019-05-16 International Business Machines Corporation Anomaly detection using cognitive computing
CN113723586A (zh) * 2020-04-28 2021-11-30 辉达公司 使用一个或更多个神经网络确定的通知
CN114625600A (zh) * 2020-12-11 2022-06-14 慧与发展有限责任合伙企业 基于内存扫描的进程监测
US20220269667A1 (en) * 2021-02-24 2022-08-25 Ronen Grosman Method and system for non-blocking database logging batching

Also Published As

Publication number Publication date
CN117785591B (zh) 2024-04-26

Similar Documents

Publication Publication Date Title
US11010681B2 (en) Distributed computing system, and data transmission method and apparatus in distributed computing system
CN109144515B (zh) Dcs图形化算法组态的离线仿真方法和装置
US20050222827A1 (en) Accelerated solution of constraint satisfaction problems by partitioning of the variable space
Jussila et al. Model checking dynamic and hierarchical UML state machines
US20030040896A1 (en) Method and apparatus for cycle-based computation
JPS58222355A (ja) 論理シミユレ−シヨン機械
US20060271347A1 (en) Method for generating commands for testing hardware device models
US8095829B1 (en) Soldier-on mode to control processor error handling behavior
JPH05505271A (ja) コンピュータプログラムをテストし、デバッグする方法
CN114237918A (zh) 一种面向神经网络模型计算的图执行方法和装置
US20120179650A1 (en) Asynchronous assertions
JP2008140405A (ja) 電子回路と制御プログラムとのコバリデーション方法
Merz et al. Simgrid mc: Verification support for a multi-api simulation platform
CN117785591B (zh) 用于计算设备的计算内核的调试方法、计算设备、计算机可读存储介质和计算机程序产品
Ponamgi et al. Debugging multithreaded programs with MPD
Barbosa et al. Reductions and abstractions for formal verification of distributed round-based algorithms
US20080092147A1 (en) Method for Determining Deadlocks in Secondary Processes
Carreira et al. Assessing the effects of communication faults on parallel applications
KR102197539B1 (ko) 신경 네트워크들에서 프로세싱하기
CN113434439A (zh) 一种基于模拟i2c接口的数据连续写入方法及系统
Genius et al. System-level design for communication-centric task farm applications
Moffett et al. Verifying UML-RT protocol conformance using model checking
Magnin et al. An efficient method for computing exact state space of Petri nets with stopwatches
Guerraoui et al. On failure detectors and type boosters
Du et al. Software design, specification, and verification: Lessons learned from the Rether case study

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant