CN115910207A - 实现用于加速史密斯-沃特曼序列对齐的专用指令 - Google Patents
实现用于加速史密斯-沃特曼序列对齐的专用指令 Download PDFInfo
- Publication number
- CN115910207A CN115910207A CN202210791113.2A CN202210791113A CN115910207A CN 115910207 A CN115910207 A CN 115910207A CN 202210791113 A CN202210791113 A CN 202210791113A CN 115910207 A CN115910207 A CN 115910207A
- Authority
- CN
- China
- Prior art keywords
- thread
- instruction
- alignment
- source operand
- sub
- 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.)
- Pending
Links
- 238000002864 sequence alignment Methods 0.000 title abstract description 4
- 238000000034 method Methods 0.000 claims abstract description 125
- 239000011159 matrix material Substances 0.000 claims description 183
- 238000012545 processing Methods 0.000 claims description 105
- 238000004422 calculation algorithm Methods 0.000 claims description 26
- 230000001537 neural effect Effects 0.000 claims 1
- 230000015654 memory Effects 0.000 abstract description 111
- 210000004027 cell Anatomy 0.000 description 51
- 230000006870 function Effects 0.000 description 37
- 239000003607 modifier Substances 0.000 description 29
- 238000004364 calculation method Methods 0.000 description 23
- 238000010586 diagram Methods 0.000 description 20
- 238000005192 partition Methods 0.000 description 20
- 238000003491 array Methods 0.000 description 17
- 230000008569 process Effects 0.000 description 17
- 238000012986 modification Methods 0.000 description 15
- 230000004048 modification Effects 0.000 description 15
- 238000002865 local sequence alignment Methods 0.000 description 12
- 238000004891 communication Methods 0.000 description 11
- 239000000872 buffer Substances 0.000 description 9
- 230000033001 locomotion Effects 0.000 description 8
- 238000004590 computer program Methods 0.000 description 7
- 238000007796 conventional method Methods 0.000 description 5
- 230000006872 improvement Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000013507 mapping Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 108090000623 proteins and genes Proteins 0.000 description 3
- 102000004169 proteins and genes Human genes 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 108020004414 DNA Proteins 0.000 description 2
- 108091028043 Nucleic acid sequence Proteins 0.000 description 2
- 101710146741 Shiftless antiviral inhibitor of ribosomal frameshifting protein Proteins 0.000 description 2
- 102100029950 Shiftless antiviral inhibitor of ribosomal frameshifting protein Human genes 0.000 description 2
- 101710201844 Shiftless antiviral inhibitor of ribosomal frameshifting protein homolog Proteins 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000013215 result calculation Methods 0.000 description 2
- 101000740523 Homo sapiens Syntenin-1 Proteins 0.000 description 1
- 241000282577 Pan troglodytes Species 0.000 description 1
- 102100037219 Syntenin-1 Human genes 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 150000001413 amino acids Chemical class 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 210000000349 chromosome Anatomy 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 210000003917 human chromosome Anatomy 0.000 description 1
- 229910052757 nitrogen Inorganic materials 0.000 description 1
- 239000002773 nucleotide Substances 0.000 description 1
- 125000003729 nucleotide group Chemical group 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 229910052698 phosphorus Inorganic materials 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000010572 single replacement reaction Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30196—Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
Abstract
本公开涉及实现用于加速史密斯‑沃特曼序列对齐的专用指令。提供了用于加速史密斯‑沃特曼序列对齐的各种技术。例如,一组线程中的线程用于使用交错单元格布局将相关数据存储在寄存器中,同时为一个或更多个局部对齐问题计算子对齐数据。在另一个示例中,使用减少计算每个子对齐分数所需的周期数的专用指令。在另一个示例中,线程用于计算一个或更多个局部对齐问题的列的子集的子对齐数据,而其他线程基于从先前线程接收的部分结果数据开始计算子对齐数据。在计算出最大子对齐分数后,线程将最大子对齐分数和对应的位置存储在全局存储器中。
Description
技术领域
各种实施例一般涉及并行处理系统,更具体地,涉及实现用于加速史密斯-沃特曼(Smith-Waterman)序列对齐的专用指令。
背景技术
Smith-Waterman算法用于各种应用,例如科学、工程和数据应用,用于量化两个序列的子序列对齐的好坏,并确定优化的子序列的对齐或这些序列的“局部对齐”。例如,Smith-Waterman算法是许多基因组学算法的构建块,例如用于确定生物体DNA序列以及将DNA或蛋白质序列与基因组数据库进行比较的算法。
为了使用Smith-Waterman算法解决目标序列“T”和查询序列“Q”的局部对齐问题,软件应用程序实施了矩阵填充阶段和回溯阶段或反向矩阵填充阶段。在矩阵填充阶段,软件应用程序实施动态编程技术,将优化局部对齐的计算分解为二维(2D)评分矩阵“H”中包括的相互依赖的子对齐分数的计算。评分矩阵包括但不限于初始值的最顶行和最左列、目标序列的每个符号的不同行以及查询序列的每个符号的不同列。对于长度为M的目标序列和长度为N的查询序列Q,评分矩阵因此是(M+1)x(N+1)矩阵。由于初始值的行和列引入的偏移量,对于0<j<=M和0<k<=N,表示为H(j,k)的子对齐分数量化了以符号T(j-1)结尾的T的任意子序列和以符号Q(k-1)结尾的Q的任意子序列之间的最大相似度。作为矩阵填充阶段的一部分,软件应用程序确定最大子对齐分数和最大子对齐分数在评分矩阵内的位置。在回溯阶段或反向矩阵填充阶段,软件应用程序确定评分矩阵内对应于最大子对齐分数的起始位置。起始位置和最大子对齐分数的位置定义了与目标序列和查询序列的优化局部对齐对应的目标子序列和查询子序列。
因为对长度为M的T和长度为N的Q执行矩阵填充阶段需要(MxN)时间或“二次时间”,而执行回溯阶段需要(M+N)或“线性时间”,在解决许多局部对齐问题时,矩阵填充阶段可能是性能瓶颈。在这方面,对于0<j<=M和0<k<=N,可以通过以下等式(1a)–(1c)计算H(j,k):
在等式(1a)-(1c)中,E和F是存储中间结果的矩阵,以便在计算相关子对齐分数时重复使用。GapDeleteExtend、GapDeleteExtend、GapInsertOpen和GapInsertExtend是“间隙(gap)”常数;Substitution(T(j-1),Q(k-1))是对于符号T(j-1)和Q(k-1)包括在对应于符号匹配值(例如,4)或符号失配值(例如,-1)的替换矩阵中的替换值。
由于在通常大小的DNA和蛋白质序列的矩阵填充阶段必须执行大量计算,一些软件应用程序使用在并行处理器上执行的指令集或“程序”来加速矩阵填充阶段。这些类型的处理器可以通过跨许多不同的处理核心并行执行大量线程来实现非常高的计算吞吐量。在并行处理器上执行Smith-Waterman矩阵填充阶段的一种传统方法涉及将与位置相关联的子对齐分数计算分布在线程组中,这些位置可以彼此独立地计算。回到等式(1a)-(1c),H(j,k)取决于H(j-1,k-1)对应于相邻的左上角对角线位置,E(j-1,k)和H(j-1,k)对应于相邻的顶部位置,F(j,k-1)和H(j,k-1)对应于相邻的左侧位置。因此,可以彼此独立地计算沿着评分矩阵的每个反对角线的子对齐分数计算。在“反对角线”实现方式中,评分矩阵的反对角线从评分矩阵的左上角开始一次处理一个。为了处理每个反对角线,沿反对角线的每个位置都分配给不同的线程,线程并行计算与分配的位置对应的E、F、H和替换值。然后,线程将E、F和H值分别写入存储在共享存储器中的E矩阵、F矩阵和评分矩阵中的相应位置。
上述方法的一个缺点是与每个子对齐分数相关联的计算效率低下会限制归因于并行化整个矩阵填充阶段的性能改进。计算每个子对齐分数涉及顺序执行十个指令,其中包括至少五个加法/减法指令和五个二运算数最大指令。检索F值、E值、子对齐分数和用于计算每个子对齐分数的指令调用的替换值通常涉及执行降低计算吞吐量的附加数据移动指令。此外,确定和存储最大子对齐分数和相关位置需要为每个子对齐分数执行若干指令。由于附加指令导致效率低下,执行矩阵填充阶段所需的时间可能非常长。例如,使用上述方法,对47兆碱基对(Mbp)长的人类21号染色体和33兆碱基对(Mbp)长的黑猩猩22号染色体执行矩阵填充阶段可能需要将近一天的时间。
如前所述,本领域需要更有效的技术来用于并行处理器上执行Smith-Waterman算法的矩阵填充阶段。
发明内容
本发明的一个实施例阐述了一种处理器。该处理器包括对与第一源运算数、第二源运算数、第三源运算数和第一目的地运算数相关联的第一指令进行解码的指令解码器;以及耦合到所述指令解码器的第一执行单元,其基于所述第一源运算数的对应元素和所述第二源运算数的对应元素计算中间总和的一个或更多个元素中的每一个,并将所述第一目的地运算数的一个或更多个元素中的每一个设置为等于至少中间总和的对应元素和第三源运算数的对应元素中的最小值或最大值。
所公开的技术相对于现有技术的至少一个技术优势在于,利用所公开的技术,当使用并行处理器执行Smith-Waterman算法的矩阵填充阶段时,可以减少执行以计算每个子对齐分数的指令的数量。在这方面,利用所公开的技术,单个Smith-Waterman指令或六条指令Smith-Waterman序列可以用于并发地计算分别与一个、两个或四个不同的局部相关联的一个、两个或四个子对齐分数对齐问题。由于使用所公开的技术,与评分矩阵中的每个位置相关联的子对齐分数和中间结果可以以交错方式存储在单个单元格内,因此与从单独矩阵检索相同数据的传统技术相比,与数据移动相关联的低效率可以降低。此外,利用所公开的技术,在确定两个运算数的最小值或最大值时指示所选运算数的指令可用于减少在确定和存储最大子对齐分数和相关位置时执行的指令的数量。这些技术优势提供了对现有技术方法的一种或更多种技术改进。
附图说明
为了能够详细理解各个实施例的上述特征的方式,可以通过参考各个实施例(其中一些实施例在附图中示出)来获得对上文简要概括的发明构思的更具体的描述。然而,应注意,附图仅示出了本发明构思的典型实施例,因此不应以任意方式被认为是对范围的限制,并且存在其他同等有效的实施例。
图1是示出配置为实现各种实施例的一个或更多个方面的系统的框图;
图2是根据各种实施例的包括在图1的并行处理子系统中的并行处理单元的框图;
图3A是根据各种实施例的包括在图2的并行处理单元中的通用处理集群的框图;
图3B是根据各种实施例的图3A的流式多处理器的框图;
图4是根据各种实施例的与图1的Smith-Waterman内核相关联的Smith-Waterman数据的示例说明;
图5是根据其他各种实施例的与图1的Smith-Waterman内核相关联的Smith-Waterman数据的示例说明;
图6示出了根据各种实施例的由图1的Smith-Waterman内核执行的Smith-Waterman指令;
图7示出了根据各种其他实施例的由图1的Smith-Waterman内核执行的Smith-Waterman序列;
图8示出了根据各种实施例的由图1的Smith-Waterman内核执行的最小/最大值和对应的源指示符指令;
图9是根据各种实施例的由图1的Smith-Waterman内核执行的Smith-Waterman二问题伪代码的示例说明;
图10是根据其他各种实施例的由图1的Smith-Waterman内核执行的Smith-Waterman单问题伪代码的示例说明;
图11示出了根据各种实施例的图6和图9的指令如何在执行单元中实现;
图12A是根据各种实施例的由图3A的协作线程阵列(CTA)执行的双路单指令多数据(SIMD)矩阵填充阶段的示例性说明;
图12B是根据其他各种实施例的由图3A的CTA执行的双路SIMD矩阵填充阶段的示例说明;
图13是根据各种实施例的用于在执行Smith-Waterman算法的矩阵填充阶段时存储子对齐数据的方法步骤的流程图;
图14是根据各个实施例的用于在执行Smith-Waterman算法的矩阵填充阶段时通过单个指令执行子对齐计算的方法步骤的流程图;
图15是根据各种实施例的用于在执行Smith-Waterman算法的矩阵填充阶段时通过指令序列执行子对齐计算的方法步骤的流程图;以及
图16是根据各种实施例的用于通过线程组执行Smith-Waterman算法的矩阵填充阶段的方法步骤的流程图。
具体实施方式
在以下描述中,阐述了许多具体细节以提供对各种实施例的更透彻的理解。然而,对于本领域技术人员显而易见的是,可以在没有这些具体细节中的一个或更多个的情况下实践本发明的概念。仅出于解释的目的,本文用标识对象的参考数字和标识需要的实例的括号字母数字字符来表示相似对象的多个实例。
如本文前面所述,在并行处理器上执行Smith-Waterman算法的矩阵填充阶段的一种常规方法中,线程组从评分矩阵的左上角一次处理一个评分矩阵的反对角线。为了处理每个反对角线,线程组并发地计算反对角线的每个位置的子对齐数据(例如,E值、F值、替换值和子对齐分数)。线程组将E值、F值和子对齐分数分别存储在共享存储器中的E矩阵、F矩阵和评分矩阵中。
上述方法的一个缺点是与每个子对齐分数相关联的计算效率低下会限制归因于并行化整个矩阵填充阶段的性能改进。计算子对齐分数涉及执行数据移动指令以从共享存储器中检索必要的F值、E值、子对齐分数和替换值,然后执行包括十个指令的序列。此外,确定和存储作为矩阵填充阶段的输出的最大子对齐分数和相关联的位置需要为每个子对齐分数执行若干指令。由于附加指令导致效率低下,执行矩阵填充阶段所需的时间可能非常长。
为了解决上述问题,在一些实施例中,在主处理器上执行的软件应用程序190将线程组配置为在并行处理器上并发地执行Smith-Waterman(SW)内核192,以便执行矩阵填充一个或更多个局部对齐问题的阶段。下文结合图1更详细地描述软件应用程序190。
SW内核192是可以在并行处理器上执行的指令集(例如,程序、函数等)。如以下结合图4、5和13详细描述的,在一些实施例中,SW内核192实施一种或更多种数据交错技术以减少子对齐数据的移动。在相同或其他实施例中,并行处理器实现一个或更多个专门用于在执行矩阵填充阶段时提高计算效率的指令,并且SW内核192使用任意数量的专用指令。在一些实施例中,SW内核192使用单个专用SW指令或六个专用指令的序列来计算子对齐分数。在相同或其他实施例中,SW内核192使用VIMNMX指令,该指令在选择两个运算数中的最小值或最大值时指示所选运算数,以减少确定和存储最大子对齐分数和相关位置所需的指令数量。下文结合图6、图9、图14详细介绍SW指令。下文结合图7、图10、图11、图15详细介绍六指令序列及相关指令。下文结合图8和图11详细描述VIMNMX指令。
在一些实施例中,为了增加吞吐量,执行SW内核192的线程组通过SIMD交错线程技术并发地执行用于多个对齐问题的矩阵填充阶段。在SIMD交错线程技术中,线程束(warp)中的每个线程针对列的不同子集执行逐行子对齐计算,并且除了线程0之外的每个线程都在子对齐方面紧随其后的线程后面一行计算。例如,在一些实施例中,在初始迭代期间,线程0针对P个局部对齐问题执行对应于H(1,1)-H(1,C)的子对齐计算,其中C和P可以是任意正整数。在下一次迭代中,线程0针对P个局部对齐问题执行与H(2,1)-H(2,C)对应的子对齐计算,线程1针对P个局部对齐问题执行与H(1,C+1)-H(1,2C)对应的子对齐计算。
仅出于解释的目的,软件应用程序190和SW内核192的功能在以下结合图1-16在确定但不限于对于任意数量的局部序列对齐问题中的每一个问题的最大子对齐分数和评分矩阵中的最大子对齐位置的上下文中进行描述。在一些实施例中,SW内核192不保留评分矩阵。例如,在一些实施例中,在任意给定时间最多将两行评分矩阵存储在存储器中。
在一些实施例中,对于超过匹配阈值的每个最大子对齐分数,软件应用程序190使SW内核192生成回溯矩阵,同时针对相应的局部对齐问题重新执行矩阵填充阶段。回溯矩阵指定了每个子对齐分数的派生位置,因此可用于确定优化的局部对齐。
在一些其他实施例中,对于超过匹配阈值的每个最大子对齐分数,软件应用程序190反转对应的目标序列和对应的查询序列。然后,软件应用程序使SW内核192根据相反的序列重新执行矩阵填充阶段。最大子对齐分数的位置对应于评分矩阵内的起始位置,该起始位置对应于最大子对齐分数并且可用于确定优化的局部对齐。
注意,本文描述的技术是说明性的而不是限制性的,并且可以在不脱离本发明的更广泛的精神和范围的情况下进行修改。由软件应用程序190、SW内核192、线程束(warp)、并行处理子系统112、PPU、SM和CPU提供的功能的许多修改和变化对于本领域普通技术人员来说将是显而易见的,而无需脱离所描述实施例的范围和精神。
示例性系统概述
仅出于解释的目的,软件应用程序190和SW内核192的功能在下文结合图1-16在系统100内实现的一些实施例的上下文中进行描述。如下文更详细描述的,在在图1-16中描绘的实施例中,软件应用程序190在CPU 102上执行并且使线程组在一个或更多个流式多处理器(SM)上并发地执行SW内核192。
图1是示出被配置为实现各种实施例的一个或更多个方面的系统100的框图。如图所示,系统100包括但不限于通过存储器桥105和通信路径113耦合到并行处理子系统112的CPU 102和系统存储器104。在一些实施例中,系统存储器104的至少一部分是与CPU 102相关联的主机存储器。存储器桥105还通过通信路径106耦合到输入/输出(I/O)桥107,并且I/O桥107又耦合到交换机116。
在运算中,I/O桥107被配置为从输入设备108接收用户输入信息,例如键盘或鼠标,并将输入信息通过通信路径106和存储器桥105转发给CPU 102进行处理。交换机116被配置为提供I/O桥107和系统100的其他组件之间的连接,例如网络适配器118和附加卡120和121。
还如图所示,I/O桥107耦合到系统盘114,系统盘114可以被配置为存储内容、应用程序和数据以供CPU 102和并行处理子系统112使用。一般而言,系统盘114为应用程序和数据提供非易失性存储,可以包括固定或可移动硬盘驱动器、闪存设备、光盘只读存储器、数字多功能光盘只读存储器、蓝光、高清数字多功能光盘,或其他磁性、光学或固态存储设备。最后,虽然没有明确显示,其他组件,例如通用串行总线或其他端口连接、光盘驱动器、数字多功能光盘驱动器、电影记录设备等,也可以连接到I/O桥接器107。
在各种实施例中,存储器桥105可以是北桥芯片,而I/O桥107可以是南桥芯片。此外,通信路径106和113以及系统100内的其他通信路径可以使用任意技术上合适的协议来实现,包括但不限于外围组件互连Express、加速图形端口、HyperTransport或任意其他总线或本领域已知的点对点通信协议。
在一些实施例中,并行处理子系统112包括但不限于一个或更多个并行处理器。在一些实施例中,每个并行处理器是包括但不限于一个或更多个SM的PPU。每个SM包括但不限于多个在本文中也称为“处理器核心”的执行单元。在一些实施例中,PPU可以相同或不同,并且每个PPU可以与专用并行处理(PP)存储器相关联或不与专用PP存储器相关联。在一些实施例中,与给定PPU相关联的PP存储器也被称为与PPU相关联的“设备存储器”。在相同或其他实施例中,在给定PPU上启动的每个内核驻留在PPU的设备存储器中。
在一些实施例中,并行处理子系统112包括为通用处理优化的电路。如以下结合图2更详细地描述的,这种电路可以跨一个或更多个PPU并入,这些PPU可以被配置为执行通用处理运算。在相同或其他实施例中,并行处理子系统112还包括为图形处理优化的电路。这样的电路可以跨一个或更多个PPU并入,这些PPU可以被配置为执行图形处理运算。在相同或其他实施例中,任意数量的PPU可以将数据输出到任意数量的显示设备110。在一些实施例中,零个或更多个PPU可以被配置为执行通用处理运算而不是图形处理运算,零个或更多个PPU可以被配置为执行图形处理运算而不是通用处理运算,并且零个或更多个PPU可以被配置为执行通用处理运算和/或图形处理运算。在一些实施例中,在CPU 102的控制下执行的软件应用程序可以在一个或更多个PPU上启动内核。
在一些实施例中,并行处理子系统112可以与图1的一个或更多个其他元件集成以形成单个系统。例如,并行处理子系统112可以与CPU 102和其他连接电路集成在单个芯片上以形成片上系统。在相同或其他实施例中,任意数量的CPU 102和任意数量的并行处理子系统112可以分布在任意数量的共享地理位置和/或任意数量的不同地理位置和/或以任意组合在一个或更多个云计算环境(即,封装的共享资源、软件、数据等)中实现。
系统存储器104可以包括但不限于任意数量和/或类型的系统软件(例如操作系统、设备驱动程序、库程序、实用程序等)、任意数量和/或类型的软件应用程序或其任意的组合。系统存储器104中包括的系统软件和软件应用程序可以以任意技术上可行的方式来组织。
如图所示,在一些实施例中,系统存储器104包括但不限于编程平台软件栈160和软件应用程序190。编程平台软件栈160与用于利用并行处理子系统112中的硬件的编程平台相关联加速计算任务。在一些实施例中,软件开发者可以通过但不限于库、编译器指令和/或对编程语言的扩展来访问编程平台。在相同或其他实施例中,编程平台可以是但不限于计算统一设备架构(CUDA)(由加利福尼亚州圣克拉拉的NVIDIA公司开发)、Radeon开放计算平台(ROCm)、OpenCL(OpenCLTM由Khronos集团开发)、SYCL或Intel OneAPI。
在一些实施例中,编程平台软件栈160为软件应用程序190和零个或更多个其他软件应用程序(未示出)提供执行环境。在一些实施例中,软件应用程序190可以是驻留在任意数量和/或类型的存储器中并且在CPU 102上执行任意数量和/或类型的指令和/或并行处理子系统112上的任意数量和/或类型的指令的任意类型的软件应用程序(例如基因组学应用程序)。在一些实施例中,软件应用程序190执行与任意数量的局部序列对齐相关联的任意数量和/或类型的指令。在相同或其他实施例中,软件应用程序190可以以任意技术上可行的方式在并行处理子系统112上执行任意数量和/或类型的指令。例如,在一些实施例中,软件应用程序190可以包括但不限于能够在编程平台软件栈160上启动的任意计算机软件。
在一些实施例中,软件应用程序190和编程平台软件栈160在CPU 102的控制下执行。在相同或其他实施例中,软件应用程序190可以经由编程平台软件栈160访问包括在并行处理子系统112中的一个或更多个PPU。在一些实施例中,编程平台软件栈160包括但不限于任意数量和/或类型的库(未示出)、任意数量和/或类型的运行时间(未示出)、任意数量和/或类型的驱动程序(未示出),或其任意组合。
在一些实施例中,每个库可包括但不限于可由计算机程序(例如,软件应用程序190、SW内核192等)使用并在软件开发期间利用的数据和编程代码。在相同或其他实施例中,每个库可以包括但不限于预先编写的代码、内核、子例程、函数、宏、任意数量和/或类型的其他指令集,或者它们的任意组合,它们被优化用于在并行处理子系统112中的一个或更多个SM。在相同或其他实施例中,包括在编程平台软件栈160中的库可以包括但不限于类、值、类型规范、配置数据、文档或其任意组合。在一些实施例中,库与一个或更多个应用程序编程接口(API)相关联,该API公开在库中实现的至少一部分内容。
尽管未示出,但在一些实施例中,一个或更多个软件库可以包括但不限于预先编写的代码、内核(包括SW内核192)、子例程、函数、宏、任意数量和/或类型的其他指令集、类、值、类型规范、配置数据、文档或它们的任意组合,它们被优化以在并行处理子系统112内的一个或更多个SM上执行。
在一些实施例中,至少一个设备驱动程序被配置为管理并行处理子系统112内的一个或更多个PPU的处理运算。在相同或其他实施例中,任意数量的设备驱动程序实现使软件应用程序能够指定的API功能通过API调用在一个或更多个PPU上执行的指令。在一些实施例中,任意数量的设备驱动程序提供编译功能,用于生成专门为并行处理子系统112优化的机器代码。
在相同或其他实施例中,至少一个运行时包括但不限于能够支持软件应用程序190和零个或更多个其他软件应用的执行的任意技术上可行的运行时系统。在一些实施例中,运行时被实现为与一个或更多个运行时API相关联的一个或更多个库。在相同或其他实施例中,一个或更多个驱动程序被实现为与驱动程序API相关联的库。
在一些实施例中,一个或更多个运行时API和/或一个或更多个驱动API扫描公开但不限于针对存储器管理、执行控制、设备管理、错误处理和同步等中的每一个的任意数量的功能。存储器管理功能可以包括但不限于分配、解除分配和复制设备存储器的功能,以及在主机存储器和设备存储器之间传输数据的功能。执行控制功能可以包括但不限于在包括在并行处理子系统112中的PPU上启动内核的功能。在一些实施例中,相对于运行时API,驱动API是较低级别的对PPU提供更细粒度控制的API。
在相同或其他实施例中,并行运行时使软件应用程序能够跨一个或更多个SM分派线程组。每个软件应用程序都可以驻留在任意数量的存储器中,并以任意组合在任意数量的处理器上执行。处理器的一些示例包括但不限于CPU 102、并行处理子系统112和PPU。在一些实施例中,在CPU 102的控制下执行的软件应用程序可以在一个或更多个PPU上启动内核。
软件应用程序190可以调用任意数量和/或类型的函数来配置线程组,以针对一个或更多个局部对齐问题并发地执行SW算法的矩阵填充阶段。在一些实施例中,每个局部对齐问题与目标序列、查询序列、常数集和替换矩阵相关联。在一些实施例中,与一个局部序列对齐问题相关联的目标序列、查询序列、目标序列的长度、查询序列的长度、常数集和替换矩阵中的每一个可以分别与其他局部序列对齐问题相关联的目标序列、查询序列、目标序列的长度、查询序列的长度、常数集和替换矩阵中的每一个相同或不同。仅出于解释目的,目标序列、查询序列、常数集和替换矩阵在本文中也称为“SW输入数据”。
在一些实施例中,对于每个局部对齐问题,SW算法的矩阵填充阶段的结果是最大子对齐分数和关联评分矩阵内的最大评分位置(例如,行索引和列索引)。在相同或其他实施例中,在任意给定时间仅将评分矩阵的一部分存储在存储器中。例如,在一些实施例中,在任意给定时间仅将两行评分矩阵存储在存储器中。在一些实施例中,一个、两个或四个局部对齐问题共享每个评分矩阵。
在一些实施例中,为了将线程组配置为并发地执行矩阵填充阶段,软件应用程序190从一个或更多个SW内核中选择SW内核192,每个所述SW内核基于与不同的特征相关联的任意数量和/或类型的标准。例如,在一些实施例中,一些SW内核使用单个SW指令来计算子对齐数据,而一些其他SW内核使用六指令的序列来计算子对齐数据。在一些实施例中,一些SW内核实现SIMD交错线程技术以在多个线程之间划分每个局部对齐问题。在相同或其他实施例中,一些SW内核将每个局部对齐问题分配给单个线程。在一些实施例中,输入数据的类型(例如,无符号32位整数、有符号32位整数等)在SW内核中变化。
在一些实施例中,软件应用程序190分配设备存储器用于存储目标序列、查询序列、常数集、替换矩阵和结果。软件应用程序190然后将目标序列、查询序列、常数集和替换矩阵从主机存储器复制到设备存储器。软件应用程序190可以以任意技术上可行的方式组织目标序列、查询序列、常数集、替换矩阵和结果以优化SW内核192的存储器访问。
在相同或其他实施例中,软件应用程序190通过内核调用(未示出)调用或“启动”SW内核192。内核调用包括但不限于SW内核192的名称、执行配置(未示出)和SW内核192的自变量的自变量值(未示出)。在一些实施例中,执行配置指定但没有限制线程组的配置(例如,大小、尺寸等)。可以以任意技术上可行的方式来组织线程组,并且可以以任意技术上可行的方式来指定线程组的配置。
例如,在一些实施例中,线程组被组织为协作线程阵列(CTA)的网格,并且执行配置指定但不限于单维或多维网格大小以及单维或多维CTA大小。CTA网格中的每个线程被配置为对不同的输入数据执行SW内核192。更具体地,在一些实施例中,每个PPU被配置为并发地处理一个或更多个CTA网格,并且网格中的每个CTA并发地对不同的输入数据执行相同的程序。在相同或其他实施例中,每个SM被配置为并发地处理一个或更多个CTA。每个CTA也称为“线程块”。在一些实施例中,每个SM将每个CTA分成一组或更多组并行线程,称为“线程束(warp)”,SM以单指令多线程(SIMT)方式创建、管理、调度和执行这些线程。在一些实施例中,每个线程束包括但不限于固定数量的线程(例如,32)。CTA中的每个线程束对不同的输入数据并发地执行相同的程序,线程束中的每个线程并发地对不同的输入数据执行相同的程序。在一些实施例中,线程束中的线程可以在执行期间发散和重新收敛。
网格大小和CTA大小可以基于任意数量和/或类型的标准以任意技术上可行的方式确定。在一些实施例中,软件应用程序190基于SW输入数据的维度和对网格和CTA可用的硬件资源的量(诸如存储器或寄存器)来确定网格大小和CTA大小。在相同或其他实施例中,软件应用程序190、SW内核192或两者基于网格大小、CTA大小、SW输入数据的维度或其任意组合来确定与SW内核192相关联的任何数量和/或类型的问题配置数据。例如,当SW内核192实现SIMD交错线程矩阵填充技术时,分配给每个线程的列数可以基于寄存器压力来确定。例如,为了避免寄存器溢出,可以减少分配给每个线程的列数。
注意,本文描述的技术是说明性的而不是限制性的,并且可以在不脱离本发明的更广泛的精神和范围的情况下进行修改。在不脱离所描述实施例的范围和精神的情况下,由系统100、CPU 102、并行处理子系统112、软件应用程序190、SW内核192、编程平台软件堆栈160、零个或更多个库、零个或更多个驱动程序和零或更多运行时间提供的功能的许多修改和变化对于本领域普通技术人员将是显而易见的。
应当理解,本文所示的系统是说明性的并且变化和修改是可能的。可以根据需要修改连接拓扑,包括桥的数量和布置、CPU 102的数量以及并行处理子系统112的数量。例如,在一些实施例中,系统存储器104可以直接连接到CPU 102而不是通过存储器桥105,并且其他设备可以通过存储器桥105和CPU 102与系统存储器104通信。在其他替代拓扑中,并行处理子系统112可以连接到I/O桥107或直接连接到CPU 102,而不是连接到存储器桥105。在其他实施例中,I/O桥107和存储器桥105可以是集成到单个芯片中,而不是作为一个或更多个分立器件存在。最后,在某些实施例中,图1中所示的一个或更多个组件可能不存在。例如,可以去除交换机116,并且网络适配器118和附加卡120、121将直接连接到I/O桥107。
如本文前面所述,在一些实施例中,在任意主处理器上执行的任意软件应用程序都可以将线程组配置为在并行处理器上并发地执行SW内核192,以便为一个或更多个局部对齐问题执行矩阵填充阶段。如本文所指,“处理器”可以是能够执行指令的任意指令执行系统、装置或设备。出于解释的目的,术语“功能”和“程序”在本文中均用于指代可以由任意数量和/或类型的处理器执行的任意组一个或更多个指令。此外,术语“内核”用于指代可以在一个或更多个并行处理器上执行的指令集(例如,程序、函数等)。
如本文所提及的,“并行处理器”可以是包括但不限于多个并行处理元件的任意计算系统,所述多个并行处理元件可以被配置为执行任意数量和/或类型的计算。并且计算系统的“并行处理元件”是计算系统中同时执行的物理单元。在一些实施例中,并行处理器可以是并行处理单元(PPU)、图形处理单元(GPU)、张量处理单元、多核心中央处理单元(CPU)、智能处理单元、神经处理单元、神经网络处理器、数据处理单元、视觉处理单元或任意其他类型的处理器或加速器,它们现在或将来可以支持多线程的并行执行。
如本文所提及的,“主处理器”可以是任意类型的并行处理器或能够在并行处理器上启动内核的任意类型的其他处理器。在一些实施例中,主处理器是延迟优化的通用处理器,例如CPU。在一些实施例中,软件应用程序190在并行处理器上执行并且可以配置在并行处理器上执行的线程组以以任意技术上可行的方式实现本文关于SW内核192描述的任意数量的技术。
图2是根据各种实施例的包括在图1的并行处理子系统112中的PPU 202的框图。尽管图2描绘了一个PPU 202,但如上所述,并行处理子系统112可以包括零个或更多个与PPU202相同的其他PPU和零个或更多个与PPU 202不同的其他PPU。如图所示,PPU 202耦合到本地并行处理(PP)存储器204。PPU 202和PP存储器204可以使用一个或更多个集成电路设备来实现,例如可编程处理器、专用集成电路或存储器设备,或以任意其他技术上可行的方式。
如图所示,PPU 202包括为通用处理优化的电路,并且PPU 202可以被配置为执行通用处理运算。尽管在图2中未示出,但在一些实施例中,PPU 202还包括为图形处理优化的电路,包括例如视频输出电路。在这样的实施例中,PPU 202可以被配置为执行通用处理运算和/或图形处理运算。
再次参考图1和图2,在一些实施例中,CPU 102是系统100的主处理器,控制和协调其他系统组件的运算。具体地,CPU 102发出控制PPU 202的运算的命令。在一些实施例中,CPU 102将用于PPU 202的命令流写入可以位于系统存储器104、PP存储器204或CPU 102和PPU 202都可访问的另一个存储位置中的数据结构(图1或图2中均未明确示出)。指向数据结构的指针被写入推入缓冲区(pushbuffer)以启动数据结构中命令流的处理。PPU 202从推入缓冲区读取命令流,然后相对于CPU 102的运算异步地执行命令。在生成多个推入缓冲区的实施例中,可以由应用程序经由设备驱动器(未示出)为每个推入缓冲区指定执行优先级)来控制不同推入缓冲区的调度。
现在返回参考图2和图1,在一些实施例中,PPU 202包括I/O单元205,其经由连接到存储器桥105的通信路径113与系统100的其余部分通信。在实施例中,I/O单元205经由直接连接到CPU 102的通信路径113与系统100的其余部分通信。在相同或其他实施例中,PPU202到系统100的其余部分的连接可以是变化的。在一些实施例中,包括至少一个PPU 202的并行处理子系统112被实现为可以插入系统100的扩展槽的附加卡。在一些其他实施例中,PPU 202可以集成在具有总线桥的单个芯片,例如存储器桥105或I/O桥107。在一些其他实施例中,PPU 202的部分或全部元件可以与CPU 102一起被包括在单个集成电路中或片上系统。
I/O单元205生成用于在通信路径113上传输的分组(或其他信号),并且还接收来自通信路径113的所有传入分组(或其他信号),将传入分组引导到PPU 202的适当组件。例如,与处理任务相关联的命令可被引导至主机接口206,而与存储器运算(例如,从PP存储器204读取或写入)相关联的命令可被引导至交叉开关单元210。主机接口206读取每个推入缓冲区并将存储在推入缓冲区中的命令流传输到前端212。
在运算中,前端212将从主机接口206接收到的处理任务发送到任务/工作单元207内的工作分配单元(未示出)。工作分配单元接收到被编码为任务元数据(TMD)的处理任务的指针)并存储在存储器中。指向TMD的指针包括在命令流中,该命令流被存储为推入缓冲区并由前端212从主机接口206接收。可以编码为TMD的处理任务包括与要处理的数据相关联的索引以及定义如何处理数据的状态参数和命令。例如,状态参数和命令可以定义要对数据执行的程序。
PPU 202有利地实现了基于处理集群阵列230的高度并行处理架构,该处理集群阵列230包括一组C GPC 208,其中C≥1。每个GPC 208能够并发地执行大量(例如,数百或数千)的线程,其中每个线程是程序的一个实例(例如,内核)。在各种应用中,可以分配不同的GPC 208来处理不同类型的程序或用于执行不同类型的计算。GPC 208的分配可以根据每种类型的程序或计算产生的工作量而变化。GPC 208从任务/工作单元207内的工作分配单元接收要执行的处理任务。
任务/工作单元207从前端212接收处理任务,并确保通用处理集群(GPC)208在每个TMD指定的处理任务被启动之前被配置为有效状态。可以为每个用于调度处理任务执行的TMD指定优先级。还可以从处理集群阵列230接收处理任务。可选地,TMD可以包括参数,该参数控制将TMD添加到处理任务列表的头部还是尾部(或添加到指向处理的指针列表)任务),从而提供对执行优先级的另一个级别的控制。
存储器接口214包括一组D个分区单元215,其中D≥1。每个分区单元215耦合到驻留在PP存储器204内的一个或更多个动态随机存取存储器(DRAM)220。在一些实施例中,分区单元215的数量等于DRAM 220的数量,并且每个分区单元215耦合到不同的DRAM 220。在一些其他实施例中,分区单元215的数量可以不同于DRAM 220的数量。本领域普通技术人员将理解,DRAM 220可以用任意其他技术上合适的存储设备代替。在运算中,可以跨DRAM 220存储各种目标,允许分区单元215并行写入每个目标的部分以有效地使用PP存储器204的可用带宽。
给定的GPC 208可以处理要写入PP存储器204内的任意DRAM 220的数据。交叉开关单元210被配置为将每个GPC 208的输出路由到任意分区单元215的输入或任意其他GPC208用于进一步处理。GPC 208经由交叉开关单元210与存储器接口214通信以从任意数量的DRAM 220读取或写入。在一些实施例中,交叉开关单元210除了通过存储器接口214到PP存储器204的连接之外还具有到I/O单元205的连接,从而使不同GPC 208内的SM能够与系统存储器104或不在PPU 202本地的其他存储器进行通信。在图2的实施例中,交叉开关单元210直接与I/O单元205连接。在各种实施例中,交叉开关单元210可以使用虚拟通道来分离GPC208和分区单元215之间的业务流。
同样,GPC 208可以被编程以执行与多种应用和/或算法相关联的处理任务。在一些实施例中,PPU 202被配置为将数据从系统存储器104和/或PP存储器204传送到一个或更多个片上存储器单元,处理数据,并将结果数据写回系统存储器104和/或PP存储器204。然后可以由其他系统组件访问结果数据,包括CPU 102、并行处理子系统112内的另一个PPU202或系统100内的另一个并行处理子系统112。
如上所述,并行处理子系统112中可以包括任意数量的PPU 202。例如,可以在单个附加卡上提供多个PPU 202,或者可以将多个附加卡连接到通信路径113,或者一个或更多个PPU 202可以集成到桥接芯片中。多PPU系统中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可能具有不同数量的处理器核心和/或不同数量的PP存储器204。在存在多个PPU 202的实现中,可以并行运算这些PPU 202以比可能单个PPU 202更高的吞吐量来处理数据。结合一个或更多个PPU 202的系统可以以各种配置和形状因数实现,包括但不限于台式机、膝上型电脑、手持个人计算机或其他手持设备、服务器、工作站、游戏控制台、嵌入式系统等。
图3A是根据各种实施例的包括在图2的PPU 202中的GPC 208的框图。在运算中,GPC 208可以被配置为并行执行大量线程。在一些实施例中,在GPC 208上执行的每个线程是在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令多数据(SIMD)指令发布技术用于支持大量线程的并行执行,而不提供多个独立指令单元。在一些其他实施例中,SIMT技术用于支持大量通常同步的线程的并行执行,使用配置为向GPC 208内的一组处理引擎发出指令的公共指令单元。与所有处理引擎通常执行相同指令的SIMD执行机制不同,SIMT执行允许不同的线程更容易地遵循通过给定程序的不同执行路径。本领域普通技术人员将理解SIMD处理机制代表SIMT处理机制的功能子集。
GPC 208的运算通过管线管理器305控制,管线管理器305将从任务/工作单元207内的工作分配单元(未示出)接收的处理任务分配给一个或更多个SM 310。管线管理器305还可以被配置为通过指定由SM 310输出的已处理数据的目的地来控制工作分配交叉开关316。
在一些实施例中,GPC 208包括但不限于M个SM 310,其中M≥1。在相同或其他实施例中,SM 310中的每一个包括但不限于执行单元组(未在图3A中示出)。可以管线化特定于任意执行单元的处理运算,这使得能够在前一条指令完成执行之前发出新指令以供执行。可以提供给定SM 310内的任意执行单元组合。在各种实施例中,执行单元可以被配置为支持各种不同的运算,包括整数和浮点算术(例如,加法和乘法)、比较运算、布尔运算(例如,和、或、异或)、位移和各种代数函数的计算(例如,平面插值和三角函数、指数函数和对数函数等)。有利地,相同的执行单元可以被配置为执行不同的运算。
如本文先前所述,在一些实施例中,每个SM 310被配置为处理一个或更多个线程束。在一些实施例中,SM 310可以发出和执行线程束级指令。特别地,在一些实施例中,SM310可以发出和执行线程束洗牌(warp shuffle)指令(例如,SHFL_SYNC),其使得能够在线程束中的线程之间进行直接的寄存器到寄存器数据交换。
在一些实施例中,包括在CTA 312中的多个相关线程束可以在SM 310内同时处于活动状态(在不同的执行阶段)。在相同或其他实施例中,CTA 312的大小等于m*k,其中k是线程束中并发地执行的线程的数量,其通常是SM 310内的执行单元数量的整数倍,并且m是SM 310内同时活动的线程束的数量。在一些实施例中,每个CTA 312可以是单个线程、线程的单维数组或被配置为在不同输入数据上并发地执行相同程序的多维线程块。在相同或其他实施例中,每个SM 310可以并发地处理取决于CTA 312的大小的最大数量的CTA 312(例如,一个、两个等)。
在一些实施例中,每个CTA 312中的每个线程都被分配了唯一的线程标识符(ID),线程在执行期间可以访问该标识符。线程ID,可以定义为一维或多维数值,控制线程处理行为的各个方面。例如,线程ID可用于确定线程将处理输入数据集的哪个部分和/或确定线程将产生或写入输出数据集的哪个部分。在一些实施例中,CTA 312中的每个线程可以访问分配给CTA 312的共享存储器的一部分。在相同或其他实施例中,每个CTA 312中的线程可以同步在一起、协作、通信或其以任意技术上可行的方式(例如,通过共享存储器)的任意组合。
如本文前面结合图1所述,在一些实施例中,被配置为执行相同内核的CTA 312被组织成单维或多维网格。在相同或其他实施例中,每个CTA 312被分配唯一CTA ID,在线程执行期间CTA 312中的每个线程可访问该唯一CTA ID。
返回参考图2以及图3A,在一些实施例中,给定网格中的每个CTA 312被调度到PPU202中包括的SM 310之一上。随后,每个CTA 312中的线程在不同的输入数据上并发地执行相同的程序,其中CTA 312中的每个线程在CTA 312被调度到的SM 310内的不同执行单元上执行。
在一些实施例中,每个SM 310包括一级(L1)高速缓存(图3A中未示出)或使用SM310外部的相应L1高速缓存中的空间来支持加载和存储运算等。每个SM 310还可以访问在PPU 202中的所有GPC 208之间共享的二级(L2)高速缓存(未示出)。在一些实施例中,L2高速缓存可以用于在线程之间传输数据。最后,SM 310还可以访问片外“全局”存储器,其可以包括PP存储器204和/或系统存储器104。应当理解,PPU 202外部的任意存储器都可以用作全局存储器。另外,如图3A所示,一点五级(L1.5)高速缓存314可以被包括在GPC 208内并且被配置为接收和保存由SM 310经由存储器接口214从存储器请求的数据,并且提供SM 310请求的数据。此类数据可以包括但不限于指令、统一数据和常数数据。在GPC 208内具有多个SM 310的实施例中,SM 310可以有益地共享缓存在L1.5高速缓存314中的公共指令和数据。
每个GPC 208可以具有相关联的存储器管理单元(MMU)318,其被配置为将虚拟地址映射到物理地址。在各种实施例中,MMU 318可以驻留在GPC 208内或存储器接口214内。MMU 318包括一组页表条目,用于将虚拟地址映射到块或存储器页的物理地址,并且可选地缓存行索引。MMU 318可包括地址转换后备缓冲区或高速缓存,其可驻留在SM 310内、一个或更多个L1高速缓存内或GPC 208内。
在一些实施例中,每个SM 310将处理后的任务传输到工作分配交叉开关316以便将处理后的任务提供给另一个GPC 208以进行进一步处理或将处理后的任务存储在L2高速缓存(未示出)中、PP存储器204中,或经由交叉开关单元210的系统存储器104中。
应当理解,本文描述的核心架构是说明性的并且变化和修改是可能的。其中,任意数量和/或类型的处理单元,例如SM 310,可以被包括在GPC 208内。此外,如上面结合图2所描述的,PPU 202可以包括任意数量的GPC 208它们被配置为在功能上彼此相似,从而执行行为不依赖于GPC 208中的哪一个接收特定处理任务。此外,在一些实施例中,每个GPC 208独立于PPU 202中的其他GPC 208运算以执行一个或更多个应用程序的任务。鉴于前述,本领域普通技术人员将理解图1-3中描述的架构绝不限制本公开的范围。
如CTA 312的斜体所示,在一些实施例中,一个或更多个CTA 312中的每个线程并发地执行SW内核192。CTA 312可以被配置为以任意技术上可行的方式执行SW内核192。此外,可以以任意技术上可行的方式将CTA 312调度到SM 310上。
图3B是根据各种实施例的图3A的SM 310的框图。如图所示,在一些实施例中,SM310包括但不限于子分区单元320(1)-320(4)、存储器输入/输出(MIO)控制单元370、MIO单元380、L1高速缓存390和收敛屏障单元(CBU)360。在一些其他实施例中,SM 310可以包括任意数量的子分区单元320。
在一些实施例中,分配给SM 310的线程束分布在子分区单元320之间。可以为每个子分区单元320分配任意数量的线程束,然而,给定的线程束仅分配给一个子分区单元320。如图所示,每个子分区单元320包括但不限于指令高速缓存342、微调度器分派单元340、核心数据路径单元350和统一寄存器文件332。每个统一寄存器文件332(x)、指令高速缓存342(x)、微调度器分派单元340(x)和核心数据路径单元350(x)的括号数字“x”指示相关联的子分区单元320(x)。
如结合图3A所述,SM 310从管线管理器305接收处理任务。对于每个线程束,分配的子分区单元320(x)接收分配的处理任务并将相关联的指令存储在指令高速缓存342(x)中微调度器分派单元340(x)从指令高速缓存342(x)中读取指令。在一些实施例中,微调度器分派单元340(x)包括但不限于一个或更多个指令解码器(未示出)。在相同或其他实施例中,每个指令解码器耦合到任意数量的执行单元。在微调度器调度单元340(x)中包括的指令解码器对给定指令进行解码之后,微调度器调度单元340(x)将该指令发布到执行单元之一。如果指令以包括在核心数据路径单元350(x)中的任意数量的执行单元354(x)之一为目标,则微调度器分派单元340(x)将该指令发布到执行单元。否则,微调度器调度单元340(x)将指令转发到MIO控制单元370。在一些实施例中,微调度器调度单元340(x)包括但不限于两个调度单元(未示出),其能够启用在每个时钟周期内发出来自同一线程束的两条不同指令。在一些其他实施例中,每个微调度器调度单元340(x)可以包括单个调度单元或附加调度单元。
核心数据路径单元350(x)包括但不限于执行单元354(x)和寄存器文件352(x)。包括在核心数据路径单元350(x)中的每个执行单元354(x)可以执行任意数量和类型的运算来执行分配给子分区单元320(x)的线程束线程。包括在核心数据路径单元350(x)中的每个执行单元354(x)具有固定延迟,例如算术逻辑单元(ALU)。包括在核心数据路径单元350(x)中的每个执行单元354(x)通过任意数量的总线连接到寄存器文件352(x)和统一寄存器文件332(x)。
寄存器文件352(x)是高速缓存存储器,包括但不限于任意数量的寄存器和任意数量的读和/或写端口。在一些实施例中,寄存器文件352(x)中的每个寄存器被分配给线程束之一的线程之一,线程束之一的线程之一被分配给子分区单元320(x)并且不能被任意其他线程直接访问。以这种方式,分配给子分区单元320(x)的每个线程束的每个线程都独占使用寄存器文件352(x)中的一组寄存器。在一些实施例中,可以将任意数量的寄存器组织为存储N个M位值的向量寄存器。例如,在一些实施例中,向量寄存器可以为32线程的线程束中的每个线程存储不同的32位值。可以以任意技术上可行的方式来实现寄存器文件352(x)。在一些其他实施例中,包括在寄存器文件352(x)中的寄存器可以以任意技术上可行的方式布置和分配给线程和/或线程束。
统一寄存器文件332(x)是高速缓存存储器,包括但不限于任意数量的统一寄存器和任意数量的读和/或写端口。可以以任意技术上可行的方式来实现统一寄存器文件332(x)。在一些实施例中,统一寄存器文件332(x)中的每个统一寄存器可被包括在线程束中的所有线程访问。在一些其他实施例中,包括在寄存器文件352(x)中的统一寄存器可以以任意技术上可行的方式布置和分配给线程和/或线程束。
在一些实施例中,CBU 360管理发散线程,执行同步运算,并确保包括在线程束中的所有非退出线程的前向进程。当线程束中只有一部分线程参与指令时,线程束中的线程在此被称为在指令执行期间“发散的”。CBU 360可以被配置为基于任意数量和类型的同步指令执行任意数量和类型的同步运算。
在一些实施例中,MIO单元380包括但不限于任意数量的执行单元354(0)。在相同或其他实施例中,包括在MIO单元380中的每个执行单元354(0)可以执行任意数量和类型的运算以执行分配给SM 310的线程,而与分配的子分区单元320无关。每个执行包括在MIO单元380中的单元354(0)通过任意数量的总线连接到寄存器文件352(1)-452(4)和统一寄存器文件332(1)-332(4)。
如图所示,在一些实施例中,MIO单元380与寄存器文件352(1)-452(4)、统一寄存器文件332(1)-432(4)和L1高速缓存390接口。L1高速缓存390可以包括以任意技术上可行的方式排列的任意类型和数量的片上存储器。MIO单元380和任意数量的总线使包括在SM310中的每个执行单元354(0)-354(4)能够访问包括在L1高速缓存390中的存储器位置。
在一些实施例中,每个SM 310实现但不限于一个或更多个整数管线(未示出)和一个或更多个浮点管线(未示出)。在相同或其他实施例中,每个整数管线通过一组32位整数执行单元执行32位整数运算,每个浮点管线通过一组32位浮点执行单元(图3A中未显示)执行32位浮点运算。在一些实施例中,每个SM 310可以与浮点指令并行地发出和执行整数指令。
在一些实施例中,每个SM 310可以发出和执行一个或更多个专门用于提高SW算法的矩阵填充阶段的计算效率的指令。例如,在一些实施例中,每个SM 310可以发出和执行SW指令、VIADD指令、VIADDMNMX指令、VIMNMX3指令、VIMNMX指令或其任意组合。下文结合图6更详细地描述SW指令。下文结合图7更详细地描述VIADD指令、VIADDMNMX指令、VIMNMX3指令。下文结合图7更详细地描述VIMNMX指令图8。
在相同或其他实施例中,SW指令、VIADD指令、VIADDMNMX指令、VIMNMX3指令、VIMNMX指令或其任意组合与无SIMD、双路SIMD和四路SIMD的线程计算模式(未示出)相关联。如下文更详细描述的,在无SIMD、双路SIMD和四路SIMD的线程计算模式中,每个线程分别计算一个、两个或四个局部对齐问题的子对齐分数。在相同或其他实施例中,编程平台软件栈160中的一个或更多个SW库包括但不限于预先编写的代码、内核、子例程、内在函数、宏、类、值、类型规范等,它们便于使用一项或更多项专用指令。
在一些实施例中,SW指令计算单个线程的SW子对齐数据。SM 310可以以任意技术上可行的方式实现SW指令。在一些实施例中,SW指令是由SM 310直接执行的本机指令。在相同或其他实施例中,SW指令在整数管线中执行。下文结合图5更详细地描述SW指令。
出于解释的目的,图4-16描述了SW内核192、专用指令、宏、内在函数等,用于无SIMD、双路SIMD和四路SIMD的线程计算模式(未示出)。如下文更详细的描述,在无SIMD、双路SIMD和四路SIMD的线程计算模式中,每个线程分别针对一个、两个或四个局部对齐问题在评分矩阵的一个或更多个指定列计算子对齐分数。在一些其他实施例中,可以修改本文描述的技术以实现SW内核、专用指令、宏、内在函数等,其以任意技术上可行的方式将任意数量的局部对齐问题的任意部分(包括全部)分配给每个线程。
交错子对齐数据以减少数据移动
图4是根据各种实施例的与图1的SW内核192相关联的SW数据402(0)的示例说明。更具体地,SW数据402(0)说明但不限于与执行SW内核192的单个线程相关联的数据和与M个目标符号和N个查询符号的最大值对应的(M+1)x(N+1)评分矩阵,其中M和N可以是任意正整数。在一些实施例中,包括图4中描绘的实施例,SW数据402(0)被优化用于评分矩阵遍历模式,其中每个线程在计算用于第j+1行指定的列集的子对齐数据之前,计算用于每个j行指定的列集的子对齐数据,其中j是从1到M的整数。
如图所示,在一些实施例中,SW数据402(0)包括但不限于问题配置数据410、SW输入数据430、交错单元格布局450(0)、矩阵填充数据集490(0)和结果数据集492(0)。如虚线框所示,如果线程计算模式是双路SIMD或四路SIMD,则SW数据402(0)还包括但不限于结果数据集492(1)。如通过两个虚线框所描绘的,如果线程计算模型是四路SIMD,则SW数据402(0)还包括但不限于结果数据集492(3)和结果数据集492(3)。
问题配置数据410包括但不限于可用于确定局部序列对齐问题的数量,分配给每个线程的评分矩阵的列、E值、H值、子对齐值和替换值的数据类型和/或数据格式,或者它们的任意组合的任意数量和/或类型的数据。每个线程可以以任意技术上可行的方式确定问题配置数据410。在一些实施例中,每个线程基于内置变量或变量的属性按需检索和/或导出问题配置数据410。在相同或其他实施例中,每个线程将问题配置数据410的任意部分(包括全部)存储在寄存器文件中。如图所示,在一些实施例中,问题配置数据410包括但不限于每个线程的问题412和每个线程的列414。
对于每个线程,每个线程的问题412指定了局部对齐问题的数量,线程为其计算子对齐分数的至少一部分。如斜体所示,在一些实施例中,每个线程412的问题被表示为P并且等于1、2或4。如果每个线程412的问题是1,那么每个线程计算子的至少一部分一个局部对齐问题的对齐评分。然而,如果每个线程412的问题是2,那么每个线程计算两个局部对齐问题的子对齐分数的至少一部分。并且如果每个线程412的问题是4,那么每个线程计算四个局部对齐问题的子对齐分数的至少一部分。因此,1、2和4的每个线程412的问题分别对应于无SIMD、两路SIMD和四路SIMD的线程计算模式。
在一些实施例中,一个或更多个评分矩阵中的每一个表示针对不同的一组P个局部对齐问题的子对齐数据。如果每个线程的问题412为1,则每个评分矩阵与单个局部对齐问题相关联。然而,如果每个线程412的问题是2,那么每个评分矩阵与不同的两个局部对齐问题集合相关联。并且如果每个线程412的问题是4,那么每个评分矩阵都与一组不同的四个局部对齐问题相关联。
在一些实施例中,对于每个线程,每个线程的列414,在此表示为C,指定分配给线程的对应评分矩阵的列数。例如,在一些实施例中,评分矩阵的列在16个线程之间平均划分,每个线程414的列等于N/16,其中N是最长查询序列中包括的符号总数。
SW输入数据430包括但不限于可用于计算子对齐值的任意数量和/或类型的数据。在一些实施例中,SW输入数据430包括但不限于表示为T0的目标序列432(0)、表示为Q0的查询序列434(0)、间隙常数442和替换矩阵444。如通过两个所描绘的虚线框,若线程计算方式为双路SIMD或四路SIMD,则SW输入数据430还包括但不限于目标序列432(1),记为T1,查询序列434(1),记为T1作为Q1。如通过两个虚线框所描绘的,如果线程计算模式是四路SIMD,则SW输入数据430进一步包括但不限于目标序列432(2)、查询序列434(2)、目标序列432(3),以及查询序列434(3),分别表示为T2、Q2、T3和Q3。
在一些实施例中,SW输入数据430中的每个目标序列包括但不限于M个符号或少于M个符号的序列,其用虚拟符号填充到M的长度。在相同或其他实施例中,包括在SW输入数据430中的每个查询序列包括但不限于N个符号或用虚拟符号填充到长度N的少于N个符号的序列。
如图所示,在一些实施例中,间隙常数442(表示为“consts”)包括但不限于分别表示为gdo、gde、gio和gie的GapDeleteOpen、GapDeleteExtend、GapInsertOpen和GapInsertExtend。在相同或其他实施例中,替换矩阵444包括但不限于可包括在目标序列和查询序列中的符号的每个可能组合的替换值。例如,在一些实施例中,目标序列和查询序列是DNA序列,其中每个符号是四种类型的核苷酸(A、G、C和T)之一,并且替换矩阵444是的4x4矩阵,该4x4矩阵为与相同符号对应的矩阵元素指定一个值和为与不同符号对应的矩阵元素指定另一个值。
在一些其他实施例中,目标序列和查询序列是蛋白质序列,其中每个符号是20种氨基酸中的一种,并且替换矩阵444是20x20矩阵,该20x20矩阵为与相同符号对应的矩阵元素指定相同的值和为其余的矩阵元素指定不同的值。在相同或其他实施例中,SW输入数据430可包括但不限于与P个不同局部对齐问题对应的P个不同间隙常数集合和/或P个不同替换矩阵,并且本文描述的技术被相应地修改。
在一些实施例中,每个结果数据集(例如,结果数据集492(0)、结果数据集492(1)、结果数据集492(2)和结果数据集492(3)包括但不限于任意数量和/或能够计算对应局部对齐问题的最大子对齐分数(图4中未示出)和最大评分位置(图4中未示出)的变量类型。在相同或其他实施例中,分配给每个局部对齐问题的线程以任意技术上可行的方式通过结果数据集进行协作,以增量计算局部对齐问题的最大子对齐分数和最大评分位置。
例如,在一些实施例中,与分配给每个局部对齐问题的最高线程相关联的结果数据集492包括但不限于局部对齐问题的最大子对齐分数和对应的最大评分位置的变量(例如,行索引和列索引)。在相同或其他实施例中,其他结果数据集492中的每一个包括但不限于用于最大行子对齐分数的变量和行内的对应最大列。
在一些实施例中,目标序列和查询序列存储在全局存储器中。在相同或其他实施例中,每个线程将每个分配的查询的至少分配的部分复制到驻留在寄存器文件中的数组,并根据需要从全局复制每个分配的目标序列的一部分(例如,两个符号)存储器到驻留在寄存器文件中的变量或数组。在一些实施例中,间隙常数442存储在常数存储器中。在相同或其他实施例中,结果数据集492被存储在寄存器文件中。
如图所示,在一些实施例中,每个线程基于交错单元格布局450(0)将子对齐数据(例如,E值、F值、替换值和子对齐值)临时存储在寄存器文件中。交错单元格布局450(0)使线程能够在不执行任意数据移动运算的情况下计算相关的子对齐数据。在一些实施例中,每个线程将用于先前行的(C+1)列和当前行的(C+1)列的E值、F值、替换值和子对齐值临时存储到驻留在寄存器文件或存储器中的连续存储器位置中的至多SWcell 460的两个数组中,而不是将E值、F值、替换值和子对齐值存储在共享存储器中的单独矩阵中。在一些实施例中,如果线程计算SIMD模式是双路SIMD或四路SIMD,则每个线程分别将两个值或四个值压缩成相同数量的位来表示当线程计算SIMD模式是无路SIMD时的单个值。
如图所示,当线程计算SIMD模式为无SIMD时,每个SWcell 460是SWcell32 462。在一些实施例中,每个SWcell32 462存储但不限于与单个局部对齐问题对应的四个32位值。在相同或其他实施例中,SWcell32 462存储跨32位E数据的一个32位E值,跨32位F数据的一个32位F值,跨32位替换数据的一个32位替换值,以及跨32位子对齐分数数据的一个32位子对齐分数。如本文前面所述,由于初始行和初始列引入的评分矩阵中的偏移,SWcell32 462(j,k)以符号T0(j-1)和Q0(k-1)结束的子序列对应。
在一些实施例中,SWcell32 462(j,k)包括但不限于子对齐分数H(j,k)、E(j,k)、F(j,k)和符号T(j+1)的替换值和记为S(j+1,k+1)的符号Q(k+1)。在一些其他实施例中,SWcell32(j,k)内的H(j,k)、E(j,k)、F(j,k)和S(j+1,k+1)的顺序可以变化。在相同或其他实施例中,SWcell32(j,k)可以存储S(j,k)而不是S(j+1,k+1)或者省略S(j+1,k+1)。
如图所示,当线程计算SIMD模式是双路SIMD时,每个SWcell 460是SWcell16 464。在一些实施例中,每个SWcell16 464存储但不限于与两个局部对齐问题对应的八个16位值。在相同或其他实施例中,SWcell16 464存储跨32位E数据的两个16位E值,跨32位F数据的两个16位F值,跨32位替换数据的两个16位替换值,以及跨32位子对齐分数数据的两个16位子对齐分数。SWcell16 464(j,k)与以符号T0(j-1)、Q0(k-1)、T1(j-1)和Q1(j-1)结尾的子序列对应。
在一些实施例中,SWcell16 464(j,k)包括但不限于H0(j,k)、H1(j,k)、E0(j,k)、E1(j,k)、F0(j,k)),F1(j,k),S0(j+1,k+1)和S1(j+1,k+1)。在相同或其他实施例中,H0(j,k)和H1(j,k)被压缩成单个32位值,可以作为H(j,k)访问。在一些实施例中,E0(j,k)和E1(j,k)被压缩成单个32位值,可以作为E(j,k)访问。在一些实施例中,F0(j,k)和F1(j,k)被压缩成单个32位值,可以作为F(j,k)访问。在一些实施例中,S0(j+1,k+1)和S1(j+1,k+1)被压缩成单个32位值,可以作为S(j,k)访问。在一些其他实施例中,SWcell16 464(j,k)中32位值H(j,k)、E(j,k)、F(j,k)和S(j+1,k+1)的顺序可以变化。在相同或其他实施例中,可以交换H0(j,k)和H1(j,k)在H(j,k)内的顺序;E0(j,k)和E1(j,k)在E(j,k)内的顺序;F0(j,k)和F1(j,k)在F(j,k)内的顺序;S0(j+1,k+1)和S1(j+1,k+1)在S(j+1,k+1)内的顺序;或者它们的任意组合。
如图所示,当线程计算SIMD模式是四路SIMD时,每个SWcell 460是SWcell8 466。在一些实施例中,每个SWcell8 466存储但不限于对应于四个局部对齐问题的十六个8位值。在相同或其他实施例中,SWcell16 464存储跨32位E数据的四个8位E值,跨32位F数据的四个8位F值,跨32位替换数据的四个8位替换值,以及跨32位子对齐分数数据的4个8位子对齐分数。SWcell8 466与以符号T0(j-1)、Q0(k-1)、T1(j-1)、Q1(j-1)、T2(j-1)、Q2(k-1)、T3(j-1)和Q3(j-1)结尾的子序列对应。
在一些实施例中,SWcell8 466(j,k)包括但不限于H0(j,k)、H1(j,k)、H2(j,k)、H3(j,k)、E0(j,k)),E1(j,k),E2(j,k),E3(j,k),F0(j,k),F1(j,k),F2(j,k),F3(j,k),S0(j+1,k+1),S1(j+1,k+1),S2(j+1,k+1)和S3(j+1,k+1)。在相同或其他实施例中,H0(j,k)、H1(j,k)、H2(j,k)和H3(j,k)被压缩成单个32位值,该32位值可以作为H(j,k)被访问。在一些实施例中,E0(j,k)、E1(j,k)、E(j,k)和E3(j,k)被压缩成单个32位值,该32位值可以作为E(j,k)被访问。在一些实施例中,F0(j,k)和F1(j,k)被压缩成单个32位值,该32位值可以作为F(j,k)被访问。在一些实施例中,S0(j+1,k+1)和S1(j+1,k+1)被压缩成单个32位值,该32位值可以作为S(j,k)被访问。在一些其他实施例中,SWcell8 466(j,k)内的32位值H(j,k)、E(j,k)、F(j,k)和S(j+1,k+1)的顺序可以变化。在相同或其他实施例中,可以改变H(j,k)内的H0(j,k)、H1(j,k)、H2(j,k)和H3(j,k)的顺序;E(j,k)内的E0(j,k)、E1(j,k)、E2(j,k)和E3(j,k)的顺序;F(j,k)内的F0(j,k)、F1(j,k)、F2(j,k)和F3(j,k)的顺序;S(j+1,k+1)内的S0(j+1,k+1)、S1(j+1,k+1)、S2(j+1,k+1)和S3(j+1,k+1)的顺序;或者它们的任意组合。
在一些实施例中,图1的编程平台软件栈160中包括的SW内核192和/或一个或更多个SW库包括但不限于便于将数据写入SWcell 460和从SWcell 460读取数据的一个或更多个映射。SWcell32 462、SWcell16 464和SWcell8 462。例如,在一些实施例中,SW内核192和/或一个或更多个SW库包括以下类型定义(2):
在相同或其他实施例中,图1的包括SW内核192和/或一个或更多个SW库的编程平台软件栈160包括但不限于一个或更多个促进涉及间隙常数442的无SIMD、双路SIMD和四路SIMD运算的映射。例如,在一些实施例中,SW内核192和/或一个或更多个SW库包括以下类型定义(3):
在一些实施例中,每个线程存储通过矩阵填充数据集490(0)计算与评分矩阵的分配列对应的子对齐数据所需的信息,该线程针对每行0<=j<M重复使用该数据集。结合叠加在矩阵填充数据集490(0)上的箭头参考等式(1a)-(1c),存储在SWcell 460(j,k)中的H(j,k)取决于存储在SWcell 460(j-1,k-1)中的H(j-k-1)和S(j,k),存储在SWcell 460(j-1,k)中的E(j-1,k)和H(j-1,k),以及存储在SWcell 460(j,k-1)中的F(j,k-1)和H(j,k-1)。
仅出于说明的目的,图4中描绘的矩阵填充数据集490(0)与线程0对应,该线程0计算与查询符号Q*(0)至Q*(C-1)分别对应的评分矩阵的第1至C列的子对齐数据。出于说明的目的,对于无SIMD、双路SIMD和四路SIMD的线程计算SIMD模式,Q*分别表示Q0、Q0-Q1和Q0-Q3,T*分别表示T0、T0-T1和T0–T3。如图所示,在一些实施例中,矩阵填充数据集490(0)包括但不限于驻留在连续寄存器位置或连续存储器位置中的(C+1)个SWcell 460的两个数组。一个数组与目标符号T*(j-1)对应,并且包括但不限于包括在初始列中的SWcell 460(0,0)和分别与查询符号Q*(0)至Q*(C-1)对应的SWcell 460(0,1)至460(0,C)。另一个数组与目标符号T*(j)对应,并且包括但不限于初始列中包括的SWcell 460(1,0)和分别与查询符号Q*(0)至Q*(C-1)对应的SWcell 460(1,1)至460(1,C)。
尽管未示出,但在一些实施例中,每个线程维护指向与当前行对应的SWcell 460的数组的“当前行”寄存器变量和指向与先前行对应的SWcell 460的数组的“先前行”寄存器变量。在计算当前行的子对齐数据之后,线程更新当前行寄存器变量和先前行寄存器变量,使得先前行寄存器变量指向先前由当前行寄存器指向的SWcell 460的数组,并且当前行寄存器变量指向先前由先前行寄存器指向的SWcell 460的数组。线程可以以任意技术上可行的方式交换当前行和先前行的指定。
在一些实施例中,为了交换与目标符号T*(0)至T*(M-1)对应的评分矩阵的第1至M行的当前行和先前行指定,SW内核192实现以下伪代码(4):
请注意,对于伪代码(4),评分矩阵的每个偶数行(包括初始化行)都由从表示为单元格[0,0]的初始单元格开始的单元格数组表示。在相同或其他实施例中,评分矩阵的每个奇数行都由从表示为单元格[1,0]的初始单元格开始的单元格数组表示。
有利地,因为每个线程从左到右计算当前行的子对齐数据,所以通过矩阵填充数据集490(0)和当前行/先前行交换技术自动满足H(j,k)的相关性而不需要执行任意存储器移动指令。
图5是根据其他各种实施例的与图1的SW内核192相关联的SW数据402(1)的示例说明。更具体地,SW数据402(1)说明但不限于与执行SW内核192的单个线程相关联和与对应于M个目标符号和N个查询符号的最大值的(M+1)x(N+1)评分矩阵相关联的数据,其中M和N可以是任意正整数。在一些实施例中,包括图5中描绘的实施例,SW数据402(1)被优化用于评分矩阵遍历模式,其中每个线程在为第j+1行的已分配列集计算子对齐数据之前,为第j行的分配的列集计算子对齐数据,其中j是从1到M的整数。
如图所示,在一些实施例中,SW数据402(1)包括但不限于问题配置数据410、SW输入数据430、交错单元格布局450(1)、矩阵填充数据集490(1)、以及结果数据集492(0)。如虚线框所示,如果线程计算模式是双路SIMD或四路SIMD,则SW数据402(1)还包括但不限于结果数据集492(1)。如通过两个虚线框所描绘的,如果线程计算模型是四路SIMD,则SW数据402(1)还包括但不限于结果数据集492(3)和结果数据集492(3)。
在一些实施例中,包括在SW数据402(1)中的问题配置数据410、SW输入数据430和结果数据集492(0)-492(3)与包括在SW数据402(0)中的问题配置数据410、SW输入数据430和结果数据集492(0)-492(3)相同并且在本文之前结合图4已被描述。相对于包括在SW数据402(0)中的交错单元格布局450(0)和矩阵填充数据集490(0),分别存储包括在SW数据402(1)中的交错单元格布局450(1)和矩阵填充数据集490(1)所需的存储器量被减少。
如图所示,在一些实施例中,每个线程基于交错单元格布局450(1)临时存储子对齐数据(例如,E值、F值、替换值和子对齐值)。交错单元格布局450(1)使线程能够在不执行任何数据移动运算的情况下计算相关子对齐数据。在一些实施例中,每个线程将先前行的(C+1)列和当前行的(C+1)列的子对齐分数和E值临时存储在最多两个位于相邻寄存器或存储器位置的HEcell 560阵列中。每个线程将当前行的(C+1)列的F值临时存储在驻留在连续寄存器或存储器位置中的F结构570的数组中。在相同或其他实施例中,出于性能原因,每个线程将当前行的C列的替换值临时存储在驻留在连续寄存器或存储器位置中的S结构580的数组中。在一些其他实施例中,每个线程将单个替换值临时存储在驻留在寄存器或存储器中的S结构580的单个实例中。在一些实施例中,如果线程计算SIMD模式是双路SIMD或四路SIMD,则每个线程分别将两个值或四个值压缩成相同数量的位来表示当线程计算SIMD模式是无路SIMD时的单个值。
如图所示,当线程计算SIMD模式为无SIMD时,每个HEcell 560是HEcell32 562,该Hecell32 562存储与单个局部对齐问题对应的两个32位值,每个F结构570是F32 572,该F32 572存储与相同局部对齐问题对应的一个32位F值,每个S结构580是S32 582,该S32582存储与相同的局部对齐问题对应的一个32位S值。在相同或其他实施例中,HEcell32562存储一个跨32位E数据的32位E值和一个跨32位子对齐分数数据的32位子对齐分数。如本文前面所述,由于初始行和初始列引入的评分矩阵中的偏移,HEcell32 562(j,k)、F32 572(k)和S32 582(k)与以符号T0(j-1)和Q0(k-1)结尾的子序列对应。在一些实施例中,HEcell32 562(j,k)包括但不限于后跟E(j,k)的子对齐分数H(j,k)。在一些其他实施例中,HEcell32 562(j,k)包括但不限于后跟E(j,k)的子对齐分数H(j,k)。
如图所示,当线程计算SIMD模式为双路SIMD时,每个HEcell 560是一个HEcell16564,存储对应于两个局部对齐问题的四个16位值,每个F结构570是一个F16x2 574,存储两个16位F值对应于两个局部对齐问题,并且每个S结构580是一个S16x2 584,其存储对应于两个局部对齐问题的两个16位S值。在相同或其他实施例中,HEcell16 564存储跨32位E数据的两个16位E值和跨32位子对齐分数数据的两个16位子对齐分数。HEcell16 564(j,k)、F16x2 574(k)和S16x2 584(k)与以符号T0(j-1)、Q0(k-1)、T1(j-1)和Q1(k-1)结尾的子序列对应。
在一些实施例中,HEcell16 564(j,k)包括但不限于H0(j,k)、H1(j,k)、E0(j,k)和E1(j,k)。在相同或其他实施例中,H0(j,k)和H1(j,k)被压缩成单个32位值,可以作为H(j,k)访问。在一些实施例中,E0(j,k)和E1(j,k)被压缩成单个32位值,可以作为E(j,k)访问。在一些其他实施例中,HEcell16 564(j,k)内的32位值H(j,k)和E(j,k)的顺序可以变化。在相同或其他实施例中,可以交换H(j,k)内的H0(j,k)和H1(j,k)的顺序,E(j,k)内的E0(j,k)和E1(j,k)的顺序或者它们的任意组合的顺序。
如图所示,当线程计算SIMD模式为四路SIMD时,每个HEcell 560是一个HEcell8566,存储对应于四个局部对齐问题的八个8位值,每个F结构570是一个F8x4 576,存储四个8位F值对应四个局部对齐问题,每个S结构580是一个S8x4 586,存储四个8位S值对应四个局部对齐问题。在相同或其他实施例中,HEcell8 566存储跨32位E数据的四个8位E值和跨32位子对齐分数数据的四个8位子对齐分数。HEcell8 566(j,k)、F8x4 576(k)和S8x4 586(k)与以符号T0(j-1)、Q0(k-1)、T1(j-1)、Q1(k-1)、T2(j-1)、Q2(k-1)、T3(j-1)和Q3(k-1)结尾的子序列对应。
在一些实施例中,HEcell8 566(j,k)包括但不限于H0(j,k)、H1(j,k)、H2(j,k)、H3(j,k)、E0(j,k))、E1(j,k)、E2(j,k)和E3(j,k)。在相同或其他实施例中,H0(j,k)、H1(j,k)、H2(j,k)和H3(j,k)被压缩成单个32位值,可以作为H(j,k)。在一些实施例中,E0(j,k)、E1(j,k)、E(j,k)和E3(j,k)被压缩成单个32位值,可以作为E(j,k)访问。在一些实施例中,F0(j,k)和F1(j,k)被压缩成单个32位值,可以作为F(j,k)访问。在一些实施例中,可以改变H0(j,k)、H1(j,k)、H2(j,k)和H3(j,k)在H(j,k)内的顺序;E0(j,k)、E1(j,k)、E2(j,k)和E3(j,k)在E(j,k)内的顺序;或者它们的任意组合。
在一些实施例中,包括在图1的编程平台软件栈160中的SW内核192和/或一个或更多个SW库包括但不限于一个或更多个促进向HEcell560、HEcell32 562、HEcell16 564和HEcell8 566写入数据和从HEcell 560、HEcell32 562、HEcell16 564和HEcell8 566读取数据的映射。在相同或其他实施例中,包括在图1的编程平台软件栈160中的SW内核192和/或一个或更多个SW库包括但不限于一个或更多个促进涉及间隙常数442的无SIMD、双路SIMD和四路SIMD运算的映射。例如,在一些实施例中,SW内核192和/或一个或更多个SW库包括本文前面结合图4所描述的类型定义(3)。
在一些实施例中,每个线程通过矩阵填充数据集490(1)存储计算与评分矩阵的分配列相对应的子对齐数据所需的信息,线程为每行0<=j<M重复使用该数据集。结合叠加在矩阵填充数据集490(1)上的箭头参考等式(1a)-(1c),存储在HEcell 560(j,k)中的H(j,k)取决于H(j-1,k-1)存储在HEcell 560(j-1,k-1)中,E(j-1,k)和H(j-1,k)存储在HEcell560(j-1,k-1)、H(j,k-1)存储在HEcell 560中(j-1,k-1)、S(j,k)和F(j,k-1)。
仅出于说明目的,图5中描述的矩阵填充数据集490(1)对应于线程0,该线程0计算分别与查询符号Q*(0)-Q*(C-1)对应的评分矩阵的第1-C列的子对齐数据。如图所示,在一些实施例中,矩阵填充数据集490(1)包括但不限于(C+1)个驻留在连续寄存器位置或连续存储器位置的HEcell 560的两个数组,驻留在连续的寄存器位置或连续的存储器位置的F结构570(0)-570(C),以及驻留在连续的寄存器位置或连续的存储器位置的S结构580(1)-580(C)。HEcell 560的一个数组与目标符号T*(j-1)对应,并且包括但不限于包括在初始列中的HEcell 560(0,0)和分别对应于查询符号Q*(0)–Q*(C-1)的HEcell 560(0,1)–560(0,C)。HEcell 560的另一个数组与目标符号T*(j)对应,并且包括但不限于包括在初始列中的HEcell 560(1,0)和分别对应于查询符号Q*(0)–Q*(C-1)的HEcell 560(1,1)–560(1,C)。F结构570(0)对应于初始列,F结构570(1)-570(C)分别与查询符号Q*(0)-Q*(C-1)对应。S结构580(1)-580(C)分别与查询符号Q*(0)-Q*(C-1)对应。
相对于本文前面结合图4描述的矩阵填充数据集490(0),矩阵填充数据集490(1)在寄存器文件中存储了(2C+3)*32更少的位。例如,如果线程0被分配了100列并使用矩阵填充数据集490(1)而不是矩阵填充数据集490(0)来存储子对齐数据,那么线程0将在寄存器文件中存储6496位。
尽管未示出,但在一些实施例中,每个线程维护指向与当前行对应的HEcell 560数组的“当前行”寄存器变量和指向与先前行对应的HEcell 560数组的“先前行”寄存器变量。在计算当前行的子对齐数据之后,线程更新当前行寄存器变量和先前行寄存器变量,使得先前行寄存器变量指向先前由当前行寄存器指向的HEcell 560的数组,并且当前行寄存器变量指向先前由先前行寄存器指向的HEcell 560的数组。线程可以以任意技术上可行的方式交换当前行和先前行的指定。有利地,因为每个线程从左到右计算当前行的子对齐数据,所以通过矩阵填充数据集490(1)和当前行/先前行交换技术自动满足H(j,k)的相关性不执行任何存储器移动指令。
用于Smith-Waterman计算的专用指令
图6示出了根据各种实施例的由图1的SW内核执行的SW指令610。在一些实施例中,SW指令610是以SIMT方式发出和执行的每线程指令。如本文前面结合图3A-3B所指出的,在一些实施例中,每个SM 310可以以任意技术上可行的方式发出和执行SW指令610。
如在SW指令描述614中所描绘的,在一些实施例中,SW指令610是用于计算SW子对齐数据的每线程指令。在相同或其他实施例中,SW指令610生成与评分矩阵中的单个位置相关联的子对齐数据。在一些实施例中,SW指令610支持但不限于多个SIMD变体、数据类型/大小或其任意组合。
在一些实施例中,SW指令610的无SIMD变体对32位数据进行运算以生成与用于单个局部对齐问题的单个位置相关联的子对齐数据。在相同或其他实施例中,SW指令610的双路SIMD变体对16位数据进行运算以生成与单个位置和两个局部对齐问题相关联的子对齐数据。在一些实施例中,SW指令610的四路SIMD变体对8位数据进行运算以生成与单个位置和四个局部对齐问题相关联的子对齐数据。
如图所示,在一些实施例中,SW指令格式612是“SW{.variant}result,diag,top,left,consts”。因此,每个SW指令610包括但不限于“SW”的指令名称、可选的.variant修饰符、目的地地址结果,和源地址diag、top、left和consts。在一些实施例中,.variant修饰符表示SIMD变体。在相同或其他实施例中,.variant修饰符的允许值包括但不限于1、2和4,其分别表示无SIMD、双路SIMD和四路SIMD。
在一些实施例中,SW指令610被设计为对具有交错单元格布局450(0)的运算数进行运算,并且运算数result、diag、top和left指定驻留在寄存器中的SWcell 460的位置。在一些实施例中,运算数consts是一组常数的地址,包括但不限于GapDeleteOpen、GapDeleteExtend、GapInsertOpen和GapInsertExtend。在相同或多个实施例中,运算数consts指定驻留在统一寄存器、常数存储器或寄存器中的间隙常数442的位置。
在一些实施例中,SW指令610基于来自由diag、top和left运算数指定的SWcell460的每个线程输入以及对所有线程一致且由运算数consts指定的常数输入来计算由运算数结果指定的SWcell 460的数据。在一些实施例中,每线程相关性602以图形方式描绘了SW指令610从对应于diag、top和left运算数的SWcell 460读取的每线程输入数据以及SW指令610计算并写入与结果运算数对应的SWcell 460输出数据。如图所示,result、diag、top和left运算数分别与SWcell 460(j,k)、460(j-1,k-1)、460(j-1,k)和460(j,k-1)对应。在一些实施例中,基于SWcell 460(j-1,k-1)中的H(j-1,k-1)和S(j,k)、SWcell 460(j-1,k)中的H(j-1,k)和E(j-1,k)、以及SWcell 460(j,k-1)中的G(j,k-1)和F(j,k-1),SW指令610计算SWcell 460(j,k)中的E(j,k)、F(j,k)和H(j,k)。SW指令610可以使SM 310以任意技术上可行的方式计算E(j,k)、F(j,k)和H(j,k)。
SW指令伪代码630说明示例性运算,该示例性运算在一些实施例中当执行SW指令610时可由SM 310执行。在一些实施例中,如果.variant修饰符是1,则在SM 310上执行的线程执行以下计算(5a)-(5c):
result.E=max(top.E–consts.gde,top.H–consts.gdo); (5a)
result.F=max(left.F–consts.gie,left.H–consts.gio); (5b)
result.H=max(result.E,result.F,diag.H+diag.S,0); (5c)
在一些实施例中,如果.variant修饰符是2,则SM 310执行以下计算(6a)-(6f):
result.E0=max(top.c16.E0–consts.gde,top.c16.H0–consts.gdo); (6a)
result.F0=max(left.c16.F0–consts.gie,left.c16.H0–consts.gio);(6b)
result.E1=max(top.c16.E1–consts.gde,top.c16.H1–consts.gdo); (6d)
result.F1=max(left.c16.F1–consts.gie,left.c16.H1–consts.gio);(6e)
尽管未示出,但在一些实施例中,如果.variant修饰符是4,则SM 310执行以下计算(7a)-(7l):
result.E0=max(top.c8.E0–consts.gde,top.c8.H0–consts.gdo); (7a)
result.F0=max(left.c8.F0–consts.gie,left.c8.H0–consts.gio);(7b)
result.E1=max(top.c8.E1–consts.gde,top.c8.H1–consts.gdo); (7d)
result.F1=max(left.c8.F1–consts.gie,left.c8.H1–consts.gio);(7e)
result.E2=max(top.c8.E2–consts.gde,top.c8.H2–consts.gdo); (7g)
result.F2=max(left.c8.F2–consts.gie,left.c8.H2–consts.gio);(7h)
result.E3=max(top.c8.E3–consts.gde,top.c8.H3–consts.gdo); (7j)
result.F3=max(left.c8.F3–consts.gie,left.c8.H3–consts.gi (7k)
有利地,并且如在SW指令改进表690中所描绘的,SW指令610需要比传统的10条指令序列更少的指令和更少的周期来计算与评分矩阵中的单个位置相关联的子对齐数据。为了解释的目的,在图6的上下文中,本文所述的所需周期数基于SW指令610的四个周期吞吐量的实施例。在其他实施例中,SW指令610的周期吞吐量和因此所需的数目的周期可能会有所不同。
如图所示,在一些实施例中,为了针对单个局部对齐问题(对应于无SIMD变体)计算与评分矩阵中的单个位置相关联的子对齐数据,传统的10指令序列需要10个指令和10个周期,SW指令610需要1条指令和4个周期。相对于传统的10条指令序列,SW指令610的无SIMD变体因此可以减少90%的指令和60%的周期。
在一些实施例中,为了计算与两个局部对齐问题(对应于双路SIMD变体)的评分矩阵中的单个位置相关联的子对齐数据,传统的10指令序列需要20个指令和20个周期,并且SW指令610需要一个指令和四个周期。相对于传统的10条指令序列,SW指令610的双路SIMD变体因此可以减少95%的指令和80%的周期。
在一些实施例中,为了针对四个局部对齐问题(对应于四路SIMD变体)计算与评分矩阵中的单个位置相关联的子对齐数据,传统的10指令序列需要30个指令和30个周期,并且SW指令610需要一个指令和四个周期。相对于传统的10条指令序列,SW指令610的四路SIMD变体因此可以减少96%的指令和86%的周期。
注意,本文描述的技术是说明性的而不是限制性的,并且可以在不脱离本发明的更广泛的精神和范围的情况下进行修改。SM 310、SW指令610和SW内核192所提供的功能的许多修改和变化对于本领域普通技术人员来说将是显而易见的,而不脱离所描述的实施例的范围和精神。例如,在一些其他实施例中,SW指令610的变体可以对具有不同于交错单元格布局450(0)的布局的运算数,具有不同的数据类型/格式等的不同SIMD变体、E值、F值、替换值和子对齐分数进行运算。
图7示出了根据各种其他实施例的由图1的SW内核192执行的SW序列740。在一些实施例中,SW序列740是用于计算SW子对齐数据的六个指令的每线程序列。在相同或其他实施例中,SW序列740生成与评分矩阵中的单个位置相关联的子对齐数据。在一些实施例中,SW序列740支持但不限于多个SIMD变体、数据类型/大小或其任意组合。
在一些实施例中,SW序列740的无SIMD变体对32位数据进行运算以针对单个局部对齐问题生成与单个位置相关联的子对齐数据。在相同或其他实施例中,SW序列740的双路SIMD变体对16位数据进行运算以生成与单个位置和两个局部对齐问题相关联的子对齐数据。在一些实施例中,SW序列740的四路SIMD变体对8位数据进行运算以生成与单个位置和四个局部对齐问题相关联的子对齐数据。
如图所示,在一些实施例中,SW序列740包括三个VIADD指令、两个VIADDMNMX指令和一个VIMNMX3指令。在一些实施例中,每个VIADD指令、VIADDMNMX指令和VIMNMX3指令是按SIMT方式发出和执行的每线程指令。在一些实施例中,每个SM 310可以以任意技术上可行的方式发出和执行每个VIADD指令、VIADDMNMX指令和VIMNMX3指令。
在一些实施例中,每个VIADD指令、VIADDMNMX指令和VIMNMX3指令支持但不限于多个SIMD变体、数据类型/大小或其任意组合。在一些实施例中,VIADD指令、VIADDMNMX指令和VIMNMX3的每个无SIMD变体对32位整数进行运算以生成单个32位结果。在相同或其他实施例中,VIADD指令、VIADDMNMX指令和VIMNMX3指令的每个双路SIMD变体对16位整数进行运算以生成压缩在32位结果中的两个16位整数。在一些实施例中,SW指令610的四路SIMD变体对8位整数进行运算以生成压缩在32位结果中的四个8位整数。
在一些实施例中,VIADD是在SM 310的浮点(FP)管线中执行的整数加法指令。有利地,在一些实施例中,SM 310可以与浮点指令并行地发出和执行整数指令。因此,在FP管线中执行VIADD指令可以增加多条指令的重叠化/管线化,从而增加整体计算吞吐量。
如图所示,在一些实施例中,VIADD指令格式710是“VIADD{.fmt}result,source_a,{-}source_b”。因此,每个VIADD指令包括但不限于“SW”的指令名称、可选的.fmt修饰符、result、source_a和可选的取反的source_b。result是目标运算数和指令结果。source_a和source_b是源运算数。在一些实施例中,.fmt修饰符的允许值包括但不限于与一个32位整数(无SIMD)、包括两个16位整数(双路SIMD)的压缩数据以及包括四个八位整数(四路SIMD)分别对应的.32、.16x2和.8x4。VIADD指令可以使SM 310以任意技术上可行的方式实现result=source_a+{-}source_b。
在一些实施例中,VIADD指令使SM 310将结果中的每个元素设置为等于source_a中的对应元素和source_b中可选取反的对应元素的总和。如果.fmt修饰符为.32,则result、source_a和source_b各包括一个32位整数元素。如果.fmt修饰符为.16,则result、source_a和source_b分别包括两个元素,每个元素都是16位整数。如果.fmt修饰符为.8,则result、source_a和source_b分别包括四个元素,每个元素都是8位整数。
在相同或其他实施例中,可由SM 310执行以执行VIADD指令的运算由以下示例性伪代码(8)说明:
在一些实施例中,VIADDMNMX指令是整数加法、最小值/最大值,可选地针对在SM310的整数管线中执行的零指令执行。值得注意的是,VIADDMNMX指令将多个常规指令组合成单个指令。如图所示,在一些实施例中,VIADDMNMX指令格式720是“VIADDMNMX{.fmt}{.relu}result,source_a,{-}source_b,source_c,min_or_max”。因此,每个VIADDMNMX指令包括但不限于“VIADDMNMX”的指令名称、可选的.fmt修饰符、可选的.relu修饰符、result、source_a、可选取反的source_b、source_c和可选的min_or_max说明符。result是目标运算数和指令结果。source_a、source_b和source_c是源运算数。min_or_max说明符指定VIADDMNMX指令是执行最小还是最大比较。在一些实施例中,.fmt的允许值修饰符包括但不限于与一个32位无符号整数,一个32位有符号整数,包括两个16位无符号整数的压缩数据,包括两个16位有符号整数的压缩数据,包括四个八位无符号整数的压缩数据以及包括四个八位有符号整数的压缩数据分别对应的“.U32”、“.S32”、“.U16x2”、“.S16x2”、“.U16x2”、“.S16x2”、“.U8x4”和“.S8x4”。在相同或其他实施例中,如果存在可选的.relu修饰符,则VIADDMNMX指令针对0执行最大/最小运算。
在一些实施例中,VIADDMNMX指令使SM 310将结果中的每个元素设置为等于source_c中对应元素的最小值或最大值、source_a中对应元素与source_b中可选取反的对应元素之和,以及可选地零。如果.fmt修饰符为.32,则result、source_a、source_b和source_c各包括一个32位整数元素。如果.fmt修饰符为.16,则result、source_a、source_b和source_c分别包括两个元素,每个元素都是16位整数。如果.fmt修饰符为.8,则result、source_a、source_b和source_c分别包括四个元素,每个元素都是一个8位整数。
在相同或其他实施例中,可由SM 310执行的运算执行VIADDMNMX指令,该VIADDMNMX指令由以下示例性伪代码(8)说明:
在一些实施例中,VIMNMX3指令是可选地针对在SM 310的整数管线中执行的零指令执行的整数三运算数最小值/最大值。值得注意的是,VIMNMX3指令将至少第三运算数添加到常规最小值/最大值运算指令。如图所示,在一些实施例中,VIMNMX3指令格式730是“VIMNMX3{.fmt}{.relu}result,source_a,source_b,source_c,min_or_max”。因此,每个VIMNMX3指令包括但不限于“VIMNMX3”的指令名称、可选的.fmt修饰符、可选的.relu修饰符、result、source_a、source_b、source_c和可选的min_or_max说明符。result是目标运算数和指令结果。source_a、source_b和source_c是源运算数。min_or_max说明符指定VIMNMX3指令是计算source_a、source_b和source_c的最小值还是最大值。在一些实施例中,.fmt修饰符的允许值包括但不限于与一个32位无符号整数,一个32位有符号整数,包括两个16位无符号整数的压缩数据,包括两个16位有符号整数的压缩数据,包括四个八位无符号整数的压缩数据和包括四个八位有符号整数的压缩数据分别对应的“.U32”、“.S32、”“.U16x2,”“.S16x2,”.U16x2,”“.S16x2,”“.U8x4,”和“.S8x4”。在相同或其他实施例中,如果存在可选的.relu修饰符,则VIMNMX3指令针对0执行最大/最小运算。
在一些实施例中,VIMNMX3指令使SM 310将结果中的每个元素设置为等于source_a中的对应元素的最小值或最大值、source_b中的对应元素的最小值或最大值、source_c中的对应元素的最小值或最大值以及可选地0。如果.fmt的修饰符为.32,则result、source_a、source_b和source_c各包括一个32位整数元素。如果.fmt修饰符为.16,则result、source_a、source_b和source_c分别包括两个元素,每个元素都是16位整数。如果.fmt修饰符为.8,则result、source_a、source_b和source_c分别包括四个元素,每个元素都是8位整数。
在一些实施例中,可由SM 310执行的运算执行VIMNMX3指令,该VIMNMX3指令由以下示例性伪代码(10)说明:
在一些实施例中,因为无SIMD、双路SIMD和四路SIMD变体支持VIADD指令、VIADDMNMX指令和VIMNMX3指令,所以无SIMD SW序列742、双路SIMD SW序列744和四路SIMDSW序列746中的每一个包括但不限于六个指令。在一些其他实施例中,SW序列740针对每个SIMD变体包括但不限于六个指令,该SIMD变体支持VIADD指令、VIADDMNMX指令和VIMNMX3指令。
无SIMD SW序列742、双路SIMD SW序列744和四路SIMD SW序列746是SW序列740的不同变体。在一些实施例中,不管SIMD变体,SW序列740是六指令的序列。在一些实施例中,SW序列740是在FP管线中执行的第一VIADD指令,在整数管线中执行的第一VIADDMNMX指令,在FP管线中执行的第二VIADD指令,在整数管线中执行的第二VIADDMNMX指令,在FP管线中执行的第三VIADD指令,以及在整数管线中执行的VIMNMX3.RELU指令。如本文先前所述,在一些实施例中,在FP管线中执行三个VIADD指令并在整数管线中执行其他三个指令可以增加多个指令的重叠/管线化并且因此增加整体计算吞吐量。
图7中描绘的无SIMD SW序列742是对32位数据进行运算以针对单个局部对齐问题生成与单个位置相关联的子对齐数据的示例性指令序列。如图所示,在一些实施例中,无SIMD SW序列742中的第一VIADD.32指令在整数管线中执行并将temp1设置为等于E_top+gde。无SIMD SW序列742指令中的第一VIADDMNMX.S32在FP管线中执行并将E设置为等于(H_top+gde)和temp1中的最大值。无SIMD SW序列742中的第二指令VIADD.32指令在整数管线中执行并将temp2设置为等于F_left+gie。无SIMD SW序列742中的第二VIADDMNMX.S32指令在整数管线中执行并将F设置为等于(H_left+gie)和temp2中的最大值。无SIMD SW序列742中的第三VIADD.32指令在整数管线中执行并将temp3设置为等于H_diag+S。无SIMD SW序列742中的VIMNMX3.S32.RELU指令在FP管线中执行并且将H设置为等于temp1、temp2、temp3和0中的最大值。
图7中描绘的双路SIMD SW序列744是对16位数据进行运算以生成与单个位置和两个局部对齐问题相关联的子对齐数据的示例性指令序列。相对于无SIMD SW序列742,无SIMD指令变体VIADD.32、VIADDMNMX.S32和VIMNMX3.S32.RELU被分别替换为双路SIMD指令变体VIADD.16X2、VIADDMNMX.S16X2和VIMNMX3.S16X2.RELU。
图7中描绘的四路SIMD SW序列746是对8位数据进行运算以生成与单个位置和四个局部对齐问题相关联的子对齐数据的示例性指令序列。相对于无SIMD SW序列742,无SIMD指令变体VIADD.32、VIADDMNMX.S32和VIMNMX3.S32.RELU分别被替换为四路SIMD指令变体VIADD.8X4、VIADDMNMX.8X4和VIMNMX3.8X4.RELU。
有利地,并且如在SW序列改进表790中所描绘的,SW序列740需要比传统的10指令序列更少的指令和更少的周期来计算与评分矩阵中的单个位置相关联的子对齐数据。为了解释的目的,在图7的上下文中,本文描述的所需周期数是基于每个指令吞吐量一个周期的实施例。在其他实施例中,指令的周期吞吐量以及因此所需的周期数可以变化。
如图所示,在一些实施例中,为了针对单个局部对齐问题(对应于无SIMD变体)计算与评分矩阵中的单个位置相关联的子对齐数据,传统的10指令序列需要10个指令和10个周期,并且无SIMD SW序列742需要六个指令和六个周期。相对于传统的10条指令序列,无SIMDSW序列742因此可以减少40%的指令和40%的周期。
在一些实施例中,为了计算与两个局部对齐问题(对应于双路SIMD变体)的评分矩阵中的单个位置相关联的子对齐数据,传统的10指令序列需要20个指令和20个周期,并且双路SIMD SW序列744需要六个指令和六个周期。相对于传统的10条指令序列,双路SIMD SW序列744因此可以减少70%的指令和70%的周期。
在一些实施例中,为了针对四个局部对齐问题(对应于四路SIMD变体)计算与评分矩阵中的单个位置相关联的子对齐数据,传统的10指令序列需要30个指令和30个周期,并且四路SIMD SW序列746需要六个指令和六个周期。相对于传统的10条指令序列,四路SIMDSW序列746因此可以减少80%的指令和80%的周期。
在一些实施例中,包括图7中描绘的实施例,VIADD、VIADDMNMX和VIMNMX3指令的源运算数和目的地运算数与图4的交错单元格布局450(0)和图5的交错单元格布局450(1)两者都是兼容的。在一些实施例中,SW内核192执行SW序列740,其包括但不限于指定一个或更多个SWcell 460中包括的一个或更多个运算数的VIADD、VIADDMNMX和VIMNMX3指令。在实施例中,SW内核192执行SW序列740,其包括但不限于指定包括在一个或更多个HEcell 560中的一个或更多个运算数的VIADD、VIADDMNMX和VIMNMX3指令。
在一些实施例中,SW内核192、一个或更多个其他内核、一个或更多个SW库或其任意组合包括但不限于一个或更多个内在函数,基于SW指令610和交错单元格布局450(0)、SW序列740和交错单元格布局450(0)、SW序列740和交错单元格布局450(1)或其任意组合,计算与任意数量的SIMD变体的评分矩阵的各个部分(例如,单个位置,行,行段,整体)对应的的子对齐数据。
注意,本文描述的技术是说明性的而不是限制性的,并且可以在不脱离本发明的更广泛的精神和范围的情况下进行修改。由SM 310、VIADD指令、VIADDMNMX指令、VIMNMX3指令、SW序列740、无SIMD SW序列742、双路SIMD SW序列744、四路SIMD SW序列746和SW内核192提供的许多修改和变化对于本领域普通技术人员将是显而易见的,而不脱离所描述的实施例的范围和精神。例如,在一些其他实施例中,SW序列740的变体使用在整数管线中执行的传统加法指令而不是VIADD指令。在相同或其他实施例中,无SIMD SW序列742、双路SIMD SW序列744和四路SIMD SW序列746可分别对32位整数、两个压缩16位整数和四个压缩8位整数进行运算,这些整数既不与交错单元格布局450(0)相关联,也不与交错单元格布局450(1)相关联。
图8示出了根据各种实施例的最小/最大值和对应的由图1的SW内核192执行的源指示符指令。最小/最大值和对应的源指示符指令是VIMNMX指令810。在一些实施例中,SW内核192使用VIMNMX指令810来确定最大子对齐分数和对应的最大评分列(在评分矩阵中)和/或任意数量的局部序列对齐问题中的每一个对应的最大评分行(在评分矩阵中)。
用于确定单个局部序列对齐问题的最大子对齐分数和最大评分位置的一些常规方法涉及为每个子对齐分数执行常规最大分数/列序列802或类似指令序列。如图所示,传统的最大分数/列序列802是三指令序列。第一指令是ISETP.GT指令,判断当前分数(记为H)是否大于最大分数(记为maxH),并将比较结果(记为P0)写入谓词(predicate)寄存器。第二指令是SEL指令,如果谓词指示最大分数已更新,则用当前分数覆盖最大分数。第三指令是SEL指令,如果谓词指示最大分数被更新,则该指令用当前列(表示为col)覆盖最大评分列(表示为maxHcol)。
如图所示,执行传统的最大分数/列序列802需要整数管线中的3条指令和6个问题槽。尽管未示出,但相对于常规最大分数/列序列802,确定与双路SIMD对应的附加局部序列对齐问题的最大子对齐分数和对应的最大评分列需要整数管线中的附加指令和附加问题槽。并且为对应于四路SIMD的附加局部序列对齐问题确定最大子对齐分数和相应的最大评分列需要更多指令和整数管线中的更多问题槽。
在一些实施例中,并且如经由VIMNMX指令描述814所描绘的,VIMNMX指令810是每线程最小/最大指令,其指示哪些运算数是最小值/最大值的源。在相同或其他实施例中,VIMNMX指令810提供谓词以指示哪些运算数是最小值/最大值的源。后续指令可以使用谓词选择和存储基于谓词的多个值。有利地,VIMNMX指令810可用于优化许多基于传统比较指令存储多个值的软件应用程序。在一些实施例中,SW指令610支持但不限于多个SIMD变体、数据类型/大小或其任意组合。
如图所示,在一些实施例中,VIMNMX指令格式812是“VIMNMX{.fmt}result,pu,pv,px,py,source_a,source_b,min_or_max”。因此,每条VIMNMX指令810包括但不限于“VIMNMX”的指令名称;一个可选的.fmt修饰符;result、pu、pv、px、py、source_a、source_b和min_or_max说明符。在一些实施例中,result是目标运算数,source_a和source_b是源运算数,min_or_max说明符指定VIMNMX指令是计算source_a和source_b的最小值还是最大值。
在一些实施例中,pu、pv、px和py分别是通道0-3的谓词值。在相同或其他实施例中,.fmt修饰符的允许值包括但不限于与一个32位无符号整数,一个32位有符号整数,两个压缩16位无符号整数,两个压缩16位有符号整数,四个压缩八位无符号整数,和四个压缩八位有符号整数分别对应的“.U32”、“.S32”、“.U16x2”、“.S16x2”、“.U16x2,”、“.S16x2”、“.U8x4”和“.S8x4”。
在一些实施例中,VIMNMX.U32和VIMNMX.S32指令不是VIMNMX指令810的SIMD变体,它设置result等于source_a和source_b的最小值/最大值,并通过谓词值pu指示source_b是否为最小值/最大值。在相同或其他实施例中,VIMNMX.U32和VIMNMX.S32指令不使用pv、px和py。在一些实施例中,可以从VIMNMX.U32和VIMNMX.S32指令中省略pv、px和py。
在一些实施例中,VIMNMX.U16x2和VIMNMX.S16x2指令是VIMNMX指令810的双路SIMD变体,该双路SIMD变体将result的前16位设置等于source_a的前16位和source_b的前16位的最小值/最大值;通过谓词pu指示source_b的前16位是否为最小值/最大值;设置result的后16位等于source_a的后16位和source_b的后16位的最小值/最大值;并通过谓词pv指示source_b的后16位是否为最小值/最大值。在相同或其他实施例中,VIMNMX.U16x2和VIMNMX.S16x2指令不使用px和py。在一些实施例中,可以从VIMNMX.U16x2和VIMNMX.S16x2中省略px和py。
在相同或其他实施例中,VIMNMX.U8x4和VIMNMX.S8x4指令是VIMNMX指令810的四路SIMD变体,该四路SIMD变体基于result确定与result中通道0-3和谓词值pu,pv,px,py分别对应的压缩8位整数,所述result基于在source_a中分别与通道0-3对应的压缩8位整数和在source_b中分别与通道0-3对应的压缩8位整数。
每个SM 310可以以任意技术上可行的方式发出和执行VIMNMX指令810。在一些实施例中,可由SM 310执行以执行VIMNMX指令810的运算由以下示例性伪代码(11)说明:
在一些实施例中,当逐行计算任意数量的局部序列对齐问题中的每一个子对齐分数时,SW内核192实现最大分数/列序列830(0)以确定最大子对齐分数和对应的最大评分列(在评分矩阵中)。
如图所示,最大分数/列序列830(0)是两指令序列。第一指令是VIMNMX指令810,如果当前评分大于最大评分,则用当前评分(表示为H)覆盖最大分数(表示为maxH),并写入比较结果(表示为P0),指示是否最大分数被更新为谓词寄存器。第二指令是SEL指令,如果谓词指示最大分数被更新,则该指令用当前列(表示为col)覆盖最大评分列(表示为maxHcol)。
如图所示,执行最大分数/列序列830(0)需要2条指令。相对于传统的最大分数/列序列802,最大分数/列序列830(0)需要更少的指令。尽管未示出,但是相对于两个常规最大分数/列序列,使用VIMNMX指令810的双路SIMD变体可以需要少3个指令。并且相对于四个常规最大分数/列序列,使用VIMNMX指令810的四路SIMD变体可以减少5个指令。
在一些其他实施例中,当逐行计算任意数量的局部序列对齐问题中的每一个子对齐分数时,SW内核192实现最大分数/列序列830(1)以确定最大子对齐分数和对应的最大评分列(在评分矩阵中)。
如图所示,最大分数/列序列830(1)是两指令序列。第一指令是VIMNMX指令810,如果当前分数大于最大分数,则用当前分数(表示为H)覆盖最大分数(表示为maxH),并写入比较结果(表示为P0),指示是否最大分数被更新到谓词寄存器。第二指令是谓词BRA指令,如果谓词指示最大分数被更新,则分支到代码(表示为updateMaxHcol)用当前列(表示为col)更新最大评分列(表示为maxHcol)。
如图所示,执行最大分数/列序列830(1)需要整数管线中的2个问题槽,以及分支管线中的1个问题槽。相对于传统的最大分数/列序列802,最大分数/列序列830(1)在整数管线中需要更少的两个问题槽,因此可以增加整体计算吞吐量。尽管未示出,但是相对于两个传统的最大分数/列序列,使用VIMNMX指令810的双路SIMD变体可以进一步增加整体计算。并且相对于四个传统的最大分数/列序列,使用VIMNMX指令810的四路SIMD变体可以进一步增加整体计算。
一般而言,VIMNMX指令810对1-4个最大“基”值执行最小值/最大值运算,并提供1-4个指示比较结果的谓词。如最大分数/列序列830(0)和830(1)所示,在基于多种类型的常规比较指令保存多个值时,使用谓词基于比较结果保存其他值可以增加计算吞吐量。
图9是根据各种实施例的由图1的SW内核192执行的SW二问题伪代码910的示例说明。为了解释的目的,SW两个问题伪代码910说明了矩阵填充阶段,其中CTA 312中的每个线程计算对应评分矩阵中每个位置的子对齐分数、最大子对齐分数、最大评分列、以及两个局部对齐问题中的每一个的最大评分行。因为每个线程计算两个局部对齐问题的子对齐分数,所以线程计算SIMD模式是双路SIMD。值得注意的是,SW单一问题伪代码1010使用交错单元格布局450(0)、SW指令610和VIMNMX指令810。
根据初始化伪代码920,SW内核192初始化驻留在寄存器文件中的结果集和驻留在寄存器文件中的(N+1)个SWcell16 464的两个数组。结果集包括但不限于六个16位整数,它们对应于两个局部对齐问题中的每一个的最大子对齐分数、最大评分列和最大评分行。
SW内核192逐行遍历评分矩阵,从初始初始化行之后的行开始。如本文前面结合图4所述,SW内核192实现当前行/先前行交换技术以重用SWcell16s 464的两个数组。行标识符交换伪代码930标识SW两个问题伪代码910的对应部分。
根据替换值分配伪代码940,对于当前行中除了初始化列之外的所有列,SW内核192将两个替换值从替换矩阵444复制到适当的SWcell16 464。有利地,在独立于子对齐循环之前实现替换值循环使得一个线程束能够使用一组指令(例如,load等)执行替换值循环,而另一个线程束正在使用另一组指令(例如,SW.16指令等)执行主循环。
根据SW两个问题伪代码910的主循环,对于当前行中除了初始化列之外的所有列,SW内核192执行子对齐计算伪代码950和结果计算伪代码960。子对齐计算伪代码950是对内在函数__SW_16的调用,该内在函数__SW_16是作为SW指令610的双路SIMD变体(SW.2)的包装器(warpper)。执行SW.2指令导致SM310计算当前的子对齐数据行和当前列用于两个指定的局部对齐问题。因此,SW内核192执行单个指令以计算和存储(在驻留在寄存器文件中的SWcell16 464之一中)两个E值、两个F值和两个子对齐分数。
如图所示,结果计算伪代码960包括但不限于对内在函数__vimnmx_16的调用,该内在函数__vimnmx_16作为后跟两组谓词条件更新伪代码VIMNMX指令810的双路SIMD变体(VIMNMX.S16X2)的包装器。因此,SW内核192执行单个指令以计算和存储目前为止的两个最大子对齐分数和两个谓词值pu和pv。SW内核192然后基于pu和pv有条件地更新最大评分列和最大评分行,用于没有分配的局部对齐问题、一个或两个分配的局部对齐问题。
图10是根据其他各种实施例的由图1的SW内核192执行的SW单一问题伪代码1010的示例说明。为了解释的目的,SW单一问题伪代码1010说明了矩阵填充阶段,其中CTA 312中的每个线程计算对应评分矩阵中每个位置的子对齐分数、最大子对齐分数、最大评分列、以及单个局部对齐问题的最大评分行。因为每个线程计算单个局部对齐问题的子对齐分数,所以线程计算SIMD模式是无SIMD。
SW单一问题伪代码1010使用交错单元格布局450(1)、SW序列伪代码1002和VIMNMX指令810。如图所示,SW序列伪代码1002是内在函数__sw6_1,其是用于无SIMD线程的线程计算模式、矩阵填充数据集490(1)和32位有符号整数的SW评分计算的每线程六指令序列。每线程六指令序列是对应于无SIMD、矩阵填充数据集490(1)和32位有符号整数的线程计算模式的SW序列740的特定变体。如图所示,SW序列伪代码1002使用分别作为VIADD.32指令、VIADDMNMX.S32指令和VIMNMX3.S32指令的包装器的内在函数__viadd、__viaddmnmx和__vimnmx3来实现无SIMD SW序列742,在本文前面结合图5已描述该无SIMD SW序列742使用包括在矩阵填充数据集490(1)中的32位有符号整数运算数。
现在参考SW单一问题伪代码1010,根据初始化伪代码1020,SW内核192初始化驻留在寄存器文件中的结果集,驻留在寄存器文件中的(N+1)个HEcell32 562的两个数组,一个F(N+1)个32位整数的数组,以及一个由N个32位整数组成的S数组。结果集包括但不限于三个32位整数,它们对应于最大子对齐分数、最大评分列和最大评分行。
SW内核192逐行遍历评分矩阵,从初始初始化行之后的行开始。如本文前面结合图5所述,SW内核192实现当前行/先前行交换技术以重用HEcell32 562的两个数组。行标识符交换伪代码1030标识SW单个问题伪代码1010的对应部分。
根据替换值分配伪代码1040,对于当前行中除了初始化列之外的所有列,SW内核192将替换值从替换矩阵444复制到S数组。有利地,在独立于子对齐循环之前实现替换值循环使得一个线程束能够使用指令集(例如,load等)来执行替换值循环,而另一个线程束正在使用另指令集执行主循环(例如,VIADD.32指令等)。
根据SW单问题伪代码1010的主循环,对于当前行中除初始化列之外的所有列,SW内核192执行子对齐计算伪代码1050和结果计算伪代码1060。子对齐计算伪代码1050是对上文结合SW单一问题伪代码1010描述的内在函数__sw6_1的调用。执行内在函数__sw6_1导致SM 310执行六指令序列来计算和存储当前行和当前列分配的局部对齐问题、HEcell32562之一中的E值和子对齐分数以及F数组中的F值。
如图所示,结果计算伪代码1060伪代码包括但不限于对内在函数__vimnmx_32的调用,该内在函数__vimnmx_32作为后跟谓词条件更新伪代码的VIMNMX指令810的无SIMD变体(VIMNMX.U32)的包装器(warpper)。因此,SW内核192执行单个指令以计算和存储目前为止的最大子对齐分数和谓词值pu。SW内核192然后基于pu有条件地更新分配的局部对齐问题的最大评分列和最大评分行。
图11示出了根据各种实施例的图6和9的指令如何在执行单元中实现。如图所示,指令实现1180包括但不限于VIADD实现1182、VIADDMNMX实现1184、VIMNMX3实现1186和VIMNMX实现1188。仅出于解释的目的,关于以下方面在图11中忽略可选的否定(negation)和.relu修饰符。
返回参考图3B,在一些实施例中,浮点执行单元1110和整数执行单元1130被包括在每个核心数据路径单元350中。在相同或其他实施例中,浮点执行单元1110和整数执行单元1130是执行单元。在一些实施例中,指令通过包括在工作分配交叉开关316中的指令解码器被解码并且通过微调度调度单元340和/或MIO控制单元370被发布到执行单元。
在一些实施例中,VIADD实现1182描述了在本文前面结合图11描述的关于加法器1120的VIADD指令的实现,该加法器1120被包括在浮点执行单元1110的示例中,该浮点执行单元1110的示例在一些实施例中被实现在SM 310的FP管线中。如图所示,与VIADD指令的源运算数source_a和source_b对应的信号在此表示为“A”和“B”并且输入到加法器1120中。作为响应,加法器1120计算输出表示为(A+B)的与VIADD指令的结果相对应的信号。
在一些实施例中,VIADDMNMX实现1184、VIMNMX3实现1186和VIMNMX实现1188描述了关于在某些实施例在SM 310的整数管线中实现的整数执行单元1130的示例性部分的对应指令的实现。在一些实施例中,整数执行单元1130包括但不限于加法器1140、多路复用器1150、加法器1160和多路复用器1170。指令控制1132被路由到加法器1140、多路复用器1150、加法器1160和多路复用器1170中的每一个并控制其运算。
与VIADDMNMX指令、VIMNMX3指令和VIMNMX指令810中的每一个的源运算数source_a和source_b对应的信号在此被表示为“A”和“B”并且被输入到加法器1140中。与VIADDMNMX指令和VIMNMX3指令中的每一个的源运算数source_c对应的信号在此表示为“C”,该信号被输入到加法器1160和多路复用器1170。
在一些实施例中,根据VIADDMNMX实现1184,加法器1140计算(A+B)。多路复用器1150选择(A+B)。加法器1160计算(A+B+C)和控制信号1134(1)。基于控制信号1134(1),多路复用器1170输出(A+B)的最大值或最小值以及信号C。
在一些实施例中,根据VIMNMX3实现1186,加法器1140计算(A+B)和控制信号1134(0)。基于控制信号1134(0),多路复用器1150选择A和B的最小值或最大值。加法器1160计算C+(A和B的最小值或最大值)和控制信号1134(1)。基于控制信号1134(1),多路复用器1170输出A、B和C的最大值或最小值。
在一些实施例中,根据VIMNMX实现1188,加法器1140输出(A+B)和谓词值pu、pv、px和py。
图12A是根据各种实施例的由图3A的CTA 312执行的双路SIMD矩阵填充阶段1210(0)的示例图示。更具体地说,图12A示出了CTA 312如何应用“每个线程多个问题”技术来执行双路SIMD矩阵填充阶段的示例。在每个线程的多个问题技术中,CTA 312中的每个线程都被分配了两个不同的局部对齐问题。对于每个局部对齐问题,分配的线程以逐行方式计算相关评分矩阵中每个位置的子对齐分数,最大子对齐分数和指定评分矩阵中的最大子对齐分数的行和列的最大评分位置。
在运算中,给定线程初始化初始行0中每个初始单元格中的E0、E1、H0和H1值以及初始列0中每个初始单元格中的F0、F1、H0和H1值,其中E0、F0、和H0对应于一个指定的局部对齐问题,E1、F1和H1对应于另一个指定的局部对齐问题。然后线程依次计算对应于从左到右遍历第1行的位置(1,1)–(1,N+1)的E0、E1、H0和H1值,更新每个行中的一个或两个最大子对齐分数和最大评分位置(视情况而定)。在遍历第1行之后,线程依次计算对应于从左到右遍历第2行的位置(2,1)–(2,N+1)的E0、E1、H0和H1值。线程继续以这种方式处理评分矩阵中的位置,直到线程完成处理评分矩阵中的(M,N)位置。然后,线程将每个分配的局部对齐问题的最大子对齐分数和最大评分位置存储在全局存储器中。
为了解释的目的,线程1220(0)和线程1220(1)的增量进程通过对应于较早时间1202和较晚时间1230的两个快照来描绘。如图所示,线程1220(0)处理局部对齐问题1212(0)和局部对齐问题1212(1)。如图所示,线程1220(1)处理局部对齐问题1212(2)和局部对齐问题1212(3)。
在较早的时间1202,线程1220(0)已处理与线程1220(0)和局部对齐问题1212(0)和1212(1)相关联的评分矩阵(未显示)中的三分之一行。处理的行对应于与局部对齐问题1212(0)相关联的目标符号的三分之一和与局部对齐问题1212(1)相关联的目标符号的三分之一。在较早的时间1202,线程1220(1)已经处理了与线程1220(1)和局部对齐问题1212(2)和1212(3)相关联的评分矩阵(未显示)中的三分之一行。处理的行对应于与局部对齐问题1212(2)相关联的目标符号的三分之一和与局部对齐问题1212(3)相关联的目标符号的三分之一。
在稍后的时间1230,线程1220(0)已经处理了与线程1220(0)和局部对齐问题1212(0)和1212(1)相关联的评分矩阵中的一半行。处理的行对应于与局部对齐问题1212(0)相关联的目标符号的一半和与局部对齐问题1212(1)相关联的目标符号的一半。在稍后的时间1230,线程1220(1)已经处理了与线程1220(1)和局部对齐问题1212(2)和1212(3)相关联的评分矩阵中的一半行。处理的行对应于与局部对齐问题1212(2)相关联的目标符号的一半和与局部对齐问题1212(3)相关联的目标符号的一半。
注意,本文描述的技术是说明性的而不是限制性的,并且可以在不脱离本发明的更广泛的精神和范围的情况下进行修改。由软件应用程序190、SW内核192、CTA 312、并行处理子系统112、PPU、SM和CPU提供的功能的许多修改和变化对于本领域普通技术人员来说将是显而易见的,无需脱离所描述实施例的范围和精神。此外,可以使用许多技术来遍历评分矩阵,并且任意数量的这些技术可以与本文前面描述的任意数量的技术结合使用。
图12B是根据其他各种实施例的由图3A的CTA 312执行的双路SIMD矩阵填充阶段1210(1)的示例图示。更具体地说,图12A示出了CTA 312中的线程束如何应用“交错线程”技术来执行双路SIMD矩阵填充阶段的示例。在一些实施例中,在交错线程技术中,CTA 312中的每个线程束被分配两个不同的局部对齐问题。每个线程都根据线程束中的线程ID分配一组列。线程1220(0)被分配列1–N/T,其中T是线程束中的线程总数(例如,32),线程1220(1)被分配列(N/T+1)–(2*N/T)等等。
出于解释的目的,分配给图12B中描述的线程束的局部对齐问题被称为“问题A”和“问题B”。在一些实施例中,线程束在等于(M+T-1)的总迭代1280上执行问题A和B的矩阵填充阶段。每个线程参与M次迭代。对于每个线程,初始迭代等于线程ID,最终迭代等于(thread ID+M-1),线程在初始迭代期间处理第1行中分配的列,第2行中分配的列在下一次迭代中,以此类推。在一些实施例中,SW内核可以通过以下伪代码(12)实现本文描述的线程交错:
在一些实施例中,每个线程初始化驻留在相关寄存器文件中的不同矩阵填充数据集。线程1220(0)还将与初始列相关联的初始H和初始F初始化为零。在处理每一行之后,线程1220(0)-1220(T-2)中的每一个将溢出数据集1290提供给具有下一个线程ID的线程。线程可以以任意技术上可行的方式提供溢出数据集1290。在一些实施例中,线程通过线程束洗牌(warp shuffle)指令(例如,SHFL_SYNC)执行寄存器到寄存器的数据交换以交换溢出数据集1290。在一些实施例中,每个线程束洗牌指令导致线程子集中的每一个参与线程束洗牌将数据从与线程关联的寄存器传输到与另一个线程关联的另一个寄存器的指令。
如图所示,在一些实施例中,每个溢出数据集1290包括但不限于rightmostH、rightmostF、maxH和maxHCol。对于提供溢出数据集1290的线程,rightmostH包括与行和分配的局部对齐问题的最后分配的列对应的H值,rightmostF包括与行和分配的局部对齐问题的最后分配的列对应的F值,maxH指定对应于到目前为止分配的局部对齐问题的行中的最大子对齐分数,maxHcol指定到目前为止与该行中的最大子对齐分数对应的列。
在一些实施例中,在处理每一行之前,线程1220(1)-1220(T-1)中的每一个基于由线程1220接收到的用于该行的溢出数据集1290来执行初始化运算。在相同或其他实施例中,线程1220(T-1)基于从线程1220(T-2)接收的溢出数据集1290,适当地初始化和更新分配的局部对齐问题的最大子对齐分数和最大评分位置。在处理完最后一行后,线程1220(T-1)将每个分配的局部对齐问题的最大子对齐分数和最大评分位置存储在全局存储器中。
为了解释的目的,图12B示出了线程1220(0)-1220(4)在第五次迭代之后的进程。值得注意的是,线程1220(5)-1220(T-1)尚未处理任意行。如图所示,线程1220(0)被分配一个问题A部分1252(0)对应于局部对齐问题A的列1-(N/T)和一个问题B部分1254(0)对应于列1-(N/T)局部对齐问题B。线程1220(1)被分配问题A部分1252(1)和问题B部分1254(1),依此类推。
在图12B所示的时间点,线程1220(0)已处理问题A部分1252(0)的第1-5行和问题B部分1254(0)的第1-5行,并且通过线程束洗牌运算与线程1220(1)交换溢出数据集1290。线程1220(1)已处理问题A部分1252(1)的第1-4行和问题B部分1254(1)的第1-4行,并通过线程束洗牌运算与线程1220(2)交换溢出数据集1290。尽管未显示,线程1220(2)已处理问题A部分1252(2)的第1-3行和问题B部分1254(2)的第1-3行,并且通过线程束洗牌运算与线程1220(3)交换溢出数据集1290。线程1220(3)已经处理了问题A部分1252(3)的第1-2行和问题B部分1254(3)的第1-2行,并且通过线程束洗牌运算与线程1220(4)交换了溢出数据集1290。如图所示,线程1220(4)已经处理了问题A部分1252(4)的第1行和问题B部分1254(4)的第1行,并且通过线程束洗牌运算与线程1220(5)交换了溢出数据集1290中的一个。
注意,本文描述的技术是说明性的而不是限制性的,并且可以在不脱离本发明的更广泛的精神和范围的情况下进行修改。由软件应用程序190、SW内核192、CTA 312、并行处理子系统112、PPU、SM和CPU提供的功能的许多修改和变化对于本领域普通技术人员来说将是显而易见的,无需脱离所描述实施例的范围和精神。在一个示例中,本文描述的用于双路SIMD的交错线程技术可以被修改并应用于四路SIMD矩阵填充阶段和无SIMD矩阵填充阶段。在另一个示例中,在一些实施例中,可以将交错线程技术应用于半线程束而不是线程束,其中每个半线程束被分配一组不同的1、2或4个局部对齐问题。
图13是根据各种实施例的在执行Smith-Waterman算法的矩阵填充阶段时存储子对齐数据的方法步骤的流程图。尽管参考图1-12的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序实现方法步骤的任意系统都落入本发明的范围内。
如图所示,方法1300开始于步骤1302,其中程序(例如,软件应用程序190或SW内核192)确定每个线程的问题412表示为P,每个线程的列414表示为C,以及是否交错单元格布局将与SW指令610兼容。如果在步骤1304,程序确定交错单元格布局将与SW指令610兼容,则方法1300进行到步骤1306。
在步骤1306,如果程序确定每个线程412的问题是四个,那么方法1300进行到步骤1308。在步骤1308,程序确定每个单元格布局是四个连续的8位H值,四个连续的8位E值、四个连续的8位F值和四个连续的8位S值的交错,因此每个SWcell 460是SWcell8 486。方法1300然后直接进行到步骤1316。在步骤1316,程序导致当针对C个查询符号和M个目标符号的每个组合执行SW指令610或SW序列740时,一个或更多个CTA 312中的每个线程跨(C+1)个SWcell 460的两个数组存储子对齐数据。然后方法1300终止。
然而,如果在步骤1306,如果程序确定每个线程的问题412不是四个,则方法1300直接进行到步骤1310。在步骤1310,如果程序确定每个线程的问题412是两个,那么方法1300进行到步骤1312。在步骤1312,程序确定每个单元格布局是两个连续的16位H值、两个连续的16位E值、两个连续的16位F值和两个连续的16位S值,因此每个SWcell 460是SWcell16 484。方法1300然后直接进行到步骤1316。在步骤1316,当针对C个查询符号和M个目标符号的每个组合执行SW指令610或SW序列740时,程序使一个或更多个CTA 312中的每个线程跨(C+1)个SWcell 460的两个数组存储子对齐数据。然后方法1300终止。
然而,如果在步骤1310,程序确定每个线程412的问题不是两个,则方法1300直接进行到步骤1314。在步骤1314,程序确定每个单元格布局是32位的交错H值、32位E值、32位F值和32位S值,因此每个SWcell 460 SWcell132 482。然后方法1300直接进行到步骤1316。在步骤1316,程序使当针对C个查询符号和M个目标符号的每个组合执行SW指令610或SW序列740时,一个或更多个CTA 312中的每个线程存储跨(C+1)个SWcell 460的两个数组的子对齐数据。然后方法1300终止。
返回参考步骤1304,如果在步骤1304,程序确定交错单元格布局与SW指令610不兼容,则方法1300直接进行到步骤1318。在步骤1318,如果程序确定每个线程412的问题是四个,然后方法1300进行到步骤1320。在步骤1320,程序确定每个F结构570将包括四个8位F值并且每个S结构580将包括四个8位S值。在步骤1322,程序确定每个单元格布局是四个连续的8位H值和四个连续的8位E值的交错,因此每个HEcell 560是SWcell8 566。方法1300然后直接进行到步骤1334。在步骤1334,当针对C个查询符号和M个目标符号的每个组合执行SW序列740时,程序使一个或更多个CTA 312中的每个线程跨(C+1)个HEcell的两个数组560存储子对齐数据。然后方法1300终止。
然而,如果在步骤1318,如果程序确定每个线程的问题412不是四个,则方法1300直接进行到步骤1324。在步骤1324,如果程序确定每个线程的问题412是两个,那么方法1300进行到步骤1326。在步骤1326,程序确定每个F结构570将包括两个16位F值并且每个S结构580将包括两个16位S值。在步骤1328,程序确定每个单元格布局是两个连续的16位H值和两个连续的16位E值的交错,因此每个HEcell 560是SWcell16 564。然后方法1300直接进行到步骤1334。在步骤1334,当针对C个查询符号和M个目标符号的每个组合执行SW序列740时,程序使一个或更多个CTA 312中的每个线程跨(C+1)个HEcell的两个数组560存储子对齐数据。然后方法1300终止。
然而,如果在步骤1324,如果程序确定每个线程412的问题不是两个,则方法1300直接进行到步骤1330。在步骤1330,程序确定每个F结构570将包括一个32位F值和每个S结构580将包括一个32位S值。在步骤1332,程序确定每个单元格布局是32位H值和32位E值的交错,因此每个HEcell 560是SWcell32 562。然后方法1300直接进行到步骤1334。在步骤在1334中,当针对C个查询符号和M个目标符号的每个组合执行SW序列740时,程序使一个或更多个CTA 312中的每个线程跨(C+1)个HEcell 560的两个数组存储子对齐数据。然后方法1300终止。
图14是根据各种实施例的用于在执行Smith-Waterman算法的矩阵填充阶段时通过单个指令执行子对齐计算的方法步骤的流程图。尽管参考图1-4、6、8-9和11-12的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序实现方法步骤的任意系统都属于在本发明的范围内。
如图所示,方法1400开始于步骤1402,其中执行SW内核192的线程初始化驻留在寄存器文件中的(N+1)个SWcell 460的两个数组,将一个数组指定为前一行,而另一个数组指定为当前行。在步骤1404,对于每个局部对齐问题,线程初始化驻留在寄存器文件中的最大子对齐分数和最大评分位置,并选择初始目标符号。在步骤1406,对于每个选择的目标符号,线程生成包括在前一行中最左边的N个SWcell 460中的对应的N个替换值。在步骤1408,线程选择最左边的第二列。
在步骤1410,线程执行SW指令以基于所选列左侧的列中的两个SWcell 460以及在前一行和所选列中的SWcell 460,生成包括在当前行和所选列的SWcell 460中的H、E和F值。在步骤1412,线程执行VIMNMX指令以更新最大子对齐分数并设置对应的谓词。在步骤1414,线程更新对应于每个非零谓词的最大评分位置。
在步骤1416,线程确定所选列是否是最后一列。如果在步骤1416,线程确定所选列不是最后一列,则方法1400进行到步骤1418。在步骤1418,线程选择下一列。方法1400然后返回到步骤1410,其中线程执行SW指令以生成包括在当前行和选定列中的SWcell 460中的H、E和F值。
然而,如果在步骤1416,线程确定所选列是最后一列,则方法1400直接进行到步骤1420。在步骤1420,线程确定是否所有所选目标符号都是对应的目标序列的最后一个目标符号。如果在步骤1420,SW内核192确定至少一个选择的目标符号不是最后一个目标符号,则方法1400进行到步骤1422。在步骤1422,SW内核192交换行指定并选择下一个目标符号。方法1400然后返回到步骤1406,其中对于每个选择的目标符号,线程生成包括在前一行中最左边的N个SWcell 460中的对应的N个替换值。
然而,如果在步骤1420,SW内核192确定所有选择的目标符号是对应目标序列的最后目标符号,则方法1400终止。
图15是根据各种实施例的用于在执行Smith-Waterman算法的矩阵填充阶段时通过指令序列执行子对齐计算的方法步骤的流程图。尽管参考图1-5、7-8和10-12的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序实现方法步骤的任意系统都属于本发明的范围。
如图所示,方法1500开始于步骤1502,其中执行SW内核192的线程初始化驻留在寄存器文件中的矩阵填充数据集(例如,矩阵填充数据集490(0)或矩阵填充数据集490(1)),将一个单元格数组指定为前一行,将另一个单元格数组指定为当前行。在步骤1504,对于每个局部对齐问题,线程初始化驻留在寄存器文件中的最大子对齐分数和最大评分位置,并选择初始目标符号。
在步骤1506,每个选择的目标符号生成包括在矩阵填充数据集中的对应的N个替换值。在步骤1508,线程为每个局部子对齐问题选择初始查询符号。在步骤1510,线程执行VIADD、VIADDMNMX、VIADD、VIADDMNMX、VIADD和VIMNMX3指令序列以生成与所选目标符号和所选查询符号对应的矩阵填充数据集中包括的E值、F值和子对齐分数。
在步骤1512,线程执行VIMNMX指令以更新最大子对齐分数并设置对应的谓词。在步骤1514,线程更新与每个非零谓词相对应的最大评分位置。
在步骤1516,线程确定所选查询符号是否是查询符号,如果在步骤1516,线程确定所选查询符号不是最后一个查询符号,则方法1500进行到步骤1518。在步骤1518,线程选择下一个查询符号。方法1500然后返回到步骤1510,其中线程执行VIADD、VIADDMNMX、VIADD、VIADDMNMX、VIADD和VIMNMX3指令序列以生成包括在矩阵填充中的E值、F值和子对齐分数对应于所选目标符号和所选查询符号的数据集。
然而,如果在步骤1516,线程确定所选列是最后一列,则方法1500直接进行到步骤1520。在步骤1520,线程确定是否所有所选目标符号都是对应目标序列的最后一个目标符号。如果在步骤1520,线程确定至少一个选择的目标符号不是最后一个目标符号,则方法1500进行到步骤1522。在步骤1522,线程交换行指定并选择下一个目标符号。方法1500然后返回到步骤1506,其中对于每个选定的目标符号,线程生成包括在前一行中最左边的N个SWcell 460或HEcell 560中的对应的N个替换值。
然而,如果在步骤1520,线程确定所有选择的目标符号是对应目标序列的最后目标符号,则方法1500终止。
图16是根据各种实施例的用于通过线程组执行Smith-Waterman算法的矩阵填充阶段的方法步骤的流程图。尽管参考图1-12的系统描述了方法步骤,但是本领域技术人员将理解,被配置为以任意顺序实现方法步骤的任意系统都落入本发明的范围内。
如图所示,方法1600开始于步骤1602,其中执行SW内核192的线程束中的每个线程初始化驻留在相关联的寄存器文件中的不同的矩阵填充数据集(例如,矩阵填充数据集490(0)或矩阵填充数据集490(1))。在步骤1604,每个线程将迭代设置为0。在步骤1606,每个线程将行设置为等于迭代减去线程ID+1。在步骤1608,具有大于0且小于等于M的行的线程自选。
在步骤1610,具有大于0的线程ID的每个选定线程基于相关联的溢出数据集设置最左侧子对齐分数、最左侧F值、最大行子对齐分数和最大评分列。在步骤1612,每个选择的线程计算该行的分配列的子对齐数据并且更新每个局部对齐问题的最大行子对齐分数和最大评分列以反映新计算的子对齐分数。在步骤1614,具有小于(T-1)的线程ID的每个选定线程将溢出数据集传递给具有更高线程ID的相邻线程。
在步骤1616,如果选择了最高线程,则最高线程更新每个局部对齐问题的最大子对齐分数和最大评分位置。在步骤1618,线程确定当前迭代是否是最后一次迭代。如果在步骤1618,线程确定当前迭代不是最后一次迭代,则线程进行到步骤1620。在步骤1620,线程递增迭代。然后方法1600返回到步骤1606,其中每个线程设置一行等于迭代减去线程ID+1。
然而,如果在步骤1618,线程确定当前迭代是最后一次迭代,则线程直接进行到步骤1622。在步骤1622,具有最高线程ID的线程存储最大子对齐分数和全局存储器中每个局部对齐问题的最大评分位置。然后方法1600终止。
在一些实施例中,编程平台软件栈160中的一个或更多个SW库和/或一个或更多个SW内核包括但不限于预先编写的代码、内核、子例程、内在函数、宏、类、值、类型规范等等,其便于使用交错单元格布局450(0)、交错单元格布局450(1)、SW指令610、SW序列740、交错单元格布局450(1)中的一个或更多个,VIADD指令、VIADDMNMX指令、VIMNMX3指令、VIMNMX指令810、SIMD每线程多问题技术、SIMD交错线程技术或其任意组合。特别地,一个或更多个SW库可以包括但不限于基于SW指令610和交错单元格布局450(0)、SW序列740和交错单元格布局450(0)、SW序列740和交错单元格布局450(1)或其任意组合来计算子对齐数据的内在函数。
总之,所公开的技术可用于使用并行处理器有效地加速SW算法的矩阵填充阶段。在一些实施例中,软件应用程序将线程束配置为在并行处理器上执行SW内核,以便针对一到四个局部序列对齐问题并发地执行矩阵填充阶段。在一些实施例中,SW内核实现一种或更多种数据交错技术,使用单个SW指令或SW指令序列来计算子对齐分数,使用指示所选运算数的最小/最大指令来确定最大子对齐分数和相关位置,或它们的任意组合。在相同或其他实施例中,线程束的每个线程负责一个、两个或四个不同对齐问题的矩阵填充阶段或一个、两个或四个共享对齐问题的列子集。
在一些实施例中,线程束的每个线程通过驻留在寄存器文件中的两个单元格数组以交错方式存储前一行和当前行的子对齐数据。更具体地说,如果当前行是j,则对应于当前行的单元格数组中的第k个单元格存储表示为H(j,k)的32位数据,表示为E(j,k)的32位数据,表示为F(j,k)的32位数据,以及表示为S(j+1,k+1)的32位数据。另一个单元格数组中的第k个单元格存储表示H(j-1,k)的32位数据,表示E(j-1,k)的32位数据,表示为F(j–1,k)的32位数据,以及表示为S(j,k+1)的32位数据。H(j,k)、E(j,k)、F(j,k)、S(j+1,k+1)、H(j-1,k)、E(j-1,k)、F(j–1,k)和S(j,k+1)中的每一个可以包括与单个对齐问题相对应的单个32位值、与两个对齐问题相对应的两个压缩16位值或与四个对齐问题相对应的四个压缩8位值。SW指令和SW指令序列可以与SWcell结合使用。
在一些其他实施例中,为了减少存储子对齐数据所需的寄存器存储器的量,每个线程将前一行和当前行的相关H值和相关E值存储在驻留在寄存器文件中的两个HE单元格数组中,通过驻留在寄存器文件中的32位值数组的当前行的相关F值,以及驻留在寄存器文件中的32位值数组中的当前行的相关S值。SW指令序列而非单个SW指令可以与HE单元格结合使用。
SW指令是针对单个位置执行SW子对齐计算的每线程指令。在一些实施例中,SW指令格式是SW{.variant}result,diag,top,left,consts。.variant修饰符是1(无SIMD)、2(双路SIMD)或4(四路SIMD);result、diag、top和left是SWcell的实例;常数是GapDeleteExtend、GapInsertExtend、GapDeleteExtend和GapInsertOpen。
SW指令序列是每线程六指令序列,对单个位置执行SW子对齐计算,并且支持无SIMD、双路SIMD和四路SIMD。指令序列包括但不限于第一VIADD指令、第一VIADDMNMX指令、第二VIADD指令、第二VIADDMNMX指令、第三VIADD指令和VIMNMX3指令。VIADD指令格式、VIADDMNMX指令格式和VIMNMX3指令格式均支持无SIMD、双路SIMD和四路SIMD变体。
在一些实施例中,线程束中的每个线程负责一个、两个或四个不同的局部对齐问题。线程组中的每个线程在对对应于一组列和一行的位置执行评分计算之前,不对对应于一组列和下一行的位置依次执行无SIMD、单路SIMD或四路SIMD SW子对齐计算。在一些其他实施例中,一个、两个或四个对齐问题分布在线程束的线程之间。对于对应于一组不同列的位置,每个线执行无SIMD、单路SIMD或四路SIMD SW子对齐计算,并且除了线程0之外,每个线程在紧接较低的线程后面一行进行子对齐计算。
所公开的技术相对于现有技术的至少一个技术优势在于,利用所公开的技术,当使用并行处理器执行SW算法的矩阵填充阶段时,可以减少为计算每个子对齐分数而执行的指令的数量。在这方面,利用所公开的技术,单个SW指令或六指令SW序列可用于并发地计算分别与一个、两个或四个不同的局部对齐问题相关联的一个、两个或四个子对齐分数。由于使用所公开的技术,与评分矩阵中的每个位置相关联的子对齐分数可以以交错方式存储在单个单元格内,因此与从单独的矩阵检索相同数据的传统技术相比,与数据移动相关联的低效率可以降低。此外,利用所公开的技术,在确定两个运算数的最小值或最大值时指示所选运算数的指令可用于减少在确定和存储最大子对齐分数和相关位置时执行的指令的数量。这些技术优势提供了对现有技术方法的一种或更多种技术改进。
任意权利要求中记载的任意权利要求要素和/或本申请中描述的任意要素的任意和所有组合以任意方式落入实施例和保护的预期范围内。
各种实施例的描述是为了说明的目的而提出的,但并不旨在穷举或限制于所公开的实施例。在不脱离所描述实施例的范围和精神的情况下,许多修改和变化对于本领域的普通技术人员将是显而易见的。
本实施例的方面可以体现为系统、方法或计算机程序产品。因此,本公开的各方面可以采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等)或结合软件和硬件方面的实施例的形式,这些实施例都可以统称为在此称为“模块”、“系统”或“计算机”。此外,本公开中描述的任意硬件和/或软件技术、过程、功能、组件、引擎、模块或系统可以实现为电路或一组电路。此外,本公开的方面可以采取体现在一个或更多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质具有体现在其上的计算机可读程序编解码器。
可以使用一种或更多种计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是例如但不限于电子的、磁性的、光学的、电磁的、红外线的或半导体系统、装置或设备,或前述的任意合适的组合。计算机可读存储介质的更具体示例(非详尽列表)将包括以下:具有一根或更多根电线的电连接、便携式计算机软盘、硬盘、随机存取存储器、只读存储器、可擦除可编程只读存储器、闪存、光纤、便携式光盘只读存储器、光存储设备、磁存储设备或前述的任意合适组合。在本文档的上下文中,计算机可读存储介质可以是可以包括或存储程序以供指令执行系统、装置或设备使用或与其结合使用的任意有形介质。
根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各方面。应当理解,流程图和/或框图的每个块,以及流程图和/或框图中的块的组合,可以通过计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以生产机器。指令在通过计算机的处理器或其他可编程数据处理装置执行时,能够实现流程图和/或框图块或更多个块中指定的功能/动作。这样的处理器可以是但不限于通用处理器、专用处理器、专用处理器或现场可编程门阵列。
图中的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和运算。在这点上,流程图或框图中的每个块可以表示一个模块、段或代码的一部分,其包括用于实现指定逻辑功能的一个或更多个可执行指令。还应注意,在一些替代实施方式中,方框中标注的功能可能不按图中标注的顺序出现。例如,连续显示的两个块实际上可以基本上并发地执行,或者这些块有时可以以相反的顺序执行,这取决于所涉及的功能。还应注意,框图和/或流程图示出的每个块,以及框图和/或流程图示出的块的组合,可以由执行指定功能或动作的基于硬件的专用系统实现,或专用硬件和计算机指令的组合。
尽管前述内容是针对本公开的实施例,但是可以设计本公开的其他和进一步的实施例而不脱离其基本范围,并且其范围由所附权利要求确定。
Claims (20)
1.一种处理器,包括:
指令解码器,其对与第一源运算数、第二源运算数、第三源运算数和第一目的地运算数相关联的第一指令进行解码;以及
第一执行单元,其被耦合到所述指令解码器,所述第一执行单元:
基于所述第一源运算数的对应元素和所述第二源运算数的对应元素,计算中间总和的一个或更多个元素中的每一个,以及
将所述第一目的地运算数的一个或更多个元素中的每一个设置为等于至少所述中间总和的对应元素和所述第三源运算数的对应元素中的最小值或最大值。
2.根据权利要求1所述的处理器,其中所述第一目的地运算数包括:包括32位有符号整数的一个元素、包括32位无符号整数的一个元素、各包括16位有符号整数的两个元素、各包括16位无符号整数的两个元素、各包括8位有符号整数的四个元素、或各包括8位无符号整数的四个元素。
3.根据权利要求1所述的处理器,其中所述第一执行单元在所述第一源运算数的第一元素与所述第二源运算数的第一元素之间或与所述第二源运算数的所述第一元素的否定之间执行加法运算,以计算所述中间总和的第一元素。
4.根据权利要求1所述的处理器,其中所述第一执行单元将所述目的地运算数的第一元素设置为等于所述中间总和的第一元素、所述第三源运算数的第一元素、以及零中的最小值或最大值。
5.根据权利要求1所述的处理器,其中所述第一执行单元将所述目的地运算数的第一元素设置为等于所述中间总和的第一元素和所述第三源运算数的第一元素中的最小值或最大值。
6.根据权利要求1所述的处理器,其中所述第一指令被包括在六个指令的序列中,在由所述处理器执行所述六个指令时,在史密斯-沃特曼算法的矩阵填充阶段期间计算子对齐数据。
7.根据权利要求1所述的处理器,其中在对所述指令进行解码之前,所述指令解码器对与所述第四源运算数、所述第一源运算数和所述第三源运算数相关联的第二指令进行解码,并且其中所述处理器还包括:
第二执行单元,其被耦合到所述指令解码器,将所述第三源运算数的所述一个或更多个元素中的每一个设置为等于所述第四源运算数的对应元素与所述第五源运算数的对应元素的总和。
8.根据权利要求7所述的处理器,其中所述第一执行单元被包括在整数管线中,并且所述第二执行单元被包括在浮点管线中。
9.根据权利要求1所述的处理器,其中所述第一源运算数的第一元素包括与评分矩阵中的顶部位置相对应的顶部子对齐分数,所述评分矩阵与史密斯-沃特曼算法相关联,并且所述第一目的地运算数的第一元素包括与所述评分矩阵中的当前位置相对应的当前E值。
10.根据权利要求1所述的处理器,其中所述第一源运算数的第一元素包括与评分矩阵中的左侧位置相对应的左子对齐分数,所述评分矩阵与史密斯-沃特曼算法相关联,并且所述第一目的地运算数的第一元素包括与所述评分矩阵中的当前位置相对应的当前F值。
11.根据权利要求1所述的处理器,其中所述第一目的地运算数的每个元素包括与不同的查询序列和与史密斯-沃特曼算法相关联的评分矩阵中的当前位置相对应的不同的当前F值。
12.一种处理器,包括:
寄存器文件,其存储与第一指令相关联的第一源运算数、第二源运算数、第三源运算数和目的地运算数;以及
第一执行单元,其被耦合到所述寄存器文件,所述第一执行单元:
基于所述第一源运算数的对应元素和所述第二源运算数的对应元素,计算中间总和的一个或更多个元素中的每一个,以及
将所述第一目的地运算数的一个或更多个元素中的每一个设置为等于至少所述中间总和的对应元素和所述第三源运算数的对应元素中的最小值或最大值。
13.根据权利要求12所述的处理器,其中所述第一目的地运算数包括:包括32位有符号整数的一个元素、包括32位无符号整数的一个元素、各包括16位有符号整数的两个元素、各包括16位无符号整数的两个元素,各包括8位有符号整数的四个元素,或各包括8位无符号整数的四个元素。
14.根据权利要求12所述的处理器,其中所述第一执行单元在所述第一源运算数的第一元素与所述第二源运算数的第一元素之间或与所述第二源运算数的所述第一元素的否定之间执行加法运算,以计算所述中间总和的第一元素。
15.根据权利要求12所述的处理器,其中所述第一执行单元将所述目的地运算数的第一元素设置为等于所述中间总和的第一元素、所述第三源运算数的第一元素、以及零中的最小值或最大值。
16.根据权利要求12所述的处理器,其中所述第一执行单元将所述目的地运算数的第一元素设置为等于所述中间总和的第一元素和所述第三源运算数的第一元素中的最小值或最大值。
17.根据权利要求12所述的处理器,其中所述第一指令被包括在六个指令的序列中,在由所述处理器执行所述六个指令时,在史密斯-沃特曼算法的矩阵填充阶段期间计算子对齐数据。
18.根据权利要求12所述的处理器,其中所述第一执行单元被包括在整数管线中,并且其中所述处理器还包括:
第二执行单元,其被耦合到所述寄存器文件,所述第二执行单元被包括在浮点管线中并且将所述第三源运算数的所述一个或更多个元素中的每一个设置为等于存储在所述寄存器文件中的第四源运算数的对应元素与存储在所述寄存器文件中的第五源运算数的对应元素的总和。
19.根据权利要求12所述的处理器,其中所述处理器包括并行处理单元、图形处理单元、张量处理单元、多核心中央处理单元或神经处理单元。
20.一种计算机实现的方法,包括:
解码与第一源运算数、第二源运算数、第三源运算数和目的地运算数相关联的第一指令;
基于所述第一源运算数的对应元素和所述第二源运算数的对应元素,计算中间总和的一个或更多个元素中的每一个,以及
将所述目的地运算数的一个或更多个元素中的每一个设置为等于至少所述中间总和的对应元素和所述第三源运算数的对应元素中的最小值或最大值。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/491,279 | 2021-09-30 | ||
US17/491,279 US11550584B1 (en) | 2021-09-30 | 2021-09-30 | Implementing specialized instructions for accelerating Smith-Waterman sequence alignments |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115910207A true CN115910207A (zh) | 2023-04-04 |
Family
ID=84810791
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210791113.2A Pending CN115910207A (zh) | 2021-09-30 | 2022-07-05 | 实现用于加速史密斯-沃特曼序列对齐的专用指令 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11550584B1 (zh) |
CN (1) | CN115910207A (zh) |
DE (1) | DE102022124943A1 (zh) |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
NO20004869D0 (no) * | 2000-09-28 | 2000-09-28 | Torbjoern Rognes | Metode for hurtig optimal lokal sekvensjustering ved bruk av parallell prosessering |
US7467287B1 (en) * | 2001-12-31 | 2008-12-16 | Apple Inc. | Method and apparatus for vector table look-up |
US8965935B2 (en) * | 2007-11-08 | 2015-02-24 | Oracle America, Inc. | Sequence matching algorithm |
US9785434B2 (en) * | 2011-09-23 | 2017-10-10 | Qualcomm Incorporated | Fast minimum and maximum searching instruction |
US9804839B2 (en) * | 2012-12-28 | 2017-10-31 | Intel Corporation | Instruction for determining histograms |
US9898575B2 (en) * | 2013-08-21 | 2018-02-20 | Seven Bridges Genomics Inc. | Methods and systems for aligning sequences |
US9678715B2 (en) * | 2014-10-30 | 2017-06-13 | Arm Limited | Multi-element comparison and multi-element addition |
US11436209B2 (en) * | 2019-10-31 | 2022-09-06 | EMC IP Holding Company LLC | Techniques for efficiently determining similarity hashes |
-
2021
- 2021-09-30 US US17/491,279 patent/US11550584B1/en active Active
-
2022
- 2022-07-05 CN CN202210791113.2A patent/CN115910207A/zh active Pending
- 2022-09-28 DE DE102022124943.3A patent/DE102022124943A1/de active Pending
Also Published As
Publication number | Publication date |
---|---|
US11550584B1 (en) | 2023-01-10 |
DE102022124943A1 (de) | 2023-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9830156B2 (en) | Temporal SIMT execution optimization through elimination of redundant operations | |
US8639882B2 (en) | Methods and apparatus for source operand collector caching | |
US20230251861A1 (en) | Accelerating linear algebra kernels for any processor architecture | |
US9798548B2 (en) | Methods and apparatus for scheduling instructions using pre-decode data | |
US10007527B2 (en) | Uniform load processing for parallel thread sub-sets | |
Garland et al. | Understanding throughput-oriented architectures | |
EP2483787B1 (en) | Efficient predicated execution for parallel processors | |
US8751771B2 (en) | Efficient implementation of arrays of structures on SIMT and SIMD architectures | |
US10255228B2 (en) | System and method for performing shaped memory access operations | |
US10346212B2 (en) | Approach for a configurable phase-based priority scheduler | |
US20130117541A1 (en) | Speculative execution and rollback | |
US20080109795A1 (en) | C/c++ language extensions for general-purpose graphics processing unit | |
US20130166882A1 (en) | Methods and apparatus for scheduling instructions without instruction decode | |
US8572355B2 (en) | Support for non-local returns in parallel thread SIMD engine | |
US9626191B2 (en) | Shaped register file reads | |
US9798544B2 (en) | Reordering buffer for memory access locality | |
US20110078225A1 (en) | Extended-Precision Integer Arithmetic and Logical Instructions | |
US20140173606A1 (en) | Streaming processing of short read alignment algorithms | |
US20120084539A1 (en) | Method and sytem for predicate-controlled multi-function instructions | |
US11550584B1 (en) | Implementing specialized instructions for accelerating Smith-Waterman sequence alignments | |
US11822541B2 (en) | Techniques for storing sub-alignment data when accelerating Smith-Waterman sequence alignments | |
US20230101085A1 (en) | Techniques for accelerating smith-waterman sequence alignments | |
US20230305844A1 (en) | Implementing specialized instructions for accelerating dynamic programming algorithms | |
US12020076B2 (en) | Techniques for balancing workloads when parallelizing multiply-accumulate computations | |
US20220300326A1 (en) | Techniques for balancing workloads when parallelizing multiply-accumulate computations |
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 |