本技术涉及一种自动生成复杂硬件专用指令的技术,包括方法、装置、存储介质和产品,旨在提升专用硬件设计和指令集扩展的效率。该技术通过分析程序收集动态信息,并利用编译器技术实现专用指令的自动化设计。
背景技术
最近,将专用指令集成到通用指令集架构(Instruction SetArchitecture,ISA)中的趋势不断增长,这导致了诸如专用指令集处理器(Application-SpecificInstruction Set Processor,ASIP)等计算平台的兴盛。这一趋势是由图像处理、高级加密标准等各种应用领域的实际需求推动的。代表性的指令集扩展包括英特尔的SSE、GPU(图形处理器,Graphics Processing Unit)张量核心、英特尔的AMX以及高通的HVX。其中,英特尔的SSE用于流处理应用,GPU张量核心用于深度学习,英特尔的AMX和高通的HVX也用于深度学习。然而,专用指令需要深入理解应用程序的算法、数据结构和性能瓶颈,涉及大量的手动工作。
目前,利用中间表示(Intermediate Representation,IR)自动化的专用指令探索和设计成为趋势。然而,为了提取有价值的专用指令并验证其性能、功耗和面积,需要解决几个挑战。首先,专用指令可以从应用程序的任何部分提取,这需要搜索整个代码以识别候选指令并从中选择最好的指令。此外,鉴于指令序列的相似性,这一过程涉及图同构判断,这是一个NP(Nondeterministic polynominal,非确定性多项式)难题。这些因素共同导致了一个庞大且复杂的搜索空间。其次,专用指令应在尽可能减少开销的同时最大化性能效益。专用指令可以通过减少取址和译码开销、减少寄存器访问以及利用操作并行性来获益。专用指令中的操作越多,这些益处可能越大。然而,考虑到硬件面积有限,有必要限制专用指令的数量和大小(操作数量)。
目前的研究尚未完全解决这些挑战。其中,一些方法使用启发式算法来提取候选指令,以避免广泛搜索。然而,这些方法过度削减搜索空间,导致忽视了一些设计点。每个专用指令的输入和输出数量应该受到限制。一方面,输入和输出应满足特定设计要求的限制,例如操作数有限的标量指令;另一方面,减少输入和输出可以减少数据移动(在通用寄存器和特殊寄存器/缓冲区之间)和混排(swizzle)指令,否则会减少专用指令带来的性能增益。相关工作没有考虑输入和输出数量的限制。还有一些方法可以提取精确的输入和输出数量的候选项,但它们无法在搜索过程中利用探索基本块之间的相似性,只在得到专用指令之后进行融合,仅能达到减少硬件面积开销的作用,无法对搜索过程产生帮助。
实现思路