CN109964203B - 数据并行计算设备的排序 - Google Patents
数据并行计算设备的排序 Download PDFInfo
- Publication number
- CN109964203B CN109964203B CN201780070349.4A CN201780070349A CN109964203B CN 109964203 B CN109964203 B CN 109964203B CN 201780070349 A CN201780070349 A CN 201780070349A CN 109964203 B CN109964203 B CN 109964203B
- Authority
- CN
- China
- Prior art keywords
- data elements
- processor
- parallel
- processors
- ordered
- 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.)
- Active
Links
- 230000015654 memory Effects 0.000 claims description 180
- 238000000034 method Methods 0.000 claims description 29
- 238000012545 processing Methods 0.000 description 47
- 238000004422 calculation algorithm Methods 0.000 description 39
- 238000004891 communication Methods 0.000 description 10
- 230000001174 ascending effect Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 230000008901 benefit Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- WYTGDNHDOZPMIW-RCBQFDQVSA-N alstonine Natural products C1=CC2=C3C=CC=CC3=NC2=C2N1C[C@H]1[C@H](C)OC=C(C(=O)OC)[C@H]1C2 WYTGDNHDOZPMIW-RCBQFDQVSA-N 0.000 description 5
- 238000013507 mapping Methods 0.000 description 5
- 239000008186 active pharmaceutical agent Substances 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000002955 isolation Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000000354 decomposition reaction Methods 0.000 description 3
- 101100365696 Homo sapiens SHC2 gene Proteins 0.000 description 2
- 102100022335 SHC-transforming protein 2 Human genes 0.000 description 2
- 208000034177 Self-improving collodion baby Diseases 0.000 description 2
- 238000004140 cleaning Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 208000003665 self-healing collodion baby Diseases 0.000 description 2
- 230000017105 transposition Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013178 mathematical model Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/36—Combined merging and sorting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/24—Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Multi Processors (AREA)
- Advance Control (AREA)
- Image Processing (AREA)
Abstract
本公开的各方面涉及响应于对信息的请求来确定相关内容。一个或多个计算设备(170)可以将数据元素加载到寄存器(385A‑385B)中,其中每个寄存器与一组并行处理器(380A‑380B)中的至少一个并行处理器相关联。对于并行处理器中的每一个,加载到其相关联的寄存器中的数据元素可以以降序并行排序。对于并行处理器中的每一个,排序的数据元素可以与该组中其它并行处理器的排序的数据元素合并。合并和排序的数据元素可以被转置和存储。
Description
相关申请的交叉引用
本申请要求2016年11月14日提交的美国临时专利申请第62/421,544号的申请日的权益,其公开内容通过引用结合于此。
背景技术
能够快速有效地对数据进行排序对于计算设备的许多操作来说至关重要。例如,许多应用(诸如搜索、数据查询处理、图形、稀疏线性代数、机器学习等)要求基本上实时的数据排序。许多排序方法依赖于单线程CPU执行顺序排序算法。这种排序方法非常耗时,并且要求大量的处理资源。
排序方法的最新改进包括由数据并行设备(data-parallel device)(诸如图形处理单元(graphics processing unit,GPU))执行的半并行和并行算法。然而,这些半并行和并行算法存在许多不足,因为它们通常无法完全利用数据并行设备的计算能力并达到峰值吞吐量,直到要排序的值的数量变得非常大,从而填满数据并行设备的带宽。此外,这些半并行算法通常表现出显著的分支差异,其中相邻的处理元件不执行相同的指令,阻止数据并行设备变得完全达到计算约束。处理较小的数据元素集合同样是低效的,因为数据并行设备可能在等待数据被加载或存储时停顿。
发明内容
本公开内容内的实施例通常涉及在数据并行计算设备上并行排序数据。一个方面包括一种方法,该方法包括:由并行处理器的组将数据元素加载到寄存器中,其中每个寄存器与并行处理器的所述组中的至少一个并行处理器相关联;对于并行处理器中的每一个,以降序对加载到其相关联的寄存器中的数据元素进行并行排序;对于并行处理器中的每一个,将排序的数据元素与组中其它并行处理器的排序的数据元素合并;以及由并行处理器转置和存储合并和排序的数据元素。
在一些实施例中,将数据元素加载到寄存器中包括将数据元素同时加载到两个或多个并行处理器的相关联的寄存器中。在一些示例中,将数据元素加载到每个并行处理器的相应寄存器中包括以转置的顺序加载数据元素。在一些实施例中,对数据元素进行排序包括对与相应并行处理器相关联的寄存器中的所有数据元素执行比较和交换操作。
在一些情况下,将排序的数据元素与该组中其它处理器的排序的数据元素合并包括将每个并行处理器与并行处理器的组中的另一并行处理器配对,以及将每个并行处理器的排序的数据元素与其相应配对的并行处理器的排序的数据元素合并。
在一些示例中,合并排序的数据元素还包括将每对并行处理器的合并的数据元素与其它的并行处理器对合并。在一些情况下,该组并行处理器包括两组并行处理器。在一些示例中,将排序的数据元素与其它并行处理器的排序的数据元素合并包括将每个并行处理器与两组并行处理器中的另一并行处理器配对;以及将每个并行处理器的排序的数据元素与两组并行处理器中的每一组处理器内其相应配对的并行处理器的排序的数据元素合并。在一些实施例中,合并两组并行处理器的排序的数据元素。
本公开的另一方面包括一种用于并行排序数据的系统。该系统可以包括一个或多个计算设备和存储指令的存储器,该指令可由一个或多个计算设备执行。该指令可以包括将数据元素加载到寄存器中,其中每个寄存器与并行处理器的组中的至少一个并行处理器相关联;对于并行处理器中的每一个,以降序对加载到其相关联的寄存器中的数据元素进行并行排序;对于并行处理器中的每一个,将排序的数据元素与该组中其它并行处理器的排序的数据元素合并;以及由并行处理器转置和存储合并和排序的数据元素。
本公开的另一方面包括一种包括指令的非暂时性计算机可读介质,当指令被一个或多个并行处理器执行时,使得一个或多个并行处理器执行以下步骤:将数据元素加载到寄存器中,其中每个寄存器与并行处理器的组中的至少一个并行处理器相关联;对于并行处理器中的每一个,以降序对加载到其相关联的寄存器中的数据元素进行并行排序;对于并行处理器中的每一个,将排序的数据元素与该组中其它并行处理器的排序的数据元素合并;以及由并行处理器转置和存储合并和排序的数据元素。
附图说明
在附图中,通过示例而非限制的方式示出了本技术,在该附图中,相似的附图标记指代相似的元素,该附图包括:
图1是根据本公开各方面的示例系统的功能图。
图2是图1的示例系统的示意图。
图3是根据本公开各方面的图形处理单元的示例架构。
图4是根据本公开各方面的示例存储器配置。
图5是根据本公开各方面的图形处理单元内的处理器组的图示。
图6A是根据本公开各方面的加载到板(slab)中的元素集合的示例。
图6B是根据本公开各方面的处理器的示例块。
图6C是根据本公开各方面的处理器块的网格的示例。
图7是根据本公开各方面的具有排序的处理器寄存器的板的示例。
图8是根据本公开各方面的具有由处理器排序的数据元素的板的示例。
图9-11是根据本公开各方面的通过共享存储器合并和排序数据元素的示例。
图12是根据本公开各方面的部分排序的板的示例。
图13是根据本公开各方面的排序的板的示例。
图14是根据本公开各方面的广播合并的示例。
图15是根据本公开各方面的广义的双调排序网络的示例图示。
图16A-16B是根据本公开各方面的多板翻转(flip)合并的示例流程图。
图17A-17E是根据本公开各方面的板半合并的示例图示。
图18A-18B是根据本公开各方面的广义的多板翻转合并的示例流程图。
图19是根据本公开各方面的流式(streaming)翻转合并的示例图示。
图20是根据本公开各方面的流式半合并的示例图示。
图21A-21B是根据本公开各方面的多板半合并的示例流程图。
图22是根据本公开各方面的板翻转合并混洗(shuffle)的示例图示。
图23是根据本公开各方面的板半合并混洗的示例图示。
图24是根据实施例的流程图。
具体实施方式
概览
本技术涉及在计算机系统上对数据元素进行排序和映射。具体地,数据元素的排序和映射是在数据并行计算设备(诸如使用完全并行处理流水线的图形处理单元(GPU))上执行的。
并行处理流水线可以通过定制的应用编程接口(Application ProgrammingInterface,API)来实施和控制,该定制的应用编程接口向诸如图形处理单元的数据并行计算设备提供对执行处理的内核程序的访问。在这点上,每个相应的内核可以构成并行处理流水线的一部分,其中每个内核利用标准API和子API来执行数据元素的排序、合并、映射等的所有处理。
为了有效地执行完全并行的处理流水线,任何程序和/或算法都应该在处理器组中的每个元素上执行相同的指令,最小化片外(off-chip)I/O操作以避免浪费功率和时间,并且在宽的、对准的和合并的事务中执行片上(on-chip)和片外存储器加载和存储(I/O)。
为了对数据并行计算设备上的数据元素进行排序,可以将数据元素加载到与一个或多个处理器组相对应的板中。处理器组中的每个处理器可以将最优数量的未排序的数据元素从存储器区域加载到处理器可见的存储器区域(诸如寄存器)。在这点上,每个处理器可以在寄存器的寄存器行中存储数据元素。在一些示例中,数据元素可以被同时加载到板中。
在数据元素的加载期间,数据元素可以被转置,从而简化了数据元素的排序。加载的数据元素可以在单个处理器内顺序地排序,其中每个单个处理器同时对其相应寄存器中的数据元素进行排序。
每个处理器的排序的数据元素可以与处理器组中其它处理器的寄存器中的其它数据元素合并,并且随后,如果使用任何其它处理器组,则与其它处理器组中的数据元素合并。这样,由处理器在其相应寄存器中保存的排序的数据元素列可以与由其它处理器保存的排序的数据元素列合并,其中由其它处理器保存的排序的数据元素列要么在相同处理器组的数据元素板中,要么通过协调,在另一处理器组的数据元素板中。
为了将处理器的排序的数据元素合并在一起,寄存器行可以被处理器组中的每个处理器划分并写入共享存储器。基于被合并的数据元素的数量,处理器组中的一个或多个处理器可以以转置的形式加载共享行的子集,从而替换寄存器行的共享子集。然后可以使用最优合并网络来顺序地合并转置的数据元素。
在寄存器行的合并完成时,并且在多于一个的板被排序的情况下,排序的板可以合并在一起。在这点上,基于2的幂的排序的板可以使用双调排序器(bitonic sorter)来进行排序。对于不是2的幂的板,只有在通过将板分解为2的幂的板来利用所有可用的处理器组及其相关联的资源时,才可以实现最优性能。在一些情况下,可以使用不是2的幂的板的排序网络。板合并之后,可以认为数据元素已被排序。排序的数据元素然后可以经由转置以线性顺序输出到存储器,以用于与其它程序或存储装置的进一步交互。
这里描述的特征允许一个或多个程序对多个数据元素进行并行排序。数据元素的这种排序可以由数据并行计算设备以完全并行的方式来执行。这种并行处理提供了比当前CPU、GPU和混合矢量图形引擎显著地更快更有效的排序,从而改进了计算设备的功能。此外,这里描述的排序方法在小型带宽受限的数据并行设备上实现了高性能,在大型带宽丰富的数据并行设备上实现了高性能,以及通过最小化片外存储器加载和存储实现了高能效。此外,通过在数据并行计算设备上完全排序数据,系统的(多个)CPU可以自由地同时执行其它处理任务。
示例系统
图1和2示出了其中可以实施这里描述的特征的示例系统100。不应认为它限制了本公开的范围或这里描述的特征的有用性。在该示例中,系统100可以包括计算设备110、120和130以及存储系统150。每个计算设备可以包含一个或多个处理器112、存储器114、一个或多个图形处理单元(GPU)170和典型地存在于通用计算设备中的其它组件。计算设备110、120、130和130中的每一个的存储器114可以存储可由一个或多个处理器112访问的信息,该信息包括可由一个或多个处理器112和/或GPU 170执行的指令116。
存储器可以存储可由一个或多个处理器检索、操纵或存储的数据。存储器可以是能够存储由处理器可访问的信息的任何非暂时性类型,诸如硬盘驱动器、存储器卡、ROM、RAM、DVD、CD-ROM、可写存储器和只读存储器。诸如指令116和数据118的数据元素可以保存在存储器空间中。例如,图形处理单元具有几个存储器空间,包括:寄存器、常数、可索引共享本地存储器、全局设备存储器、本地存储器、堆栈存储器、参数存储器和纹理存储器。这些存储器空间中的每一个可以具有不同的属性,包括相对于当前处理元件的不同的延迟、大小、并发访问限制,如果有任何当前处理元件,则处理元件可以访问该存储器空间、随机访问和可索引性,该可索引性定义了数据是否可以通过索引或句柄访问以及为了什么目的、可写性、带宽和访问模式惩罚(诸如存储体冲突(bank conflict)、合并、高速缓存未命中、分区驻留等)。多处理器中的处理器可以直接访问寄存器。
指令116可以是由一个或多个处理器直接执行的任何指令集合(诸如机器代码),或者间接执行的任何指令集合(诸如脚本)。在这点上,术语“指令”、“内核”、“应用”、“步骤”和“程序”在这里可以互换使用。指令可以以目标代码格式存储以用于由处理器直接处理,或者以任何其它计算设备语言(包括按需解释或预先编译的独立源代码模块的脚本或集合)存储。指令的功能、方法和例程将在下面更详细地解释。
一个或多个处理器112可以根据指令116检索、存储和修改数据118。例如,尽管这里描述的主题不受任何特定数据结构的限制,但是数据可以存储在计算机寄存器中、作为具有许多不同字段和记录的表存储关系数据库中,或者存储在XML文档中。数据也可以以任何计算设备可读的格式(诸如但不限于二进制值、ASCII或Unicode)格式化。此外,数据可以包括足以识别相关信息的任何信息,诸如数字、描述性文本、专有代码、指针、对存储在诸如其它网络位置的其它存储器中的数据的引用,或者由函数用来计算相关数据的信息。
一个或多个处理器112可以是任何传统的处理器,诸如市售的CPU。可替换地,处理器可以是专用组件,诸如专用集成电路(“application specific integrated circuit,ASIC”)或其它基于硬件的处理器。
计算设备110、120和130中的一个或多个可以包括并行执行特定计算过程(诸如光栅化、合成以及以其它方式更快或更有效地操纵矢量图形)的专用硬件组件。例如,一个或多个图形处理单元113(“GPU”)可以是任何传统的图形处理单元,诸如由Intel、AMD和NVIDIA生产的图形处理单元。此外,一个或多个通用处理器可以是单指令、多数据(singleinstruction,multipledata,SIMD)设备,单指令、多线程设备(single instruction,multiple thread,SIMT)。每个GPU 113可以具有自然的事务大小,例如分别等于16、32或64个字的64、128或256字节或更多或更少。自然事务大小可以是GPU的架构宽度(即,在诸如GPU 113的多处理器内,可以在单个循环中处理的字的数量)。
尽管图1功能性地示出了计算设备的处理器、存储器和其它元件在相同块内,但是处理器、计算机、计算设备或存储器实际上可以包括多个处理器、计算机、计算设备或存储器,这些处理器、计算机、计算设备或存储器可以存储在于相同物理外壳内,也可以不存储在于相同物理外壳内。例如,存储器114可以是位于与计算设备110的外壳不同的外壳中的硬盘驱动器或其它存储介质。
对处理器、计算机、计算设备或存储器的引用将被理解为包括对可以并行操作或不并行操作的处理器、GPU、计算机、计算设备或存储器的集合的引用。例如,计算设备110可以包括作为负载平衡服务器群、分布式系统等操作的服务器计算设备。此外,尽管下面描述的一些功能被指示为发生在具有单个处理器(诸如图形处理器)的单个计算设备上,但是这里描述的主题的各个方面可以由多个计算设备实施,例如,通过网络160通信传达信息。
计算设备中的每一个可以位于网络160的不同节点处,并且能够与网络160的其它节点直接和间接通信。尽管在图1-2中仅描绘了几个计算设备110、120和130,但是应当理解,典型的系统可以包括大量连接的计算设备,其中每个不同的计算设备位于网络160的不同节点处。这里描述的网络160和中间节点可以使用各种协议和系统互连,使得网络可以是互联网、万维网、专用内联网、广域网或局域网的一部分。网络可以利用诸如以太网、WiFi和HTTP的标准通信协议,一个或多个公司专用的协议,以及前述协议的各种组合。尽管当信息如上所述地被发送或接收时获得了某些优点,但是这里描述的主题的其它方面不限于任何特定的信息发送方式。
作为示例,计算设备110中的每一个可以包括能够经由网络与存储系统150以及计算设备120、130和130通信的网络服务器。例如,如图2的系统200所示,服务器计算设备110中的一个或多个可以使用网络160在诸如计算设备120或130的显示器122或132的显示器上向诸如用户220或230的用户发送和呈现信息。在这点上,计算设备120和130可以被认为是计算设备,并且可以执行这里描述的特征中的所有或一些。
计算设备120和130中的每一个可以类似于服务器计算设备110配置,具有如上所述的一个或多个处理器、存储器和指令。每个计算设备120或130可以是意图由用户220或230使用的个人计算设备,并且具有通常与个人计算设备(诸如中央处理单元(CPU))结合使用的所有组件、存储数据和指令的存储器(例如,RAM和内部硬盘驱动器)、诸如显示器122或132的显示器(例如,具有屏幕、触摸屏、投影仪,电视或可操作以显示信息的其它设备的监视器)、以及用户输入设备124(例如,鼠标、键盘、触摸屏或麦克风)。在另一示例中,计算设备120-130可以是头戴式计算系统和/或虚拟现实系统。在这点上,包括一个或多个全景图像的增强或虚拟环境可以通过计算设备的显示器呈现给用户。计算设备还可以包括用于记录视频流和/或捕获图像的相机、扬声器、网络接口设备以及用于将这些元件彼此连接的所有组件。
尽管计算设备120和130每个可以包括全尺寸的个人计算设备,但是它们可以替代地包括能够通过诸如互联网的网络与诸如服务器计算设备110的服务器交换数据的移动计算设备。在这点上,计算设备120可以是移动电话或诸如使能无线的PDA、平板PC、数码相机或能够通过互联网获得信息的上网本的设备。计算设备130可以是平板电脑或膝上型电脑,其可以允许用户使用小键盘(small keyboard)、小键盘(keypad)、麦克风、使用具有相机的视觉信号、触摸屏等来输入信息。
如同存储器114一样,存储系统150可以是能够存储由服务器计算设备110可访问的信息的任何类型的计算机化存储装置,诸如硬盘驱动器、存储器卡、ROM、RAM、DVD、CD-DVD、可写存储器和只读存储器。此外,存储系统150可以包括分布式存储系统,其中数据存储在物理上位于相同或不同地理位置的多个不同存储设备上。存储系统150可以经由如图1所示的网络160连接到计算设备,和/或可以直接连接到计算设备110、120和130中的任何一个。
图3示出了GPU 170的示例架构。GPU 170可以包括一个或多个处理器380A和380B。一个或多个处理器380A和380B可以被配置为执行指令的并行和/或独立处理。在这点上,处理器可以协调操作以执行大规模并行处理任务。尽管仅示出了两个处理器,但是GPU 170可以包括任何数量的处理器,包括仅单个处理器。
如图4所示,每个处理器380A和380B可以分别包括寄存器存储器385A和385B以及共享存储器386A和386B。寄存器存储器385A和385B通常是具有高带宽和低延迟的存储器。寄存器存储器可由与其相关联的处理器访问。例如,处理器380B可能能够访问寄存器385B,但不能访问寄存器385A。类似地,处理器380A可能能够访问寄存器385A,但不能访问寄存器385B。
共享存储器386A和386B可以允许在处理器之间共享数据。每个共享存储器可以与其相应的处理器的寄存器存储器交互,以存储和/或传输来自寄存器的数据。例如,处理器380A可以将数据从寄存器385A复制和/或移动到共享存储器386A,以打开存储器空间,用于在寄存器385A中的进一步存储。此外,处理器380B可以从共享存储器386A访问数据。虽然未示出,但是每个处理器可以包括其它存储器,诸如常数存储器、可索引共享存储器、全局设备存储器(即,可由一个或多个数据并行设备(诸如GPU)访问的存储器,其中该一个或多个数据并行设备共享互连,该存储器典型地大于寄存器或共享存储器)、本地存储器、堆栈存储器、参数存储器和纹理存储器。
存储器控制器412可以协调处理器之间的数据的传输。例如,处理器380B可以通过存储器控制器412从共享存储器386A请求数据。在这点上,处理器380B可以经由高速、低延迟存储器总线414通信。存储器控制器412然后可以使共享存储器386A经由存储器总线414将请求的数据传输到共享存储器386B。在一些实施例中,处理器可以直接通信,而不需要存储器控制器412。CPU和GPU可以有分离或统一的存储器架构。如图3和图4所示,分离的存储器架构,也称为离散存储器系统,可以由具有它们自己的离散存储器的CPU 112和GPU 113组成。为了在CPU和GPU存储器之间传输数据,可以利用诸如存储器总线414的总线,如图3所示。在统一的存储器设备中,CPU和GPU可以共享高速缓存,并提供跨处理元件的存储器一致性。例如,如图3所示,CPU 112和GPU 113共享包括本地级高速缓存115和动态随机存取存储器117的存储器接口。
每个处理器380A和380B可以经由IO总线420从外部元件416请求数据。在这点上,当诸如处理器380A的处理器请求当前未存储在共享存储器和/或寄存器存储器中的数据时,处理器380A可以从IO控制器418请求数据。IO控制器可以从诸如存储设备150的外部元件416定位和检索请求的数据,并将该数据提供给处理器380A。
转向图5,GPU 170可以包括可以形成处理器组的处理器的组。例如,处理器580A和580B可以形成处理器组580C,处理器581A和581B可以形成处理器组581C,处理器582A和582B可以形成处理器组582C,处理器583A和583B可以形成处理器组583C。处理器组中的每个处理器可以与处理器组中的其它处理器共享存储器和其它这样的元件。例如,处理器组580C的处理器580A和580B可以共享一个或多个寄存器存储器和共享存储器。处理器的每个组可以在任何时间点由相同的指令控制。由相同指令控制的处理器组可以被称为“线程束(warp)”、“波前(wavefront)”、SIMD运算或超长指令字(very long instruction word,VLIW)运算。
处理器组的集合可以被称为处理器块。处理器组之间的通信和协调可以通过存储器和控制流隔离操作符(control flow fencing operator)或原子存储器操作来实现。处理器块不一定具有2的幂的处理器组集合大小。
类似地,处理器块的集合可以被称为网格。网格中处理器块之间的协调可以通过存储器和控制流隔离操作符或原子存储器操作来实现。
示例方法
为了对诸如GPU 170的数据并行计算设备上的数据元素进行排序,可以将数据元素加载到与一个或多个处理器组相对应的板中,每个处理器组包括两个或多个处理器。在这点上,处理器组中的每个处理器可以将最优数量的未排序的数据元素从存储器区域加载到处理器可见的存储器区域(诸如寄存器)。例如,如图6A所示,处理器组620可以将数据元素从共享存储器680或全局存储器685加载到板610。为了启动数据元素的加载,可以由GPU170执行板加载内核,该板加载内核定义并使得计算设备执行这里定义的加载指令。
板的大小可以由处理器组中处理器的数量和寄存器的数量来定义。例如,如图6A图表中的列所示,板610由处理器组620中的处理器621-628定义。如图6A图表中的行所示,每个处理器可以在寄存器630的寄存器行631-638中存储数据元素。例如,处理器621可以将数据元素601存储在寄存器行637中,并且处理器622可以将数据元素602存储在寄存器行638中。处理器可能只能访问(即读和/或写)寄存器行中的单个寄存器。例如,处理器621可能只能访问寄存器行637中的寄存器637A,并且处理器622可能只能访问寄存器行638中的寄存器638B。
在某些情况下,数据元素可以被同时加载到板中。例如,如图6B所示,数据元素可以被加载到板610-616中。在这点上,处理器组620可以将数据元素的第一集合加载到其相应的寄存器630中,以生成板610。类似地,处理器620A-620C可以将数据元素的第二、第三和第四集合分别加载到寄存器630A-630C中,以生成板612-616。板610-616的生成可以同时发生。尽管图6B示出了四个板,但是可以同时或并发地生成任何数量的板。如图6B进一步所示,处理器组620-620C形成处理器块611,其中该块的每个处理器组访问相同或不同的共享存储器680。尽管仅四个处理器组被示出为形成块611,但是任何数量的处理器组可以形成块,并且每个块可以包含多于一个的板。
诸如处理器块611和611A的处理器块的集合可以被称为网格。例如,图6C中的处理器块611和611A可以被分组在一起作为网格613。网格中处理器块之间的协调可以通过存储器和控制流隔离操作符或原子存储器操作来实现。例如,如图6C中进一步所示,处理器块611可以直接通过全局存储器685或者通过共享存储器680与处理器块611A通信。
数据元素可以以转置的顺序加载到板中。在这点上,最优数量的数据元素可以被转置并加载到每个处理器的相应寄存器中。数据元素的最优数量可以由数据并行计算设备的寄存器文件的大小来确定,诸如32x256、8x128或更多或更少。例如,GPU 170可以包括32位寄存器的寄存器文件,该寄存器文件是32x256并且可以对32位的键(key)进行排序,使得板宽度与GPU的寄存器文件的宽度相同。这样,最大板高度可以稍微低于寄存器文件高度,诸如200、或更多或更少,因为被排序的数据元素保留在寄存器文件中,直到被排序(或合并),并且在处理、排序、合并等期间,空寄存器可以用于临时变量等。
例如,如图6A所示,数据元素可以被加载到与处理器621相关联的寄存器中,然后加载到与处理器622等相关联的寄存器中,直到板610中的所有寄存器都被填满。如这里所讨论的,通过这样做,板中数据元素的排序或合并可以在单个处理器内顺序地运行,简化了数据元素的排序。
通过以转置的顺序将数据元素加载到单个处理器的寄存器中,在加载或排序数据元素时,既不需要执行处理器间通信,也不需要执行处理器排名(rank)比较操作。举例来说,在诸如GPU 170的数据并行计算设备上的排序或合并网络的直接实施方式可以包括将每个数据元素映射到处理器组中的排名的处理器的集合。在这点上,比较和交换操作可以由例程执行,该例程获取由处理器保存的值,从另一预定处理器获得值,并且如果当前处理器排名较低,则保存较小的值。否则,将保存较大的值,如下列算法所示,其中input0和input1是第一数据元素和第二数据元素:
COMPAREEXCHANGE(INPUT0,INPUT1,ISGREATERPROCESSOR)
IF(ISGREATERPROCESSOR)
INPUT0=MAX(INPUT0,INPUT1)
ELSE
INPUT0=MIN(INPUT0,INPUT1)
这种方案效率低下的地方很多。最初,需要两个处理器来对两个数据元素进行排序。这样,每个处理器必须执行至少一次比较,以根据处理器的排名确定更小或更大的数据元素值。此外,处理器间通信必须通过两个处理器共享的存储器或者通过处理器间通信另一手段来进行。
可以在单个处理器内顺序地执行对板内转置的数据元素的排序,其中每个处理器同时对其相应寄存器中的数据元素进行排序。这种排序可以使用排序网络来执行。排序网络可以是数学模型,该数学模型描述了将数据元素的未排序的列表转换成排序的列表的比较和交换操作的预定序列。例如,可以使用以下排序网络算法(算法1)迭代地执行数据元素的排序,其中input0和input1是第一数据元素和第二数据元素。
算法1
COMPAREEXCHANGE(INPUT0,INPUT1)
INPUT0=MIN(INPUT0,INPUT1)
INPUT1=MAX(INPUT0,INPUT1)
参考图7,在顶部图表中示出了与处理器621相关联的寄存器中的未排序的数据元素(即,631A-638A)和与处理器622相关联的寄存器中的数据元素(即,631B-638B)。在每个处理器621和622迭代地执行上述算法1时,存储在与每个处理器相关联的寄存器中的数据元素可以以降序排序,如图7的下部图表所示。算法1的一个好处是比较操作的数量可以减少一半、或者减少更多或减少更少。此外,该算法还可以减少逻辑、数据移动和其它指令的数量。在处理器是超标量的情况下,可以使用上述算法来开发利用指令级并行性。处理器组中每个处理器的排序的数据元素在图8的板810中示出。尽管未示出,但是诸如板610-612的多个板可以被同时排序。
在寄存器行的大小不是2的幂的情况下,可以使用替代的排序技术。例如,可以将寄存器行的大小调整到大于寄存器行大小的、2的最低幂,并且在寄存器行中可以用最小或最大地取值的数据元素初始化新数据元素。在一些情况下,可以在原始数据元素之外的索引处跳过数据元素。例如,对于1024个元素(例如,32位整数)的板,如果只有1000个元素要排序,那么在排序开始之前,1000个元素可以用最大或最小值元素“填充(padded)”。通过用最大和/或最小值元素填充该板,这些元素可以保留在板的末端,同时允许排序进行,就好像有1024个键(keys)要排序一样。可替代地,处理排序和/或合并的所有内核可以知道数据元素的原始数量,并且避免执行未命中数据元素的显式加载,并且代替地在每个步骤替换最大值或最小值。在对每个处理器的数据元素进行排序时,每个处理器的排序的数据元素可以与处理器组中其它处理器的寄存器中的其它数据元素合并,并且随后,如果使用任何其它处理器组、则与其它处理器组中的数据元素合并。换句话说,由处理器在其相应寄存器中保存的排序的数据元素列需要与由其它处理器保存的排序的数据元素列合并,其中由其它处理器保存的排序的数据元素列要么相同处理器组的数据元素板中,要么通过协调,在另一处理器组的数据元素板中。例如,存储在与处理器621相关联的寄存器中的数据元素(如图8所示)可以与存储在与处理器622相关联的寄存器列中的数据元素(进一步如图8所示)合并。将排序的数据元素合并在一起的处理器可以被视为配对处理器。
为了将处理器的排序的数据元素合并在一起,寄存器行可以按照由设备硬件或性能特征确定的预定方式来划分。在这点上,取决于共享的数据量以及处理器与其配对合并处理器的接近度,配对处理器之间通信的处理成本可能很高。此外,如果通信是在属于不同处理器组的处理器之间进行的,则可能要求同步或隔离,这增加了处理成本。
为了最小化处理成本,要合并在一起的处理器的排序的数据元素可以被写入可由配对处理器访问的最高性能存储器空间。因为处理器可以以最高带宽和最低延迟访问的存储器空间通常是寄存器存储器,诸如图4中的寄存器存储器385A-385B。然而,在不使用处理器间通信机制或不将数据元素存储到用于后续加载的共享存储器中的情况下,设备中的其它处理器通常无法访问寄存器存储器。因此,处理器可以将排序的数据元素写入诸如共享存储器680的共享存储器,该共享存储器可由处理器中的一些或所有访问。
例如,如图9所示,处理器组620中的处理器可以共享板810中选择的寄存器行。在这点上,如图9中进一步所示,包括寄存器行631、632、637和638的选择的寄存器行可以由处理器组620中的每个处理器写入共享存储器680。下面的算法2描述了要共享的寄存器行的确定以及何时确定。
基于合并级别(即,完成时将以排序的顺序合并的数据元素的数量),处理器组620中的一个或多个处理器可以以转置的形式加载共享行的子集,从而替换寄存器行的共享子集。例如,如图10所示,从寄存器行631和638共享的数据元素可以被转置,并且来自寄存器行632和637共享的数据元素可以被转置。
转置的数据元素可以使用最优合并网络顺序地合并。在这点上,最优合并网络可以是针对特定大小数量的数据元素和/或板进行了优化的已知排序网络。在一些情况下,可以使用生成具有O(nlog(n)2)的串行复杂性的高效排序网络的算法(其中n是数据元素的数量),来生成最优合并网络。
每个处理器可以与其处理器组中的处理器共享其合并的结果,或者通过协调,与其它处理器组或设备共享其合并的结果,并且每个处理器可以恢复与相邻处理元件共享的行。例如,如图10中进一步所示,转置和合并的值可以写回到板810中。
可以执行寄存器行的共享和合并,直到所有行都已经被合并。例如,如图11所示,寄存器行633-636中的数据元素可以从板810共享到共享存储器680。然后,如以上关于图9和10所述,共享寄存器行的数据元素可以被转置、合并和恢复。
在由处理器保存在寄存器中的排序的数据元素的数量大于由所有配对处理器可以保存在共享存储器中的数据元素的数量的情况下,可以使用处理器间通信和协调操作。处理器间通信和协调操作可以包括确定每个处理器可以写入共享存储器(NSK)的数据元素的最大数量以及每个处理器M的寄存器总数。M的幅度越大,单个处理器在无需与其它处理器协调的情况下就可以执行越多的顺序非发散排序和合并操作。
为了确定合并过程(SB)中的步骤总数,每个处理器M的寄存器可以除以NSK。除法步骤的商可以提供合并过程(SB)中的步骤数。在M除以NSK的除法导致非零余数的情况下,可以发生仅使用早期合并步骤中涉及的处理器的一部分的附加合并步骤。
前述合并步骤可以由数据并行计算设备使用以下合并算法(算法2)来执行。
算法2
1.如上所述,确定SB步骤数。
2.按照以下顺序考虑寄存器行:{0,M-1,1,M-2,2,M-3,…,M÷2-1,M÷2}
3.对于SB中的每个步骤i:{0,1,…,SB-1}
3.1.对于来自上面寄存器行列表中的NSK寄存器行:
{i×NSK+0,i×NSK+1,…,i×NSK+NSK-1}
3.1.1.将寄存器行写入共享存储器。
3.1.2.基于合并级别(即,完成时将以排序的顺序合并的数据元素的数量)“LEVEL”)和寄存器索引{0,1,…,NSK-1},使用LEFT计算从偶数行和使用RIGHT计算从奇数行将数据元素读回到被写入共享的相同寄存器行中。一半的寄存器称为“左”寄存器,并且另一半称为“右”。变量n的范围为{0,1,…,NSK÷2-1}。
LEFT(N):((LEVEL×((N)/(LEVEL÷2)))+((N)%(LEVEL÷2))
RIGHT(N):((LEVEL×((N)/(LEVEL÷2)))-((N)%(LEVEL÷2))+LEVEL 1)
3.1.3.对于n:{0,1,…,NSK/2-1}比较LEFT和RIGHT,然后继续对左寄存器进行顺序双调合并,然后对右寄存器进行顺序双调合并。
3.1.4.基于合并级别LEVEL和寄存器索引{0,1,…,NSK-1},将数据元素写回它们在3.1.2中读取的它们的原始位置。
3.1.5.使用3.1.1中相同的位置从共享存储器中读回数据元素。
3.2.继续SB中的下一步骤i+1:{0,1,…,SB-1}
在合并所有寄存器行时,每个处理器列(即,621-628)可以是双调的但没有排序的。因此,处理器可以使用双调合并网络顺序地合并其相应的数据元素。例如,如图12所示,处理器对621/622、623/624、625/626和627/628可以顺序地合并它们相应的数据元素1221-1251,以在板1210内生成蛇形(serpentine)图案。换句话说,图12示出了处理器组620单次执行算法2的结果。
在要排序更多的数据元素(例如,板的部分保持未排序)的情况下,算法2可以以双倍的合并级别重复,直到达到期望的合并级别或者直到整个处理器组被排序。换句话说,处理器的配对可以加倍。例如,如图12中进一步所示,处理器对(i)621/622和623/624;和(ii)625/626和627/628自身可以配对在一起,以分别生成处理器配对1261和1271。如图13所示,处理器对的数据元素可以被排序,并且可以生成进一步的配对,直到整个板810被合并和排序。算法2可以同时针对多个板实施。例如,图6B的板610-616可以都分别由处理器组620-620C根据算法2同时处理。如以上关于算法2所述的合并和排序过程可以通过板排序内核来启动和执行,并且可以被称为板翻转合并。
在完成合并时,每个处理器以转置的顺序将现在排序的数据元素从其处理器可见的存储器区域存储到起始存储器区域(即寄存器)。在这点上,数据元素被存储在具有二维阵列的板中,该二维阵列的宽度等于处理器组的大小,并且高度等于在步骤(1)中加载的元素的最优数量。例如,如图13所示,处理器621-628将转置的数据元素存储在板810中的寄存器行631-638中。在合并级别小于板宽度的情况下,将导致板被划分成排序的数据元素的分组列。跨处理器组中的处理器的数据元素的上述合并可以被认为是板排序,其可以在由数据并行处理设备调用板排序内核时启动和执行。
在要对多个板进行排序的情况下,可以将每个板合并在一起,以生成完全排序的列表。在这点上,必须考虑处理器块和处理器网格,以降低处理要求,并协调跨处理器、处理器组、处理器块和处理器网格的数据元素和板的排序。例如,可以发现并行存储器访问模式,该并行存储器访问模式在编译时间大多是可解析的,并且在运行时间要求最小的计算。数据并行设备可以并行排序和合并多达预定义数量的板(NSPB)。换句话说,数据并行设备可以以处理器组(即板)或块级对一些或所有板进行排序和合并。NSPB可以依赖于硬件。
此外,应该避免存储体冲突(bank conflict)。为了合并两个基于排序的板的能力,双调排序器可以被分解成K个分离且交织的N级双调排序器,然后是N个K级排序器。可替换地,或者除了双调排序器之外,可以使用另一种并行存储器访问模式,该模式与N×K双调排序器一起工作,避免一些或所有存储体冲突,并且允许最小化处理器间的协调。
为了定义访问模式,可以使用以下算法(算法3),其中SHCB_BASE和SHCB_OFFSET是排序级别(在编译时间已知)、每线程束填充的共享存储器量(在编译时间已知)、线程束的id和线程束通道的id的函数。作为处理器组和当前处理器中处理器数量的函数,SHCB_BASE和SHCB_OFFSET将在驻留在数据并行设备中的多个板上分布并行存储器访问,PRC-GROUP#是特定的处理器组,Processor#是处理器组中的特定处理器。使用这种并行存储器访问计算可以避免所有存储体冲突。交织因子由函数LNSK决定,该函数LNSK取决于处理器组和NSK的大小。算法3中的每个函数都显示在附录A中
算法3
BASE:SHCB_BASE(LEVEL,PROC-GROUP#,PROCESSOR#)
OFFSET:SHCB_OFFSET(LEVEL,PROC-GROUP#,PROCESSOR#)
LEFT:BASE+OFFSET
RIGHT:BASE-OFFSET
回头参考算法2,LEFT和RIGHT计算可以在编译时间被解析为从具有恒定偏移的存储器区域加载或存储。结果是合并算法的并行存储器访问模式是无冲突的,要求最小的计算和最小的逻辑。例如,图14说明了对于NSK=16,如何静态地计算到共享存储器中的索引。在这点上,图13示出了在每一步骤中可以合并左行的一半和右行的一半。如图14进一步所示,LEFT块和RIGHT块1401-1405指的是从共享存储器中读取的寄存器。LEFT块和RIGHT块101-105内的箭头表示数据并行处理器可以从共享存储器中的奇数行和偶数行读取的通道。将使用算法2中定义的RIGHT(n)函数提供的列索引读取奇数行。反转行并重复相同的过程会合并剩余的两半。因此,在两个并行比较中,可以合并两行。此外,由LEFT和RIGHT计算的模式加载寄存器,使得行间合并完成后,寄存器可以包含下一(多个)合并步骤所要求的那些索引。显著的好处是(多个)合并步骤可以在没有附加加载和存储的情况下执行。
对于支持处理器间广播加载的数据并行设备,在避免在共享存储器重复读取或使用额外寄存器的同时,额外的合并级别是可能的。在这点上,广播读取和就地(in-place)比较允许在寄存器中保存多达NSK值,这使得能够执行多达log2(NSK)级别的合并,而无需附加读取或写入共享或其它存储器空间。例如,图14示出了两个处理器“0”和“1”,该两个处理器“0”和“1”在第一步中从它们相应的行(即1401和1402)读取NSK值。在第二步中,每个处理器可以分别从其相对合并行1403和1404顺序地读取NSK值,并且就地比较和交换值,因此不要求用于存储的附加寄存器。
在并行处理设备具有非2的幂的处理器组的总数的情况下,只有当所有可用的处理器组及其相关联的资源都被利用时,才能实现最优性能。在这点上,如果排序的板的数量不是2的幂,则如下所述的广义双调排序网络可以用于合并板行。例如,可以通过将任意大小的双调排序网络分解成交织的奇数和偶数双调排序网络的一个或多个阶段来构建该任意大小的双调排序网络。这种分解可以递归地应用,得到连续更小的交织奇数和偶数网络。当获得期望的或原始的网络大小时,可以停止分解。当与板的蛇形排序的布局相组合时,这种分解过程使能合并排序的板的另一种有效的并且将永远不会导致共享存储器存储体冲突的方法。
广义双调排序网络,也可称为广义排序网络,可以定义如下:
1.所有逻辑处理器组都具有排序的输入板。
2.逻辑处理器组的数量可以是物理处理器组的倍数。
3.对于块中的所有处理器组:
3.1.对于广义双调排序网络的所有阶段:
3.1.1.如果处理器组是激活的:
3.1.1.1.在共享存储器中存储多达NSK行。
3.1.2.激活最优数量的逻辑处理器组(通常少于NSK)。
3.1.3.每个激活的逻辑处理器组执行以下步骤:
3.1.3.1.将一个或多个交织的奇数/偶数双调排序网络从NSK行加载到寄存器中。
3.1.3.2.执行奇数/偶数双调排序网络。
3.1.3.3.将排序的结果存储回NSK行中的相同位置。
例如,在处理器块中合并28个排序的板的块可以分解成五个连续的阶段,如图15所示。在这点上,图15示出:
第一阶段.合并12×2输入双调排序网络,保留4个输入不激活。
第二阶段.合并4×4输入和4×3输入双调排序网络。
第三阶段.合并4×7输入排序双调网络。
第四阶段.合并2×14输入排序双调网络。
第五阶段.最后,合并28输入的双调排序网络。
除了第一阶段之外,所有阶段都可以完全利用该块的逻辑处理器组。在激活最优数量的逻辑处理器组的情况下,可以完全利用物理处理器组。
如上所述,双调排序网络具有O(nlog2n)比较复杂性,但非常低的开销。对于超过某大小的输入,最优的是切换到另一种排序算法,并使用此文档中描述的算法以利用此文档中描述的排序算法对低于最优大小的输入序列进行独立地排序或合并。这可以称为混合排序算法。
在被合并的板的数量是2的幂的情况下,多板翻转合并可以由诸如GPU 17的并行处理设备来执行。多板翻转可以在被排序的处理器块中的每个板完成之后发生,诸如通过板排序内核。在这点上,每个处理器组可以以预定义的模式将它们相应排序的板加载到共享存储器中。处理器组然后可以用来自共享存储器的多个列来重新加载它们相应的板。每个处理器组可以双调合并它们的板的相应列,并且再次将板加载到共享存储器。最后,如这里进一步定义的,处理器组可以每个以预定义的模式用来自共享存储器中的多个列加载它们相应的板,并执行板半合并。在上述步骤结束时,每个处理器组可以在它们相应的寄存器行中存储数据元素的排序的列表。多板翻转合并可以由并行处理设备通过调用多板翻转合并内核来启动。
图16A-16B示出了多板翻转合并的示例。参考图16A,四个排序的板(slab1…slab4)可以分别存储在四个处理器组(处理器组1-处理器组4)的寄存器行中。每个处理器组可以将存储在它们相应排序的板中的数据元素加载到共享存储器1680中。当通过使用这里进一步描述的技术将板加载到共享存储器中时,可以避免存储体冲突。如图16A所示,处理器组的前一半(即,处理器组1和2)可以通过寄存器行以降序(例如,从左上角开始从左到右)将存储在它们相应的板中的数据元素添加到共享存储器1680中,而处理器组的后一半(即,处理器组3和4)可以通过寄存器行以逆序和升序(例如,从右下角开始从右到左)添加存储在它们相应的板中的数据元素。然后,每个处理器组可以从共享存储器1680将预定义数量的列(诸如四列,如图16A所示)重新加载回它们相应的寄存器行。
如图16B所示,在每个处理器组重新加载它们相应的寄存器行时,每个处理器组(处理器组1处理器组4)可以执行相应板(slab1-slab4)中的每列的双调合并。然后,每个处理器组可以将存储在它们相应的板中的数据元素加载回共享存储器1680中。当通过使用这里进一步描述的技术将板加载到共享存储器中时,可以再次避免存储体冲突。
每个处理器组可以再次从共享存储器1680将预定义数量的行(诸如一行,如图16B所示)重新加载回它们相应的寄存器行。在这点上,如图16B进一步所示,处理器组的前一半(即,处理器组1和2)可以逐寄存器行地以降序将数据元素分别从共享存储器1680的第一行和第二行加载到它们相应的寄存器行(例如,从左上角开始从左到右),而处理器组的后一半(即,处理器组3和4)可以逐寄存器行地以逆序和升序分别将数据元素从共享存储器1680的第三行和其它行添加到它们相应的寄存器行中(例如,从右下角开始从右到左),其中处理器组的后一半从右到左读取共享存储器。换句话说,处理器组的前一半可以逐寄存器行地以降序将存储在共享存储器的上半部分行中的数据元素加载到板中,而处理器组的后一半可以逐寄存器行地以逆序和升序加载存储在共享存储器的底行(bottom rows)中的数据元素的下半部分,以完成多板翻转合并。尽管图16A和16B仅示出了四个处理器组,但是可以使用任何数量的偶数处理器组。
在完成板的加载后,每个处理器组可以执行板半合并以对它们相应的板进行排序。板半合并可以执行与这里描述的板排序类似的功能,但是以如图17A-17E所示的不同方式进行。例如,图17A示出了存储在具有八个寄存器行1730的处理器组1720中的板1700。如图17A进一步所示,来自寄存器行1731-1734的上半部分的数据可以逐行加载到共享存储器1780中。
然后,加载到共享存储器中的相邻数据元素可以被比较和交换,并被加载回寄存器行。例如,如图17B所示,数据元素1781可以与相邻数据元素1782进行比较。因为9大于4,所以可以交换数据元素。换句话说,数据元素1781和1782被交换。在完成所有相邻数据元素的比较和交换时,数据元素可以被加载回板1700中。
然后可以将板中寄存器的下半部分加载到共享存储器中,并且可以执行所有相邻数据元素的比较和交换。例如,如图17C所示,来自下半部分的寄存器行1735-1738的数据可以逐行加载到共享存储器1780中。如图17C中进一步所示,在完成相邻数据元素的比较和交换时,共享存储器1780中的数据元素可以被重新加载到板1730中。
如这里所述,处理器组可以使用双调合并网络顺序地合并和排序其相应的数据元素。例如,如图17D所示,第一组处理器1761可以以蛇形图案合并和排序它们相应的数据元素。如图17D进一步所示,对于第二组处理器1762也可以发生同样的情况。如图17E所示,两组处理器1761和1762的数据元素然后可以合并在一起,以生成完全排序的板。尽管图17A-17E示出了八个处理器和八个寄存器行,但是可以使用任何数量的处理器和/或寄存器行,这仅受并行处理设备能力的限制。
在被合并的板的数量不是2的幂的情况下,可以使用广义合并。在图18A和18B中示出了示例性的广义合并,其中三个处理器组具有三个由四个元素组成的寄存器行,尽管可以使用任何数量的处理器组、寄存器行和元素。参考图18A,三个排序的板(slab1…slab3)可以分别存储在三个处理器组(处理器组1-处理器组3)的寄存器行中。每个处理器组可以将存储在它们相应排序的板中的数据元素加载到共享存储器1880中。
每个处理器组可以将共享存储器每行中的前四个和最后四个数据元素重新加载到它们相应的寄存器中。例如,处理器组1可以将共享存储器的行1881中的前四个和最后四个数据元素分别加载到其第一寄存器行中。处理器组2和3可以分别对行1882和1883进行相同的操作。如图18A中进一步所示,处理器组然后可以合并列,以按升序对它们相应列中的数据元素进行排序。然后,如图18A中进一步所示,排序的数据元素可以存储回共享存储器中。
参考图18B,排序的数据元素可以逐列读回到板中。例如,slab1可以将共享存储器的前四列加载到其板中,slab2可以加载接下来的四列,以及slab3可以加载最后四列。然后,如图18B进一步所示,slab1和slab3可以合并,接着是slab2和slab3,以及最后slab1和slab2被合并。
在要排序比可以符合NSPB板的数据元素更多的数据元素的情况下,可以使用处理器块的网格。在这点上,可以通过使用全局存储器来实现合并比NSPB板数据值更大的数据元素,并且无需同步。在这点上,可以使用特殊的读访问模式,随后在寄存器中进行进一步的合并处理,以及然后执行最终写操作。
总而言之,数据元素可以通过以下步骤进行排序:
1.对于所有板:
1.1.对于板中的每一块:
1.1.1.对于块中的每个板:
1.1.1.1.板加载:
1.1.1.2.板排序
1.1.2.直到块中的所有板合并:
1.1.2.1.多板翻转合并:
1.1.2.2.如果必要,则板半合并
1.1.3.板存储
在板跨网格分布的情况下,可能要求跨存储器(诸如共享存储器)进行附加的板合并。在这点上,可以执行许多不同的合并步骤,包括流式翻转合并、流式半合并、多板半合并和板半合并。附加合并步骤的顺序以及对数据元素进行排序所要求的其它这种步骤可以如下:
1.直到所有板合并(例如,对于跨网格分布的板):
1.1.流式翻转合并
1.2.如果必要,则流式半合并
1.3.如果必要,则多板半合并
1.4.如果必要,则板半合并
1.5.如果完成:
1.5.1.可选的,报告关键改变
1.5.2.可选的,板转置&存储
1.6.否则,板存储
2.完成
如图18所示,流式翻转合并通过下面的算法4实施。在这点上,流式翻转合并可以是由(N x|processorgroup|)输入定义的双调合并,其中每输入具有一个加载步骤和一个存储步骤。
算法4
1.给定:输入板的序列
2.在图中所示的板合并模式中,用交织k加载板行。具体来说,如图16所示,从板的序列的开始到结束读取由k交织的N/2行,从板的序列的结束到开始加载由k交织的N/2行。
3.立即比较和交换左行和右行。
4.左行用每处理器的顺序双调合并网络来合并,并被写回到它们的原始位置。然后,右行也用每处理器的顺序双调合并网络来合并,并被写回到它们的原始位置。
流式翻转合并的图示如图19所示。图19的流式翻转合并示出了具有k=2的交织、八个板1901和八个处理器组(即,处理器组1-处理器组8)的流式翻转合并。如图19所示并且根据上面的算法4,每个处理器组可以合并板中的每第k行。每个三角形1911示出一行寄存器,其中每个寄存器是递增顺序。为了清楚起见,只标记了单个寄存器行。在这点上,即使板以蛇形顺序排序,水平行也可以递增。根据Nakatani/Liszka属性,合并多个行相当于合并“N”跨步的(strided)行集合(每第N行),然后合并这N个相邻行。如图19中进一步所示,处理器组中反转的三角形表示以逆序(例如,“翻转的”)读取该行,使得所有的行一起形成双调序列。在流式翻转合并的输出仍然太大而不能利用多板半合并合并的情况下,则如这里所述,重复使用流式半合并,直到相邻板将符合多板合并实施方式。如图19底部所示,线路图1903表示行被比较的顺序。例如,从左到右比较第1行和第3行,然后比较第2行和第4行,然后同时比较1&2和2&4。
在一些情况下,如图20所示,流式半合并可以是对所有板进行排序所必需的。图20的流式半合并示出了具有k=2的交织、八个板2001和八个处理器组(即,处理器组1-处理器组8)的流式半合并。如图20所示,每个处理器组可以合并板中的每第k行。与图19一样,三角形2011示出一行寄存器,每个寄存器是递增顺序的。为了清楚起见,只标记了一个寄存器行。在这点上,即使板以蛇形顺序排序,水平行也可以递增。根据Nakatani/Liszka属性,合并多个行相当于合并“N”跨步的行集合(每第N行),然后合并这N个相邻行。如图20底部所示,线路图2003表示行被比较的顺序。例如,从左到右比较第1行和第3行,然后比较第2行和第4行,然后同时比较1&2和2&4。
在一些情况下,可以执行多板半合并。多板半合并类似于多板翻转合并,但是处理器组的后一半不是以逆序将数据元素加载到共享存储器,而是它们以与处理器组的前一半相同的方式加载数据元素。例如,图21和22示出了具有分别存储在四个处理器组(处理器组1-处理器组4)的寄存器行中的四个排序的板(slab1…slab4)的多板半合并。每个处理器组可以将存储在它们相应排序的板中的数据元素加载到共享存储器1680中。当通过使用这里进一步描述的技术将板加载到共享存储器中时,可以避免存储体冲突。如图21A所示,所有处理器组(即,处理器组1-4)可以逐寄存器行地以降序将存储在它们相应的板中的数据元素添加到共享存储器2080(例如,从左上角开始从左到右)。然后,每个处理器组可以从共享存储器2080将预定义数量的列(诸如四列,如图21A所示)重新加载回它们相应的寄存器行。
如图21B所示,在每个处理器组重新加载它们相应的寄存器行时,每个处理器组(处理器组1处理器组4)可以对相应板(slab1-slab4)中的每列执行双调合并。然后,每个处理器组可以将存储在它们相应的板中的数据元素加载回共享存储器2080中。当通过使用这里进一步描述的技术将板加载到共享存储器中时,可以再次避免存储体冲突。
每个处理器组可以再次从共享存储器1680将预定义数量的行(诸如一行,如图21B所示)重新加载回它们相应的寄存器行。在这点上,如图21B中进一步所示,处理器组的前一半(即,处理器组1和2)可以逐寄存器行地以降序将数据元素分别从共享存储器2080的第一行和第二行加载到它们相应的寄存器行(例如,从左上角开始从左到右),而处理器组的后一半(即,处理器组3和4)可以逐寄存器行地以逆序和升序将数据元素分别从共享存储器2080的第三行和其它行添加到它们相应的寄存器行中(例如,从右下角开始从右到左),其中处理器组的后一半从右到左读取共享存储器。换句话说,处理器组的前一半可以逐寄存器行地以降序将存储在共享存储器的上半部分行中的数据元素加载到板中,而处理器组的后一半可以逐寄存器行地以逆序和升序加载存储在共享存储器的底行中的数据元素的下半部分,以完成多板翻转合并。尽管图21A和21B仅示出了四个处理器组,但是可以使用任何数量的偶数处理器组。在完成板的加载时,每个处理器组可以执行板半合并以对它们相应的板进行排序。
通常,翻转合并后使用半合并。在这点上,翻转合并采用两个排序的跨度,无论它们是行、列、板、多个板、跨步板等,并将它们合并。为了合并它们,它们应该形成一个双调序列。因此,它们在值上必须先增加后减少(反之亦然)。翻转合并将已排序跨度的下半部分进行排序(增加),然后以逆序读取上半部分(减少)。这两个序列组合起来形成一个双调序列,然后可以与一个双调合并网络合并。
在完成板、多板或跨步行的翻转合并时,输出为双调序列。双调序列需要继续被递归合并,直到合并单个列,这指示合并完成。总之,当有比多板合并中可以合并的更多的(跨步的)板时,使用流式半合并。当有多于一个的板要合并(并且可以通过设备上的实施方式“保存”)时,使用多板半合并。板半合并在|ProcessorGroup|的列之间合并。
在一些情况下,板翻转合并和板半合并可以通过开发利用设备混洗操作来利用并行处理设备的能力。混洗操作(也称为置换、向量置换、蝶形或蝶形交换)允许处理器组中的处理器(即,线程束中的通道)彼此交换值。在处理器组中存在对处理器间通信的硬件支持的情况下,可以实施混洗。这样,并行计算设备可以避免将值存储到共享存储器,然后在执行板翻转合并和板半合并时重新加载它们。通常来说,如果处理器组支持混洗操作,则可以对单独的板进行排序,并且在不使用共享存储器的情况下进行翻转或半合并。
例如,图22示出了slabn的板翻转合并混洗,其中处理器组中的相邻处理器比较和交换其寄存器中的数据元素,而不需要对共享存储器进行写入或读取。如这里所述,板翻转合并混洗可以通过执行双调合并来完成,以完成slabn的排序。
图23示出slabn的板半合并混洗,其中处理器组中的相邻处理器比较和交换相同寄存器行中的数据元素,而不需要对共享存储器进行写入或读取。如这里所述,可以通过执行双调合并来完成板半合并混洗,以完成板slabn的排序。
为了避免冲突,可以确定将在合并阶段应用的存储体访问模式并且可以计算将保证不会发生冲突的适当XOR值。在这点上,对于给定的访问模式的集合,需要找到总共的NSK数据元素。可以通过搜索(|ProcessorGroup|/NSK)组合直到找到一个组合来找到合适的XOR值。通过使用散列法,无冲突合并可以在没有处理器组或行的任何附加填充的情况下发生,在合并步骤期间试图最大化可以存储在共享存储器中的数据元素的数量时,这可以是有益的。
作为散列法的替代方法的、避免存储体冲突的另一种技术通过以下来实现:将共享存储器的额外字填充到每个线程束的数据值的末尾,并将额外的数据字填充到每行的线程束值的末尾。合适的填充值的计算可以如下进行:
COLUMN-PAD:1
ROW-PAD:NSK÷(SLABSPERBLOCK÷(|PROCESSORGROUP|÷NSK))
这些计算的填充值允许算法2执行无存储体冲突的合并。
当在合并所有排序的板时,数据元素的排序可以完成。排序的数据元素然后可以经由转置输出,并以线性顺序存储到存储器中,以用于与其它程序或存储装置的进一步交互。这种转置和排序可以由板转置&存储内核来控制。关键改变也可以通过排序和合并步骤进行跟踪。这些关键改变可以报告给相应的处理器,以确保所有处理器都知道特定的数据元素在哪里。这种关键改变可以由报告关键改变内核来控制。
所有上述合并和排序方法可以由一个或多个处理器、计算设备或并行计算设备调用、执行和/或以其它方式控制。在这点上,合并和排序方法中的每一个都可以被实施为由一个或多个计算设备(诸如GPU 170)调用的内核。如上所述,并行处理流水线可以通过定制的应用编程接口(API)来实现和控制,该定制的应用编程接口向数据并行计算设备(诸如图形处理单元(GPU))提供对执行处理的内核程序的访问,该内核程序包括合并和排序内核。在这点上,每个相应的内核可以构成并行处理流水线的一部分,其中每个内核利用标准或定制API和子API来执行数据元素的排序、合并、映射等的所有处理。
图24的流程图2400是可以由诸如GPU 170的一个或多个计算设备执行的上述一些方面的示例流程图。在该示例中,在块2401,一个或多个计算设备可以将数据元素加载到寄存器中,其中每个寄存器与一组并行处理器中的至少一个并行处理器相关联。如块2403所示,对于并行处理器中的每一个,可以对加载到其相关联的寄存器中的数据元素进行降序并行排序。如块2405所示,对于并行处理器中的每一个,排序的数据元素可以与该组中其它处理器的排序的数据元素合并。如块2407所示,合并和排序的数据元素可以被转置和存储。
大多数前述替代示例并不相互排斥,而是可以以各种组合来实施,以实现独特的优势。由于可以利用上述特征的这些和其它变化和组合而不脱离权利要求限定的主题,因此实施例的前述描述应该通过说明的方式而不是通过权利要求限定的主题的方式来进行。作为示例,前述操作不必以上述的精确顺序执行。相反,各种步骤可以以不同的顺序(诸如,相反的)来处理,或者同时处理。除非另有说明,否则步骤也可以省略。此外,这里描述的示例的提供以及措辞为“诸如”、“包括”等的条款不应被解释为将权利要求的主题限制于特定示例;相反,这些示例意图仅示出许多可能实施例中的一个。此外,不同附图中相同的附图标记可以识别相同或相似的元素。
附录A
算法3中使用的SHCB宏
NSKM:=(NSK-1)
NSPB:=(NUM_SLABS_PER_BLOCK)
NSPBM:=(NSPB-1)
LNSK(LVL):=((LVL)/NSK)
LNSKM(LVL):=(LNSK(LVL)-1)
WADJ(WS,N):=((N)+(((N)/WARP_SIZE)*((WS)-WARP_SIZE)))
//
//共享的半清洁块-由翻转清洁块K重复使用
//
SHCB_BASE(LVL,WS,WID,LID):=
(((LNSK(LVL)>=NSPB)?0:((WID/LNSK(LVL))*WADJ(WS,LVL)))+
((LID&(WNSKM&~(__MAX(LVL/(NSPB*NSK),1)-1)))*WADJ(WS,NSPB*NSK)))
//
//如果NSPB大于32,则利用另一WADJ()对其稍作调整.
//
SHCB_OFFSET(LVL,WS,WID,LID):=
(((LNSK(LVL)>NSPB)
((WID&NSKM)+
WADJ(WS,((WID&(~NSKM&NSPBM))*(LNSK(LVL)/WARP_SIZE)))):
(LNSK(LVL)<NSPB)?(WID&LNSKM(LVL)):WID)+
((LID&(WNSKM&(__MAX(LVL/(NSPB*NSK),1)-1)))*NSK))
SHCB(LVL,WS,WID,LID):=(SHCB_BASE(LVL,WS,WID,LID)+SHCB_OFFSET(LVL,WS,WID,LID))
Claims (15)
1.一种用于在数据并行计算设备上并行排序数据的方法,包括:
由一组并行处理器将数据元素加载到寄存器的寄存器行中,其中每个寄存器与并行处理器的组中的至少一个并行处理器相关联;
对于并行处理器中的每一个,以降序对加载到其相关联的寄存器中的数据元素进行并行排序,基于每个处理器能够写入共享存储器的数据元素的最大数量和每个处理器的寄存器的总数,将选择的寄存器行划分并写入共享存储器;
对于并行处理器中的每一个,将所述排序的数据元素与所述组中其它并行处理器的排序的数据元素合并;
其中将数据元素加载到每个处理器的相应寄存器中包括:
基于处理器组中的一个或多个处理器的合并级别,以转置形式加载数据元素的共享的选择的寄存器行的子集,然后使用最优合并网络顺序合并,在合并完成时所合并的数据元素将处于排序的顺序,从而替换共享的选择的寄存器行的子集;以及
由所述并行处理器存储所述合并和排序的数据元素。
2.根据权利要求1所述的方法,其中将所述数据元素加载到寄存器中包括,将所述数据元素同时加载到两个或多个并行处理器的相关联的寄存器中。
3.根据权利要求1所述的方法,其中以降序对所述数据元素进行排序包括,对与相应并行处理器相关联的寄存器中的所有数据元素执行比较和交换操作。
4.根据权利要求1所述的方法,其中将所述排序的数据元素与所述组中其它并行处理器的排序的数据元素合并包括,将每个并行处理器与一组并行处理器中的另一并行处理器配对;
将每个并行处理器的排序的数据元素与其相应配对的并行处理器的排序的数据元素合并,以及
其中合并排序的数据元素还包括,将每对并行处理器的合并的数据元素与其它并行处理器对的数据元素合并。
5.根据权利要求1所述的方法,其中并行处理器的所述组包括第一组并行处理器和第二组并行处理器。
6.根据权利要求5所述的方法,其中将所述排序的数据元素与其它并行处理器的排序的数据元素合并包括,将每个并行处理器与第一、第二组并行处理器中的另一并行处理器配对;以及
将每个并行处理器的排序的数据元素与第一、第二组并行处理器中每一组处理器内其相应配对的并行处理器的排序的数据元素合并。
7.根据权利要求6所述的方法,还包括合并第一、第二组并行处理器的排序的数据元素。
8.一种用于并行排序数据的系统,包括:
一个或多个计算设备;和
存储指令的存储器,所述指令可由一个或多个计算设备执行;
其中指令包括:
将数据元素加载到寄存器的寄存器行中,其中每个寄存器与并行处理器的组中的至少一个并行处理器相关联;
对于并行处理器中的每一个,以降序对加载到其相关联的寄存器中的数据元素进行并行排序,基于每个处理器能够写入共享存储器的数据元素的最大数量和每个处理器的寄存器的总数,将选择的寄存器行划分并写入共享存储器;
对于并行处理器中的每一个,将所述排序的数据元素与所述组中其它并行处理器的排序的数据元素合并;
其中将数据元素加载到每个处理器的相应寄存器中包括:
基于处理器组中的一个或多个处理器的合并级别,以转置形式加载数据元素的共享的选择的寄存器行的子集,然后使用最优合并网络顺序合并,在合并完成时所合并的数据元素将处于排序的顺序,从而替换共享的选择的寄存器行的子集;以及
由所述并行处理器存储所述合并和排序的数据元素。
9.根据权利要求8所述的系统,其中将所述数据元素加载到寄存器中包括,将所述数据元素同时加载到两个或多个并行处理器的相关联的寄存器中。
10.根据权利要求8所述的系统,其中以降序对所述数据元素进行排序包括,对与相应并行处理器相关联的寄存器中的所有数据元素执行比较和交换操作。
11.根据权利要求8所述的系统,其中将所述排序的数据元素与所述组中其它并行处理器的排序的数据元素合并包括,将每个并行处理器与一组并行处理器中的另一并行处理器配对;
将每个并行处理器的排序的数据元素与其相应配对的并行处理器的排序的数据元素合并,以及
其中合并排序的数据元素还包括,将每对并行处理器的合并的数据元素与其它并行处理器对的数据元素合并。
12.根据权利要求8所述的系统,其中并行处理器的所述组包括第一组并行处理器和第二组并行处理器。
13.根据权利要求12所述的系统,其中将排序的数据元素与其它并行处理器的排序的数据元素合并包括,将每个并行处理器与第一、第二组并行处理器中的另一并行处理器配对;
将每个并行处理器的排序的数据元素与第一、第二组并行处理器中每一组并行处理器内其相应配对的并行处理器的排序的数据元素合并,以及
所述系统还包括合并第一、第二组并行处理器的排序的数据元素。
14.一种包括指令的非暂时性计算机可读介质,所述指令在被一个或多个并行处理器执行时,使得所述一个或多个并行处理器执行以下步骤:
将数据元素加载到寄存器的寄存器行中,其中每个寄存器与并行处理器的组中的至少一个并行处理器相关联;
对于并行处理器中的每一个,以降序对加载到其相关联的寄存器中的数据元素进行并行排序,基于每个处理器能够写入共享存储器的数据元素的最大数量和每个处理器的寄存器的总数,将选择的寄存器行划分并写入共享存储器;
对于并行处理器中的每一个,将所述排序的数据元素与所述组中其它并行处理器的排序的数据元素合并;
其中将数据元素加载到每个处理器的相应寄存器中包括:
基于处理器组中的一个或多个处理器的合并级别,以转置形式加载数据元素的共享的选择的寄存器行的子集,然后使用最优合并网络顺序合并,在合并完成时所合并的数据元素将处于排序的顺序,从而替换共享的选择的寄存器行的子集;以及
由所述并行处理器存储所述合并和排序的数据元素。
15.根据权利要求14所述的非暂时性计算机可读介质,其中以降序将所述数据元素加载到寄存器中包括,将所述数据元素同时加载到两个或多个并行处理器的相关联的寄存器中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662421544P | 2016-11-14 | 2016-11-14 | |
US62/421,544 | 2016-11-14 | ||
PCT/US2017/061518 WO2018089993A1 (en) | 2016-11-14 | 2017-11-14 | Sorting for data-parallel computing devices |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109964203A CN109964203A (zh) | 2019-07-02 |
CN109964203B true CN109964203B (zh) | 2023-10-24 |
Family
ID=60655050
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780070349.4A Active CN109964203B (zh) | 2016-11-14 | 2017-11-14 | 数据并行计算设备的排序 |
Country Status (4)
Country | Link |
---|---|
US (2) | US11740868B2 (zh) |
EP (2) | EP3757754B1 (zh) |
CN (1) | CN109964203B (zh) |
WO (1) | WO2018089993A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3814874A1 (en) | 2018-06-27 | 2021-05-05 | Colorado State University Research Foundation | Methods and apparatus for efficiently rendering, managing, recording, and replaying interactive, multiuser, virtual reality experiences |
US10901692B2 (en) * | 2018-07-12 | 2021-01-26 | Texas Instruments Incorporated | Bitonic sorting accelerator |
US11249651B2 (en) * | 2019-10-29 | 2022-02-15 | Samsung Electronics Co., Ltd. | System and method for hierarchical sort acceleration near storage |
CN111722829B (zh) * | 2020-05-28 | 2022-06-14 | 江苏方天电力技术有限公司 | 一种双并发预读的高性能归并排序方法及应用 |
CN112015366B (zh) * | 2020-07-06 | 2021-09-10 | 中科驭数(北京)科技有限公司 | 数据排序方法、数据排序装置及数据库系统 |
CN114968547A (zh) * | 2021-02-25 | 2022-08-30 | 华为技术有限公司 | 一种排序装置及方法 |
US11593106B1 (en) * | 2021-09-24 | 2023-02-28 | Apple Inc. | Circuits and methods for vector sorting in a microprocessor |
CN114546329B (zh) * | 2022-03-01 | 2023-07-18 | 上海壁仞智能科技有限公司 | 用于实现数据奇偶重排的方法、设备和介质 |
US11803509B1 (en) | 2022-05-23 | 2023-10-31 | Apple Inc. | Parallel merge sorter circuit |
CN116361319B (zh) * | 2023-05-17 | 2023-08-29 | 山东浪潮科学研究院有限公司 | 一种数据库查询方法、装置、设备及存储介质 |
CN117519839B (zh) * | 2024-01-05 | 2024-04-16 | 恒生电子股份有限公司 | 数据加载方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104951401A (zh) * | 2014-03-28 | 2015-09-30 | 英特尔公司 | 排序加速处理器、方法、系统和指令 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5671377A (en) * | 1994-07-19 | 1997-09-23 | David Sarnoff Research Center, Inc. | System for supplying streams of data to multiple users by distributing a data stream to multiple processors and enabling each user to manipulate supplied data stream |
US5887183A (en) * | 1995-01-04 | 1999-03-23 | International Business Machines Corporation | Method and system in a data processing system for loading and storing vectors in a plurality of modes |
US6898691B2 (en) * | 2001-06-06 | 2005-05-24 | Intrinsity, Inc. | Rearranging data between vector and matrix forms in a SIMD matrix processor |
JP4477959B2 (ja) * | 2004-07-26 | 2010-06-09 | 独立行政法人理化学研究所 | ブロードキャスト型並列処理のための演算処理装置 |
US20060126726A1 (en) * | 2004-12-10 | 2006-06-15 | Lin Teng C | Digital signal processing structure for decoding multiple video standards |
US8024549B2 (en) * | 2005-03-04 | 2011-09-20 | Mtekvision Co., Ltd. | Two-dimensional processor array of processing elements |
US8074224B1 (en) * | 2005-12-19 | 2011-12-06 | Nvidia Corporation | Managing state information for a multi-threaded processor |
US7489315B1 (en) * | 2006-02-01 | 2009-02-10 | Nvidia Corporation | Pixel stream assembly for raster operations |
US8467249B2 (en) * | 2010-07-06 | 2013-06-18 | Densbits Technologies Ltd. | Systems and methods for storing, retrieving, and adjusting read thresholds in flash memory storage system |
US8264391B2 (en) * | 2010-10-12 | 2012-09-11 | Texas Instruments Incorporated | Area efficient selector circuit |
JP5331846B2 (ja) * | 2011-04-11 | 2013-10-30 | 東芝テック株式会社 | 割付装置及び割付プログラム |
US9654538B1 (en) * | 2013-03-11 | 2017-05-16 | DataTorrent, Inc. | Dynamic partitioning of instances in distributed streaming platform for real-time applications |
CN104182241A (zh) * | 2013-05-24 | 2014-12-03 | 华为终端有限公司 | 一种网页应用程序更新方法及通信设备 |
US9665542B2 (en) * | 2013-09-05 | 2017-05-30 | Texas Instruments Incorporated | Determining median value of an array on vector SIMD architectures |
US20170177358A1 (en) * | 2015-12-20 | 2017-06-22 | Intel Corporation | Instruction and Logic for Getting a Column of Data |
-
2017
- 2017-11-14 CN CN201780070349.4A patent/CN109964203B/zh active Active
- 2017-11-14 US US16/349,348 patent/US11740868B2/en active Active
- 2017-11-14 EP EP20177565.7A patent/EP3757754B1/en active Active
- 2017-11-14 EP EP17812107.5A patent/EP3526665B1/en active Active
- 2017-11-14 WO PCT/US2017/061518 patent/WO2018089993A1/en unknown
-
2023
- 2023-07-13 US US18/221,506 patent/US20230359435A1/en active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104951401A (zh) * | 2014-03-28 | 2015-09-30 | 英特尔公司 | 排序加速处理器、方法、系统和指令 |
Non-Patent Citations (4)
Title |
---|
A hybrid message passing/shared memory parallelization of the adaptive integral method for multi-core clusters;Fangzhou Wei等;《ACM》;20060627;全文 * |
Efficient Implementation of Sorting on Multi-Core SIMD CPU Architecture;Jatin Chhugani 等;《ACM》;20080801;正文第3-4章 * |
Jatin Chhugani 等.Efficient Implementation of Sorting on Multi-Core SIMD CPU Architecture.《ACM》.2008, * |
Register Level Sort Algorithm on Multi-Core SIMD Processors;Tian Xiaochen等;《ACM》;20131117;正文第3章,附图10 * |
Also Published As
Publication number | Publication date |
---|---|
EP3757754B1 (en) | 2023-01-04 |
EP3526665A1 (en) | 2019-08-21 |
CN109964203A (zh) | 2019-07-02 |
US20190347071A1 (en) | 2019-11-14 |
WO2018089993A1 (en) | 2018-05-17 |
EP3757754A1 (en) | 2020-12-30 |
US11740868B2 (en) | 2023-08-29 |
EP3526665B1 (en) | 2020-07-15 |
US20230359435A1 (en) | 2023-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109964203B (zh) | 数据并行计算设备的排序 | |
Hou et al. | Fast segmented sort on gpus | |
You et al. | Parallel spatial query processing on gpus using r-trees | |
Keller et al. | Regular, shape-polymorphic, parallel arrays in Haskell | |
US8400458B2 (en) | Method and system for blocking data on a GPU | |
Schlegel et al. | Fast Sorted-Set Intersection using SIMD Instructions. | |
Agullo et al. | Task‐based FMM for heterogeneous architectures | |
US7979672B2 (en) | Multi-core processors for 3D array transposition by logically retrieving in-place physically transposed sub-array data | |
Sun et al. | Optimizing SpMV for diagonal sparse matrices on GPU | |
Liu | Parallel and scalable sparse basic linear algebra subprograms | |
Buluc et al. | Linear algebraic primitives for parallel computing on large graphs | |
Hou et al. | A framework for the automatic vectorization of parallel sort on x86-based processors | |
Han et al. | Distme: A fast and elastic distributed matrix computation engine using gpus | |
Nonaka et al. | 234Compositor: A flexible parallel image compositing framework for massively parallel visualization environments | |
Xiaochen et al. | Register level sort algorithm on multi-core SIMD processors | |
Kruliš et al. | Employing GPU architectures for permutation-based indexing | |
Nelson et al. | Parallel acceleration of CPU and GPU range queries over large data sets | |
Feng et al. | A segment‐based sparse matrix–vector multiplication on CUDA | |
You et al. | GPU-based spatial indexing and query processing using R-Trees | |
Hou | Exploring performance portability for accelerators via high-level parallel patterns | |
Rajan et al. | Accelerated kerninghan lin algorithm for graph partitioning | |
Oryspayev et al. | Performance analysis of distributed symmetric sparse matrix vector multiplication algorithm for multi‐core architectures | |
McColl | Mathematics, Models and Architectures | |
Ino et al. | A parallel scheme for accelerating parameter sweep applications on a GPU | |
Kasagi et al. | Offline Permutation on the CUDA-enabled GPU |
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 |