CN105404889B - 用于在图形处理单元(gpu)上实现最近邻搜索的方法和装置 - Google Patents

用于在图形处理单元(gpu)上实现最近邻搜索的方法和装置 Download PDF

Info

Publication number
CN105404889B
CN105404889B CN201510429785.9A CN201510429785A CN105404889B CN 105404889 B CN105404889 B CN 105404889B CN 201510429785 A CN201510429785 A CN 201510429785A CN 105404889 B CN105404889 B CN 105404889B
Authority
CN
China
Prior art keywords
tree
data
nearest neighbor
data points
bucket
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
Application number
CN201510429785.9A
Other languages
English (en)
Other versions
CN105404889A (zh
Inventor
A.马内维特奇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN105404889A publication Critical patent/CN105404889A/zh
Application granted granted Critical
Publication of CN105404889B publication Critical patent/CN105404889B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • G06F18/2413Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on distances to training or reference patterns
    • G06F18/24147Distances to closest patterns, e.g. nearest neighbour classification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Image Generation (AREA)

Abstract

描述了用于在图形处理单元上实现最近邻搜索的装置和方法。例如,装置的一个实施例包括:主机处理器;以及图形处理器单元(GPU),用以响应于来自主机处理器的信号而执行最近邻(NN)树构建操作和NN树搜索操作;NN树构建操作包括划分数据点的第一集合以定义每个树节点以形成多个桶,每个桶包括数据点的第一集合中的至少一个,桶的数目将基于阈值而被限制,从而导致具有多个数据点的至少一些桶;以及NN树搜索操作包括通过比较输入数据点的第二集合中的每一个与树中的数据点以标识桶并且然后比较第二数据点之一与桶中的数据点以标识桶中的最近邻数据点来遍历树。

Description

用于在图形处理单元(GPU)上实现最近邻搜索的方法和装置
技术领域
本发明一般涉及计算机处理器的领域。更具体地,本发明涉及用于在图形处理单元(GPU)上实现最近邻搜索的方法和装置。
背景技术
最近邻(NN)搜索属于基于输入与所存储的样本的相似度的分类方法的一族。NN搜索是非参数的分类器,其将分类决策基于数据并且不需要分类器参数训练的步骤。最常见的非参数方法基于NN距离估计。
NN搜索对于计算机科学的若干领域(包括模式识别、数据挖掘、多媒体数据中的搜索和计算统计)有显著重要性,并且尤其是对于增强现实和感知计算的领域有显著重要性。许多计算机视觉任务解决高维空间(多于8)中的NN搜索问题,其中它是最处理器密集、耗时的组件。对于高维空间,不存在任何已知的比简单线性搜索更加高效的确切NN算法,所述简单线性搜索计算从查询点到集合中每个点的距离并且标识具有最小距离的点。由于线性搜索对于许多应用而言都是过于成本高的,这已经产生了对于执行近似最近邻(ANN)搜索的算法的兴趣。
ANN搜索算法以返回确切最近邻结果为代价而按数量级改进搜索速度,而仍提供接近最优的准确性。最近的研究证明了基于多重随机化K-D树的ANN在许多多维数据集上提供最佳性能。参见例如Marius Muja和David G.Lowe的Fast Approximate NearestNeighbors with Automatic Algorithm Configuration (2009)。
KD树是由Jon Bentley于1975年发明的(传统KD树)、于1998年通过将随机项添加到树构建过程而被修改(随机化的KD树)的数据结构,并且它和它的变型仍然是用于在多维空间中搜索的最流行的数据结构。它在低维度中是高效的,但是在高维空间中,其性能迅速降级。
附图说明
从结合以下附图的以下详细描述中可以获得对本发明的更好的理解,在附图中:
图1是具有处理器的计算机系统的实施例的框图,所述处理器具有一个或多个处理器核以及图形处理器;
图2是处理器的一个实施例的框图,所述处理器具有一个或多个处理器核、集成存储器控制器和集成图形处理器;
图3是图形处理器的一个实施例的框图,所述图形处理器可以是离散图形处理单元,或者可以是与多个处理核集成的图形处理器;
图4是用于图形处理器的图形处理引擎的实施例的框图;
图5是图形处理器的另一实施例的框图;
图6是包括处理元件的阵列的线程执行逻辑的框图;
图7图示了根据实施例的图形处理器执行单元指令格式;
图8是图形处理器的另一实施例的框图,所述图形处理器包括图形流水线(pipeline)、媒体流水线、显示引擎、线程执行逻辑和渲染输出流水线;
图9A是图示了根据实施例的图形处理器命令格式的框图;
图9B是图示了根据实施例的图形处理器命令序列的框图;
图10图示了根据实施例的用于数据处理系统的示例性图形软件架构;
图11图示了用于使用随机化K维(KD)树来执行最近邻搜索的现有技术技法;
图12A图示了用于在图形处理单元(GPU)上执行最近邻搜索的本发明的一个实施例;
图12B图示了用于在图形处理单元(GPU)上执行最近邻搜索的本发明的另一实施例;
图13图示了其中组合了格室(cell)/桶(bucket)的本发明的一个实施例;
图14图示了其中组合了格室/桶并且实现了模糊桶的本发明的一个实施例;
图15-18图示了本发明的不同实施例的实验结果;以及
图19图示了根据本发明的一个实施例的方法。
具体实施方式
在以下描述中,出于解释的目的,阐述了众多具体细节以便提供对下述本发明的实施例的透彻理解。然而,对本领域技术人员而言将是显而易见的是可以在没有这些具体细节中的某些的情况下实践本发明的实施例。在其它实例中,众所周知的结构和设备以框图形式示出以避免使本发明的实施例的底层原理模糊。
示例性图形处理器架构和数据类型
系统概述
图1是根据实施例的数据处理系统100的框图。数据处理系统100包括一个或多个处理器102以及一个或多个图形处理器108,并且可以是单个处理器台式系统、多处理器工作站系统、或者具有大量处理器102或处理器核107的服务器系统。在一个实施例中,数据处理器系统100是用于在移动、手持式或嵌入式设备中使用的芯片上系统(SoC)集成电路。
数据处理系统100的实施例可以包括基于服务器的游戏平台、游戏控制台或者被并入其内,所述游戏控制台包括游戏和媒体控制台、移动游戏控制台、手持式游戏控制台或者在线游戏控制台。在一些实施例中,数据处理系统100是移动电话、智能电话、平板计算设备或移动因特网设备。数据处理系统100还可以包括可穿戴设备、与可穿戴设备耦合或者被集成在可穿戴设备内,所述可穿戴设备诸如智能手表可穿戴设备、智能眼镜设备、增强现实设备或虚拟现实设备。在一些实施例中,数据处理系统100是电视或机顶盒设备,其具有一个或多个处理器102以及由一个或多个图形处理器108生成的图形接口。
在一些实施例中,一个或多个处理器102均包括一个或多个处理器核107以处理指令,所述指令当被运行时执行用于系统和用户软件的操作。在一些实施例中,一个或多个处理器核107中的每一个都被配置成处理特定的指令集109。在一些实施例中,指令集109可以促进复杂指令集计算(CISC)、精简指令集计算(RISC)或经由超长指令字(VLIW)的计算。多个处理器核107可以均处理不同的指令集109,所述指令集可以包括用来促进其它指令集的仿真的指令。处理器核107还可以包括其它处理设备,这样的数字信号处理器(DSP)。
在一些实施例中,处理器102包括高速缓存存储器104。取决于架构,处理器102可以具有单个内部高速缓存或多层级的内部高速缓存。在一些实施例中,高速缓存存储器在处理器102的各种组件之中共享。在一些实施例中,处理器102还使用外部高速缓存(例如级3(L3)高速缓存或末级高速缓存(LLC))(未示出),所述外部高速缓存可以通过使用已知的高速缓存相关性(coherency)技术而在处理器核107之中共享。在处理器102中附加地包括寄存器文件106,其可以包括不同类型的寄存器以用于存储不同类型的数据(例如,整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器)。一些寄存器可以是通用寄存器,而其它寄存器可以特定于处理器102的设计。
在一些实施例中,处理器102耦合到用来在处理器102和系统100中的其它组件之间传输数据信号的处理器总线110。系统100使用示例性“中心(hub)”系统架构,包括存储器控制器中心116和输入输出(I/O)控制器中心130。存储器控制器中心116促进在存储器设备和系统100的其它组件之间的通信,而I/O控制器中心(ICH)130经由本地I/O总线而提供到I/O设备的连接。
存储器设备120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪速存储器设备、或者具有合适的性能以充当过程存储器的某种其它存储器设备。存储器120可以存储数据122和指令121以供当处理器102执行过程时使用。存储器控制器中心116还与可选的外部图形处理器112耦合,所述可选的外部图形处理器112可以与处理器120中的一个或多个图形处理器108通信以执行图形和媒体操作。
在一些实施例中,ICH 130使得外围设备能够经由高速I/O总线而连接到存储器120和处理器102。I/O外围设备包括音频控制器146、固件接口128、无线收发器126(例如Wi-Fi、蓝牙)、数据存储设备124(例如硬盘驱动装置、闪速存储器等等)、以及用于将传统(legacy)(例如个人系统2(PS/2))设备耦合到系统的传统I/O控制器。一个或多个通用串行总线(USB)控制器142连接输入设备,诸如键盘和鼠标144组合。网络控制器134也耦合到ICH130。在一些实施例中,高性能网络控制器(未示出)耦合到处理器总线110。
图2是处理器200的实施例的框图,所述处理器200具有一个或多个处理器核202A-N、集成存储器控制器214和集成图形处理器208。图2的具有与本文中任何其它图的元件相同的附图标记(或名称)的那些元件可以以类似于本文中别处所述的方式的任何方式而操作或运转,但是不限于这样。处理器200可以包括附加核,所述附加核直到并且包括由虚线框所表示的附加核202N。核202A-N中的每一个包括一个或多个内部高速缓存单元204A-N。在一些实施例中,每个核还能够访问一个或多个共享高速缓存单元206。
内部高速缓存单元204A-N和共享高速缓存单元206表示处理器200内的高速缓存存储器层次。高速缓存存储器层次可以包括每个核内的至少一个层级的指令和数据高速缓存以及一个或多个层级的共享中级高速缓存,诸如级2(L2)、级3(L3)、级4(L4)或其它层级的高速缓存,其中在外部存储器之前的最高层级的高速缓存被分类为LLC。在一些实施例中,高速缓存相关性逻辑维持在各种高速缓存单元206和204A-N之间的相关性。
在一些实施例中,处理器200还可以包括一个或多个总线控制器单元216的集合和系统代理210。一个或多个总线控制器单元管理外围总线的集合,所述外围总线诸如一个或多个外围组件互连总线(例如,PCI,快速PCI)。系统代理210提供用于各种处理器组件的管理功能。在一些实施例中,系统代理210包括用来管理对各种外部存储器设备(未示出)的访问的一个或多个集成存储器控制器214。
在一些实施例中,核202A-N中的一个或多个包括对于同时多线程的支持。在这样的实施例中,系统代理210包括用于在多线程处理期间协调和操作核202A-N的组件。系统代理210可以附加地包括功率控制单元(PCU),其包括用来调节核202A-N和图形处理器208的功率状态的逻辑和组件。
在一些实施例中,处理器200附加地包括图形处理器208以执行图形处理操作。在一些实施例中,图形处理器208与共享高速缓存单元206的集合以及系统代理单元210耦合,所述系统代理单元210包括一个或多个集成存储器控制器214。在一些实施例中,显示控制器211与图形处理器208耦合以将图形处理器输出驱动到一个或多个耦合的显示器。在一些实施例中,显示控制器211可以是经由至少一个互连而与图形处理器耦合的单独的模块,或者可以被集成在图形处理器208或系统代理210内。
在一些实施例中,基于环的互连单元212用于耦合处理器200的内部组件。然而,可以使用可替换的互连单元,诸如点对点互连、切换的互连或其它技术,包括本领域中众所周知的技术。在一些实施例中,图形处理器208经由I/O链路213而与环式互连212耦合。
示例性I/O链路213表示多种I/O互连中的至少一个,包括封装上I/O互连,其促进在各种处理器组件和高性能嵌入式存储器模块218(诸如eDRAM模块)之间的通信。在一些实施例中,核202-N和图形处理器208中的每一个使用嵌入式存储器模块218作为共享的末级高速缓存。
在一些实施例中,核202A-N是执行相同的指令集架构的同构核。在另一实施例中,核202A-N在指令集架构(ISA)方面是异构的,其中核202A-N中的一个或多个执行第一指令集,而其它核中的至少一个执行第一指令集的子集或者不同的指令集。
在一些实施例中,处理器200是一个或多个衬底的一部分,或者被实现在一个或多个衬底上,通过使用多种过程技术中的任一个,例如,互补金属氧化物半导体(CMOS)、双极接合/互补金属氧化物半导体(BiCMOS)或N型金属氧化物半导体逻辑(NMOS)。另外,处理器200可以实现在一个或多个芯片上或者被实现为SoC集成电路,所述SoC集成电路除了其它组件之外还具有所图示的组件。
图3是图形处理器300的框图,所述图形处理器300可以是离散的图形处理单元,或者可以是与多个处理核集成的图形处理器。在一些实施例中,图形处理器经由到图形处理器上的寄存器的存储器映射的I/O接口并且与置于处理器存储器中的命令进行通信。在一些实施例中,图形处理器300包括用来访问存储器的存储器接口314。存储器接口314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享的外部高速缓存和/或到系统存储器的接口。
在一些实施例中,图形处理器300还包括用来将显示输出数据驱动到显示设备320的显示控制器302。显示控制器302包括硬件以用于:用于显示的一个或多个叠覆平面以及多层视频或用户接口元素的复合。在一些实施例中,图形处理器300包括视频编解码器引擎306以向一个或多个媒体编码格式、自一个或多个媒体编码格式或在一个或多个媒体编码格式之间对媒体进行编码、解码或转码,所述媒体编码格式包括但不限于移动图像专家组(MPEG)格式(诸如MPEG-2)、高级视频编码(AVC)格式(诸如H.264/MPEG-4 AVC)、以及电影和电视工程师协会(SMPTE)421M/VC-1,以及联合图像专家组(JPEG)格式(诸如JPEG和运动JPEG(MJPEG)格式)。
在一些实施例中,图形处理器300包括块图像传输(BLIT)引擎304以执行二维(2D)光栅化器(rasterizer)操作,包括例如位边界块传输。然而,在一个实施例中,通过使用图形处理引擎(GPE)310的一个或多个组件来执行2D图形操作。在一些实施例中,图形处理引擎310是用于执行图形操作(包括三维(3D)图形操作和媒体操作)的计算引擎。
在一些实施例中,GPE 310包括用于执行3D操作的3D流水线312,所述3D操作诸如通过使用作用于3D基元(primitive)形状(例如矩形、三角形等等)的处理功能来渲染三维图像和场景。3D流水线312包括执行元件内的各种任务和/或产生(spawn)去往3D/媒体子系统315的执行线程的可编程和固定功能元件。虽然3D流水线312可以用于执行媒体操作,但是GPE 310的实施例还包括特别地用于执行诸如视频后处理和图像增强之类的媒体操作的媒体流水线316。
在一些实施例中,媒体流水线316包括执行一个或多个专门的媒体操作的固定功能或可编程逻辑单元,诸如视频解码加速、视频去交错(de-interlace)和视频编码加速,其代替或代表视频编解码引擎306。在一些实施例中,媒体流水线316附加地包括用来产生线程以供在3D/媒体子系统315上执行的线程产生单元。所产生的线程在被包括在3D/媒体子系统315中的一个或多个图形执行单元上执行用于媒体操作的计算。
在一些实施例中,3D/媒体子系统315包括用于执行由3D流水线312和媒体流水线316产生的线程的逻辑。在一个实施例中,流水线向3D/媒体子系统315发送线程执行请求,所述3D/媒体子系统包括线程分派逻辑以用于向可用的线程执行资源仲裁和分派各种请求。执行资源包括图形执行单元的阵列以处理3D和媒体线程。在一些实施例中,3D/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一些实施例中,子系统还包括共享的存储器,包括寄存器和可寻址存储器,以在线程之间共享数据以及存储输出数据。
3D媒体处理
图4是根据一些实施例的图形处理器的图形处理引擎410的框图。在一个实施例中,GPE 410是图3中所示的GPE 310的一个版本。图4的具有与本文中的任何其它图的元件相同的附图标记(或名称)的元件可以以类似于本文中别处所述的方式的任何方式而操作或运转,但是不限于这样。
在一些实施例中,GPE 410与命令流化器(streamer)403耦合,所述命令流化器向GPE 3D和媒体流水线412、416提供命令流。在一些实施例中,命令流化器403耦合到存储器,所述存储器可以是系统存储器,或者内部高速缓存存储器和共享高速缓存存储器中的一个或多个。在一些实施例中,命令流化器403从存储器接收命令并且向3D流水线412和/或媒体流水线416发送命令。3D和媒体流水线通过经由相应流水线内的逻辑而执行操作或通过向执行单元阵列414分派一个或多个执行线程来处理命令。在一些实施例中,执行单元阵列414是可缩放的,以使得阵列包括基于GPE 410的目标功率和性能水平的可变数目的执行单元。
在一些实施例中,采样引擎430与存储器(例如高速缓存存储器或系统存储器)以及执行单元阵列414耦合。在一些实施例中,采样引擎430提供用于执行单元阵列414的存储器访问机制,其允许执行阵列414从存储器读取图形和媒体数据。在一些实施例中,采样引擎430包括用来执行用于媒体的专门的图像采样操作的逻辑。
在一些实施例中,采样引擎430中的专门的媒体采样逻辑包括去噪声/去交错模块432、运动估计模块434以及图像缩放和滤波模块436。在一些实施例中,去噪声/去交错模块432包括用来在经解码的视频数据上执行去噪声或去交错算法中的一个或多个的逻辑。去交错逻辑将经交错的视频内容的交替场(field)组合成视频的单个帧。去噪声逻辑从视频和图像数据中减少或移除数据噪声。在一些实施例中,去噪声逻辑和去交错逻辑是运动自适应的并且基于在视频数据中检测到的运动的量而使用空间或时间滤波。在一些实施例中,去噪声/去交错模块432包括专用的运动检测逻辑(例如,在运动估计引擎434内)。
在一些实施例中,运动估计引擎434通过在视频数据上执行视频加速功能(诸如运动矢量估计和预测)而提供用于视频操作的硬件加速。运动估计引擎确定描述在相继视频帧之间的图像数据的变换的运动矢量。在一些实施例中,图形处理器媒体编解码器使用视频运动估计引擎434来以宏块水平在视频上执行操作,所述宏块水平以其他方式可能太计算密集而不能用通用处理器来执行。在一些实施例中,运动估计引擎434通常可用于图形处理器组件以帮助对于视频数据内的运动的方向或幅度敏感或自适应的视频解码和处理功能。
在一些实施例中,图像缩放和滤波模块436执行图像处理操作以增强所生成的图像和视频的视觉质量。在一些实施例中,缩放和滤波模块436在向执行单元阵列414提供数据之前在采样操作期间处理图像和视频数据。
在一些实施例中,GPE 410包括提供附加机制以用于图形子系统来访问存储器的数据端口444。在一些实施例中,数据端口444促进用于包括渲染目标写入、常量缓冲器读取、暂用(scratch)存储器空间读取/写入和媒体表面访问在内的操作的存储器访问。在一些实施例中,数据端口444包括用于对存储器的高速缓存访问的高速缓存存储器空间。高速缓存存储器可以是单个数据高速缓存或者被分离成用于经由数据端口而访问存储器的多个子系统的多个高速缓存(例如渲染缓冲器高速缓存、常量缓冲器高速缓存等等)。在一些实施例中,在执行单元阵列414中的执行单元上执行的线程通过经由耦合GPE 410的子系统中的每一个的数据分布互连而交换消息来与数据端口通信。
执行单元
图5是图形处理器500的另一实施例的框图。图5的具有与本文中任何其它图的元件相同的附图标记(或名称)的元件可以以类似于本文中别处所述的方式的任何方式而操作或运转,但是不限于这样。
在一些实施例中,图形处理器500包括环式互连502、流水线前端504、媒体引擎537和图形核580A-N。在一些实施例中,环式互连502将图形处理器耦合到其它处理单元,包括其它图形处理器或者一个或多个通用处理器核。在一些实施例中,图形处理器是多核处理系统内集成的许多处理器中的一个。
在一些实施例中,图形处理器500经由环式互连502而接收批量命令。传入的命令由流水线前端504中的命令流化器503解释。在一些实施例中,图形处理器500包括可缩放的执行逻辑以经由(一个或多个)图形核508A-N而执行3D几何处理和媒体处理。对于3D几何处理命令,命令流化器503将命令供应到几何流水线536。对于至少一些媒体处理命令,命令流化器503将命令供应到与媒体引擎537耦合的视频前端534。在一些实施例中,媒体引擎537包括用于视频和图像后处理的视频质量引擎(VQE)530和用以提供硬件加速的媒体数据编码和解码的多格式编码/解码(MFX)533引擎。在一些实施例中,几何流水线536和媒体引擎537均生成用于由至少一个图形核580A所提供的线程执行资源的执行线程。
在一些实施例中,图形处理器500包括以可缩放的线程执行资源为特征的模块化的核580A-N(有时称为核切片(slice)),其均具有多个子核550A-N、560A-N(有时称为核的子切片)。在一些实施例中,图形处理器500可以具有任何数目的图形核580A到580N。在一些实施例中,图形处理器500包括图形核580A,所述图形核580A具有至少第一子核550A和第二核的子核560A。在其它实施例中,图形处理器是具有单个子核(例如550A)的低功率处理器。在一些实施例中,图形处理器500包括多个图形核580A-N,所述图形核580A-N均包括第一子核550A-N的集合和第二子核560A-N的集合。第一子核550A-N的集合中的每个子核至少包括媒体/纹理(texture)采样器554A-N和执行单元552A-N的第一集合。第二子核560A-N的集合中的每个子核至少包括采样器564A-N和执行单元562A-N的第二集合。在一些实施例中,每个子核550A-N、560A-N共享着共享资源570A-N的集合。在一些实施例中,共享的资源包括共享的高速缓存存储器和像素操作逻辑。在图形处理器的各种实施例中还可以包括其它共享的资源。
图6图示了线程执行逻辑600,所述线程执行逻辑600包括在GPE的一些实施例中被采用的处理元件的阵列。图6的具有与本文中任何其它图的元件相同的附图标记(或名称)的元件可以以类似于本文中别处所述的方式的任何方式而操作或运转,但是不限于这样。
在一些实施例中,线程执行逻辑600包括像素着色器(shader)602、线程分派器604、指令高速缓存606、包括多个执行单元608A-N的可缩放执行单元阵列、采样器610、数据高速缓存612和数据端口614。在一个实施例中,所包括的组件经由链接到每一个组件的互连构造(fabric)而互连。在一些实施例中,线程执行逻辑600包括通过指令高速缓存606、数据端口614、采样器610和执行单元阵列608A-N中的一个或多个而到诸如系统存储器或高速缓存存储器之类的存储器的一个或多个连接。在一些实施例中,每个执行单元(例如608A)是能够执行多个同时线程和针对每个线程而并行地处理多个数据元素的单独的矢量处理器。在一些实施例中,执行单元阵列608A-N包括任何数目的单独的执行单元。
在一些实施例中,执行单元阵列608A-N主要用于执行“着色器”程序。在一些实施例中,阵列608A-N中的执行单元执行指令集,所述指令集包括对于许多标准3D图形着色器指令的原生支持,以使得来自图形库(例如直接3D(Direct 3D)和OpenGL)的着色器程序以最小的转化被执行。执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、片段着色器)和通用处理(例如,计算和媒体着色器)。
执行单元阵列608A-N中的每个执行单元在数据元素的阵列上进行操作。数据元素的数目是“执行大小”或者用于指令的通道的数目。执行通道是用于数据元素访问、掩蔽(mask)、和指令内的流程控制的执行的逻辑单元。通道的数目可以独立于用于特定图形处理器的物理算术逻辑单元(ALU)或浮点单元(FPU)的数目。在一些实施例中,执行单元608A-N支持整数和浮点数据类型。
执行单元指令集包括单指令多数据(SIMD)指令。各种数据元素可以作为封装的数据类型而存储在寄存器中并且执行单元将基于元素的数据大小而处理各种元素。例如,当在256位宽矢量上操作时,矢量的256位被存储在寄存器中并且执行单元在作为四个单独的64位封装的数据元素(四字(QW)大小数据元素)、八个单独的32位封装的数据元素(双字(DW)大小数据元素)、十六个单独的16位封装的数据元素(字(W)大小数据元素)或三十二个单独的8位数据元素(字节(B)大小数据元素)的矢量上进行操作。然而,不同的矢量宽度和寄存器大小是可能的。
一个或多个内部指令高速缓存(例如606)被包括在线程执行逻辑600中以对用于执行单元的线程指令进行高速缓存。在一些实施例中,一个或多个数据高速缓存(例如612)被包括以在线程执行期间对线程数据进行高速缓存。在一些实施例中,采样器610被包括以提供用于3D操作的纹理采样以及用于媒体操作的媒体采样。在一些实施例中,采样器610包括专门的纹理或媒体采样功能以在向执行单元提供经采样的数据之前在采样过程期间处理纹理或媒体数据。
在执行期间,图形和媒体流水线经由线程产生和分派逻辑而向线程执行逻辑600发送线程发起请求。在一些实施例中,线程执行逻辑600包括本地线程分派器604,其对来自图形和媒体流水线的线程发起请求进行仲裁并且在一个或多个执行单元608A-N上实例化所请求的线程。例如,几何流水线(例如,图5的536)将顶点处理、镶嵌(tessellation)或几何处理线程分派到线程执行逻辑600(图6)。在一些实施例中,线程分派器604还可以处理来自执行的着色器程序的运行时线程产生请求。
一旦一组几何对象已经被处理并且光栅化成像素数据,像素着色器602就被调用以进一步计算输出信息并且使结果被写到输出表面(例如颜色缓冲器、深度缓冲器、模版缓冲器等等)。在一些实施例中,像素着色器602计算要跨光栅化的对象而被内插的各种顶点属性的值。在一些实施例中,像素着色器602然后执行API供应的像素着色器程序。为了执行像素着色器程序,像素着色器602经由线程分派器604而将线程分派到执行单元(例如608A)。在一些实施例中,像素着色器602使用采样器610中的纹理采样逻辑来访问被存储在存储器中的纹理图中的纹理数据。在纹理数据和输入几何数据上的算术操作计算针对每个几何片段的像素颜色数据,或者从进一步的处理中丢弃一个或多个像素。
在一些实施例中,数据端口614提供存储器访问机制以用于线程执行逻辑600将经处理的数据输出到存储器以供在图形处理器输出流水线上的处理。在一些实施例中,数据端口614包括或耦合到一个或多个高速缓存存储器(例如数据高速缓存612)以对数据进行高速缓存以供经由数据端口的存储器访问。
图7是图示了根据一些实施例的图形处理器指令格式700的框图。在一个或多个实施例中,图形处理器执行单元支持具有以多种格式的指令的指令集。实线框图示了通常被包括在执行单元指令中的组件,而虚线包括可选的或者仅被包括在指令的子集中的组件。在一些实施例中,所描述和图示的指令格式700是宏指令,因为它们是被供应到执行单元的指令,与一旦指令被处理就从指令解码得到的微操作相对。
在一些实施例中,图形处理器执行单元原生地支持以128位格式710的指令。64位紧凑指令格式730基于所选的指令、指令选项和操作数的数目而可用于一些指令。原生128位格式710提供对所有指令选项的访问,而一些选项和操作在64位格式730中被限制。在64位格式730中可用的原生指令按实施例而变化。在一些实施例中,通过使用索引字段713中的索引值的集合而部分地使指令紧凑。指令单元硬件基于索引值而引用紧凑表的集合并且使用紧凑表输出以重构以128位格式710的原生指令。
对于每个格式,指令操作码712定义执行单元要履行的操作。执行单元跨每个操作数的多个数据元素而并行地执行每个指令。例如,响应于加法指令,执行单元跨表示纹理元素或图片元素的每个颜色通道而执行同时的加法操作。默认地,执行单元跨操作数的所有数据通道而执行每个指令。在一些实施例中,指令控制字段712启用在某些执行选项上的控制,诸如通道选择(例如预测)和数据通道排序(例如重排(swizzle))。对于128位指令710,执行大小字段716限制将被并行执行的数据通道的数目。在一些实施例中,执行大小字段716不可用于在64位紧凑指令格式730中使用。
一些执行单元指令具有多达三个操作数,包括两个源操作数src0 722、src1 722和一个目的地718。在一些实施例中,执行单元支持双目的地指令,其中目的地之一被隐含。数据操纵指令可以具有第三源操作数(例如SRC2 724),其中指令操作码712确定源操作数的数目。指令的最后的源操作数可以是随指令传递的立即(例如硬编码的)值。
在一些实施例中,128位指令格式710包括访问/地址模式信息726,所述访问/地址模式信息指定例如使用直接的寄存器寻址模式还是间接的寄存器寻址模式。当使用直接的寄存器寻址模式时,一个或多个操作数的寄存器地址由指令710中的位直接提供。当使用间接的寄存器寻址模式时,一个或多个操作数的寄存器地址可以基于指令中指定地址寄存器值模式和/或地址即时字段的字段726而被计算。在一个实施例中,访问/地址模式信息726可以确定操作数模式以定义用于指令的数据访问对准。例如,当在第一模式中时,指令710可以使用字节对准的寻址用于源和目的地操作数,并且当在第二模式中时,指令710可以使用16字节对准的访问模式和1字节对准的寻址用于所有的源和目的地操作数。访问模式,其中访问模式的字节对准确定指令操作数的访问对准。
在一些实施例中,基于操作码位字段而将指令分组以简化操作码解码740。对于8位操作码,位4、5和6允许执行单元确定操作码的类型。所示的精确操作码分组仅仅是示例。在一些实施例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,移动(mov)、比较(cmp))。在一些实施例中,移动和逻辑组742共享五个最高有效位(MSB),其中移动(mov)指令是以0000xxxxb(例如0x0x)的形式并且逻辑指令是以0001xxxb(例如0x01)的形式。流程控制指令组744(例如,调用,跳转(jmp))包括以0010xxxxb(例如0x20)的形式的指令。杂项指令组746包括指令的混合,包括以0011xxxxb(例如0x30)形式的同步指令(例如,等待、发送)。并行数学指令组748包括以0100xxxxb(例如0x40)形式的分量方面的算术指令(例如,加法、乘法(mul))。并行数学组748跨数据通道而并行地执行算术操作。矢量数学组750包括以0101xxxxb(例如0x50)形式的算术指令(例如dp4)。矢量数学组在矢量操作数上执行诸如点积计算的之类的算术。
图形流水线
图8是图形处理器800的另一实施例的框图。图8的具有与本文中任何其它图的元件相同的附图标记(或名称)的元件可以以类似于本文中别处所述的方式的任何方式而操作或运转,但是不限于这样。
在一些实施例中,图形处理器800包括图形流水线820、媒体流水线830、显示引擎840、线程执行逻辑850、以及渲染输出流水线870。在一些实施例中,图形处理器800是包括一个或多个通用处理核的多核处理系统内的图形处理器。图形处理器通过到一个或多个控制寄存器(未示出)的寄存器写入或通过经由环式互连802被发布到图形处理器800的命令而被控制。在一些实施例中,环式互连802将图形处理器800耦合到其它处理组件,诸如其它图形处理器或通用处理器。来自环式互连802的命令由命令流化器803解释,所述命令流化器将指令供应到图形流水线820或媒体流水线830的单独组件。
在一些实施例中,命令流化器802引导顶点获取器805的操作,所述顶点获取器805从存储器读取顶点数据并且执行由命令流化器803提供的顶点处理命令。在一些实施例中,顶点获取器805向顶点着色器807提供顶点数据,所述顶点着色器807向每个顶点执行坐标空间变换和照明(lighting)操作。在一些实施例中,顶点获取器805和顶点着色器807通过经由线程分派器831将执行线程分派到执行单元852A、852B而执行顶点处理指令。
在一些实施例中,执行单元852A、852B是具有用于执行图形和媒体操作的指令集的矢量处理器的阵列。在一些实施例中,执行单元852A、852B具有附连的L1高速缓存851,所述L1高速缓存851特定于每个阵列或者在阵列之间共享。高速缓存可以被配置为数据高速缓存、指令高速缓存、或被分区以在不同的分区中包含数据和指令的单个高速缓存。
在一些实施例中,图形流水线820包括镶嵌组件以执行3D对象的硬件加速的镶嵌。在一些实施例中,可编程外壳(hull)着色器811配置镶嵌操作。可编程域着色器817提供镶嵌输出的后端评估。镶嵌器813在外壳着色器811的指导下操作并且包含专用逻辑以基于作为输入被提供到图形流水线820的粗略几何模型而生成详细几何对象的集合。在一些实施例中,如果未使用镶嵌,则镶嵌组件811、813、817可以被绕过。
在一些实施例中,完整的几何对象可以由几何着色器819经由被分派到执行单元852A、852B的一个或多个线程而被处理,或者可以直接进行到裁剪器829。在一些实施例中,几何着色器在整个几何对象上操作,而不是如在图形流水线的之前的阶段中那样在顶点或顶点的贴片(patch)上操作。如果镶嵌被禁用,则几何着色器819从顶点着色器807接收输入。在一些实施例中,几何着色器819可被几何着色器程序编程以执行几何镶嵌,如果镶嵌单元被禁用的话。
在光栅化之前,裁剪器829处理顶点数据。裁剪器829可以是固定功能的裁剪器或可编程的裁剪器,其具有裁剪和几何着色器功能。在一些实施例中,渲染输出流水线870中的光栅化器873分派像素着色器以将几何对象转换成其按像素的表示。在一些实施例中,像素着色器逻辑被包括在线程执行逻辑850中。在一些实施例中,应用可以绕过光栅化器873并且经由流出单元823而访问未经光栅化的顶点数据。
图形处理器800具有互连总线、互连构造或允许在处理器的主要组件之中传递的数据和消息的某种其它互连机制。在一些实施例中,执行单元852A、852B和相关联的(一个或多个)高速缓存851、纹理和媒体采样器854、和纹理/采样器高速缓存858经由数据端口856而互连以执行存储器访问以及与处理器的渲染输出流水线组件通信。在一些实施例中,采样器854、高速缓存851、858和执行单元852A、852B均具有单独的存储器访问路径。
在一些实施例中,渲染输出流水线870包含光栅化器和深度测试组件873,其将基于顶点的对象转换成相关联的基于像素的表示。在一些实施例中,光栅化器逻辑包括窗口化器(windower)/掩蔽器单元以执行固定功能的三角和线光栅化。相关联的渲染和深度缓冲器高速缓存878、879在一些实施例中也是可用的。像素操作组件877在数据上执行基于像素的操作,尽管在一些实例中,与2D操作相关联的像素操作(例如,具有混合的位块图像传输)由2D引擎841执行,或者在显示时间由显示控制器843使用叠覆显示平面来代替。在一些实施例中,共享的L3高速缓存875可用于所有图形组件,在不使用主系统存储器的情况下允许数据的共享。
在一些实施例中,图形处理器媒体流水线830包括媒体引擎837和视频前端834。在一些实施例中,视频前端834从命令流化器803接收流水线命令。在一些实施例中,媒体流水线830包括单独的命令流化器。在一些实施例中,视频前端834在向媒体引擎837发送命令之前处理媒体命令。在一些实施例中,媒体引擎337包括线程产生功能以产生线程以供经由线程分派器831而分派到线程执行逻辑850。
在一些实施例中,图形处理器800包括显示引擎840。在一些实施例中,显示引擎840在处理器800外部并且经由环式互连802或某种其它互连总线或构造而与图形处理器耦合。在一些实施例中,显示引擎840包括2D引擎841和显示控制器843。在一些实施例中,显示引擎840包含能够独立于3D流水线而操作的专用逻辑。在一些实施例中,显示控制器843与显示设备(未示出)耦合,所述显示设备可以是系统集成的显示设备,如在膝上型计算机中,或者可以是经由显示设备连接器而附连的外部显示设备。
在一些实施例中,图形流水线820和媒体流水线830可配置成基于多个图形和媒体编程接口而执行操作并且不特定于任何一个应用编程接口(API)。在一些实施例中,用于图形处理器的驱动器软件将特定于特定的图形或媒体库的API调用转化成可以由图形处理器处理的命令。在一些实施例中,为来自Khronos Group的开放图形库(OpenGL)和开放计算语言(OpenCL)、来自Microsoft公司的Direct3D库提供支持,或者可以向OpenGL和D3D二者提供支持。还可以为开放源计算机视觉库(OpenCV)提供支持。具有兼容的3D流水线的未来的API也将会被支持,如果可以从未来API的流水线向图形处理器的流水线进行映射的话。
图形流水线编程
图9A是图示了根据一些实施例的图形处理器命令格式900的框图。图9B是图示了根据实施例的图形处理器命令序列910的框图。图9A中的实线框图示了通常被包括在图形命令中的组件,而虚线包括可选的或者仅被包括在图形命令的子集中的组件。图9A的示例性图形处理器命令格式900包括数据字段以标识命令的目标客户端902、命令操作码(操作码)904和用于命令的相关数据906。子操作码905和命令大小908也被包括在一些命令中。
在一些实施例中,客户端902指定处理命令数据的图形设备的客户端单元。在一些实施例中,图形处理器命令解析器检查每个命令的客户端字段以调节命令的进一步处理并且将命令数据路由到适当的客户端单元。在一些实施例中,图形处理器客户端单元包括存储器接口单元、渲染器单元、2D单元、3D单元和媒体单元。每个客户端单元具有处理命令的对应处理流水线。一旦命令被客户端单元接收,客户端单元就读取操作码904和(如果存在的话)子操作码905以确定要执行的操作。客户端单元通过使用数据字段906中的信息而执行命令。对于一些命令,预期显式命令大小908以指定命令的大小。在一些实施例中,命令解析器基于命令操作码而自动确定命令中至少一些的大小。在一些实施例中,经由双字的倍数而对准命令。
图9B中的流程图示出示例性命令序列910。在一些实施例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所示的命令序列的版本以设置、执行和终止图形操作的集合。仅仅出于示例的目的而示出和描述样本命令序列,因为实施例不限于这些特定的命令或该命令序列。此外,命令可以被发布为命令序列中的批量命令,以使得图形处理器将至少部分并发地处理命令序列。
在一些实施例中,样本命令序列910可以以流水线清理(flush)命令912而开始以使得任何活动的图形流水线完成用于流水线的当前未决的命令。在一些实施例中,3D流水线922和媒体流水线924不并发地操作。执行流水线清理以使得活动的图形流水线完成任何未决的命令。响应于流水线清理,用于图形处理器的命令解析器将暂停命令处理直到活动的绘图引擎完成未决的操作并且相关读取高速缓存被无效。可选地,渲染器高速缓存中的被标记为“脏”的任何数据可以被清理到存储器。在一些实施例中,流水线清理命令912可以用于流水线同步或在将图形处理器置于低功率状态中之前被使用。
在一些实施例中,当命令序列要求图形处理器显式地在流水线之间切换时使用流水线选择命令913。在一些实施例中,在发布流水线命令之前在执行上下文内仅需要流水线选择命令913一次,除非上下文是要发布用于两个流水线的命令。在一些实施例中,紧接在经由流水线选择命令913的流水线切换之前需要流水线清理命令912。
在一些实施例中,流水线控制命令914配置图形流水线用于操作并且用于对3D流水线922和媒体流水线924进行编程。在一些实施例中,流水线控制命令914配置针对活动的流水线的流水线状态。在一个实施例中,流水线控制命令914用于流水线同步并且用以在处理批量的命令之前从活动的流水线内的一个或多个高速缓存存储器清除数据。
在一些实施例中,返回缓冲器状态命令916用于配置返回缓冲器的集合以供相应的流水线来写入数据。一些流水线操作需要一个或多个返回缓冲器的分配、选择或配置,操作在处理期间将中间数据写入所述返回缓冲器中。在一些实施例中,图形处理器还使用一个或多个返回缓冲器以存储输出数据并且执行跨线程通信。在一些实施例中,返回缓冲器状态916包括选择返回缓冲器的大小和数目以用于流水线操作集合。
命令序列中的其余命令基于用于操作的活动的流水线而不同。基于流水线确定920,使命令序列适合于以3D流水线状态930开始的3D流水线922或者以媒体流水线状态940开始的媒体流水线924。
用于3D流水线状态930的命令包括用于要在处理3D基元命令之前被配置的顶点缓冲器状态、顶点元素状态、恒定颜色状态、深度缓冲器状态和其它状态变量的3D状态设置命令。至少部分地基于使用中的特定3D API来确定这些命令的值。在一些实施例中,3D流水线状态930命令还能够选择性地禁用或绕过某些流水线元件,如果将不使用那些元件的话。
在一些实施例中,3D基元932命令用于提交要由3D流水线处理的3D基元。经由3D基元932命令被传递到图形处理器的命令和相关联的参数被转发到图形流水线中的顶点获取功能。顶点获取功能使用3D基元932命令数据来生成顶点数据结构。顶点数据结构被存储在一个或多个返回缓冲器中。在一些实施例中,3D基元932命令被用于经由顶点着色器而在3D基元上执行顶点操作。为了处理顶点着色器,3D流水线922将着色器执行线程分派到图形处理器执行单元。
在一些实施例中,经由执行934命令或事件而触发3D流水线922。在一些实施例中,寄存器写入触发了命令执行。在一些实施例中,经由命令序列中的“出发(go)”或“起动(kick)”命令而触发执行。在一个实施例中,通过使用流水线同步命令来将命令序列清理通过图形流水线而触发命令执行。3D流水线将执行用于3D基元的几何处理。一旦操作完成,所得到的几何对象被光栅化并且像素引擎对所得到的像素进行染色。控制像素着色和像素后端操作的附加命令也可以被包括以用于那些操作。
在一些实施例中,样本命令序列910当执行媒体操作时遵循媒体流水线924路径。一般而言,用于媒体流水线924的编程的特定使用和方式取决于要执行的媒体或计算操作。特定媒体解码操作可以在媒体解码期间被卸载到媒体流水线。在一些实施例中,媒体流水线也可以被绕过并且可以通过使用由一个或多个通用处理核所提供的资源来整体地或部分地执行媒体解码。在一个实施例中,媒体流水线还包括用于通用图形处理器单元(GPGPU)操作的元件,其中图形处理器被用于通过使用并不与图形基元的渲染显式相关的计算着色器程序来执行SIMD矢量操作。
在一些实施例中,以与3D流水线922类似的方式来配置媒体流水线924。媒体流水线状态命令940的集合在媒体对象命令942之前被分派或置于命令队列中。在一些实施例中,媒体流水线状态命令940包括数据以配置将用于处理媒体对象的媒体流水线元件。这包括数据来配置媒体流水线内的视频解码和视频编码逻辑,诸如编码或解码格式。在一些实施例中,媒体流水线状态命令940也支持使用对包含批量状态设置的“间接”状态元素的一个或多个指针。
在一些实施例中,媒体对象命令942供应对媒体对象的指针以供由媒体流水线处理。媒体对象包括包含要被处理的视频数据的存储器缓冲器。在一些实施例中,在发布媒体对象命令942之前,所有媒体流水线状态必须是有效的。一旦流水线状态被配置并且流水线对象命令942被排队,就经由执行命令944或等同的执行事件(例如寄存器写入)来触发媒体流水线924。来自媒体流水线924的输出然后可以通过由3D流水线922或媒体流水线924所提供的操作来进行后处理。在一些实施例中,GPGPU操作以与媒体操作类似的方式被配置和执行。
图形软件架构
图10图示了根据一些实施例的用于数据处理系统的示例性图形软件架构1000。在一些实施例中,软件架构包括3D图形应用1010、操作系统1020和至少一个处理器1030。在一些实施例中,处理器1030包括图形处理器1032和一个或多个通用处理器核1034。图形应用1010和操作系统1020均在数据处理系统的系统存储器1050中执行。
在一些实施例中,3D图形应用1010包含了包括着色器指令1012的一个或多个着色器程序。着色器语言指令可以是以高级着色器语言,诸如高级着色器语言(HLSL)或OpenGL着色器语言(GLSL)。应用还包括以适合于由通用处理器核1034来执行的机器语言的可执行指令1014。应用还包括由顶点数据定义的图形对象1016。
在一些实施例中,操作系统1020是来自Microsoft公司的Microsoft ® Windows®操作系统、专有的类UNIX操作系统、或使用Linux内核的变型的开放源类UNIX操作系统。当Direct3D API在使用中时,操作系统1020使用前端着色器编译器1024来将以HLSL的任何着色器指令1012编译成较低级着色器语言。编译可以是即时(JIT)编译或者应用可以执行着色器预编译。在一些实施例中,高级着色器在3D图形应用1010的编译期间被编译成低级着色器。
在一些实施例中,用户模式图形驱动器1026包含后端着色器编译器1027以将着色器指令1012转换成硬件特定的表示。当OpenGL API在使用中时,以GLSL高级语言的着色器指令1012被传递到用户模式图形驱动器1026以供编译。在一些实施例中,用户模式图形驱动器1026使用操作系统内核模式功能1028以与内核模式图形驱动器1029通信。在一些实施例中,内核模式图形驱动器1029与图形处理器1032通信以分派命令和指令。
以下描述的本发明的一个实施例提供执行多重随机化k维(RKD)树构建和搜索操作的新方法。特别地,一个实施例高效地利用图形处理器单元(GPU)的处理资源以在高维空间中实现RKD树构建和搜索算法。这些实施例相对于当前的基于多重RKD树的技术而显著地改进构建和搜索过程的性能。
最近邻多重RKD树算法包括两个部分:(1)用于多重树(multiple tree)的树构建和(2)树搜索。树构建过程可以执行一次并且所构建的树可以被再用于多个搜索(或者每次,这取决于它被使用在其中的应用的类型)。
树构建过程在每个树节点处在从具有最高方差的最先N个候选中随机选择的维度上来将数据对半分割(split)直到达到单个点(叶节点)。随机化的KD树搜索算法可以被划分成两个阶段。在第一阶段处,搜索向下通过树直到叶节点为止并且标识包含了查询点的格室。然而,第一候选不一定是最近邻。图11图示了标准RKD树构建结果和示例性的搜索。黑点表示叶节点中的数据集合点。每个格室对应于叶节点。线对应于每个节点处的数据分割,其中相同格式化的线对应于相同的树层级。虽然颜色通常被用于标识树层级,但是具有不同格式化的线在此处被用于避免在本专利申请的情况下提交彩色图的需要。三角形1101对应于查询点(例如,针对对照数据集而执行的查询)并且箭头指向其最近邻1102。
如图11中所图示的,最近邻1102不与查询点1101在相同的格室中。在搜索阶段,算法“回溯”通过树以便找到真实的最近邻。在回溯阶段,树的整个分支可以被修剪并且当所有未经探索的分支已经被修剪时搜索终止。树回溯是总体过程的非常耗时的部分,特别是当在当前硬件上实现时。
用于执行近似最近邻搜索的下述技术可以以软件、固件和/或硬件来实现而仍遵守本发明的底层原理。图12A图示了其中以由图形处理单元1212所执行的软件来实现近似最近邻搜索逻辑1201的一个特定实施例。在示例中,ANN搜索逻辑1201被应用1215使用,所述应用1215可以是例如用于执行模式识别(例如面部识别认证器)、数据挖掘(例如执行模糊数据匹配)、在多媒体数据中搜索的应用,和/或本文所述技术对其可能有用的任何其它应用。GPU 1212包括多个执行单元1203-1210以用于并行地处理ANN搜索的部分(如以下详细描述的那样)。线程分派逻辑1202向并行的执行单元1203-1210中的每一个分派用于执行ANN搜索的线程。
在一个实施例中,可以在由操作系统所提供的用户环境内执行应用1215,并且可以在由操作系统所使用的图形驱动器内实现近似最近邻搜索逻辑1201。在该实施例中,应用1215和/或OS可以向由驱动器/OS(未示出)所展露的应用编程接口(API)进行函数调用,所述应用编程接口然后在图形处理单元1212上调取所述函数调用。在一些实施例中,可以存在由应用、OS和驱动器所调取的函数调用的多层。例如,在一个实施例中,可以在主机OS的顶部的访客OS内(例如在由主机OS所提供的虚拟化的环境中)执行应用1215,其中主机OS包括用于对访客OS上运行的应用所进行的程序调用进行转化的仿真器。当然,本发明的底层原理不限于任何特定的基于软件的实现方式。
如图12B中所图示的,在可替换的实施例中,ANN搜索逻辑1221直接被集成在GPU上,作为硬件和/或固件。在该实施例中,应用1215执行由ANN搜索逻辑1221所解码的指令以生成由各种执行单元1203-1210所执行的一系列操作。例如,被特别设计成支持ANN功能的指令可以由ANN搜索逻辑1221执行并且由应用1215使用以执行本文所述的ANN操作。然而,如以上所提及的,本发明的底层原理不限于用于实现本文所述的ANN搜索技术的任何特定方式。
现在转向ANN搜索操作的细节,本发明的一个实施例依赖于以下事实:(1)来自第一定位的格室中的点是对最近邻的良好近似;以及(2)最接近第一个所找到的格室的格室具有高概率包含真实NN。
基于这些考虑,代替于树回溯,本发明的一个实施例将近邻格室联合成一个,如图13中所图示的,并且在所选的点的子集中执行强力NN搜索。为了简单,将在2D空间中描述本发明的实施例(尽管本领域技术人员将容易地领会到如何在3D、4D等中实现相同的技术)。图13示出了联合格室的一个示例性结果。在该示例中,来自图11的四个不同的格室(包含数据点1102-1106的格室)已经被联合以形成单个格室1303。作为格室被联合的结果,对于查询点1301的最近邻1302落入联合格室1303内。
可以通过树构建过程中的改变而联合格室。例如,在一个实施例中,建立点的阈值数目并且当达到所指定的点阈值时停止构建过程。用于传统KD树的类似的方法称为“多桶树”。搜索过程的一个实施例通过每个树仅一次,到达具有多个点的桶并且在所有树上的相关桶中的所有点上执行强力NN搜索。在一个实施例中,通过使用多个执行点1203-1210而并行地执行这些操作,从而造成显著的性能改进。例如,在一个实施例中,线程分派逻辑1202将并行的多个点/树的多个线程分派到执行单元1203-1210中的每一个。
可以在选自不同的树的所有桶上执行针对NN的搜索。在一个实施例中,树的数目等于一,并且因此其中要执行NN搜索的桶的数目也等于一(即,只有一个桶被搜索)。然而,在其中使用多个树的实施例中,可以在来自不同树的对应数目的不同桶内执行NN搜索。因此,虽然为了说明的缘故,本文所述的本发明的一些实施例聚焦于单个桶内的搜索,但是本发明的底层原理不限于一个桶内的搜索(即当使用多个树时搜索多个桶)。
另外,在本发明的一个实施例中,为了改进准确性,实现新颖的模糊分割技术,如图14中所图示的。特别地,图14图示了模糊桶的实现方式,其中较粗的线对应于标准树构建并且细线对应于模糊分割。
存在当查询点1401(三角形)落于接近于格室边缘处并且最近邻1402可能没有落在第一个所找到的格室(由绿色箭头所指示)中的情况。因而,一个实施例,执行模糊分割,其中边缘点可以同时属于多于一个的桶。粗实的线示出格室的标准划分并且较轻淡(虚)的线图示模糊桶。总而言之,本发明的一个实施例采用没有回溯的基于多重RKD树的ANN搜索算法,其可以在GPU(特别是具有多个执行单元的那些)上高效执行。另外,可以采用模糊分割以进一步改进性能。
通过实验结果,在类似水平的准确性的情况下,通过现有实现方式(例如在CPU上使用用于近似最近邻的快速库(FLANN))已经实现了多达10x时间性能改进。在其它实现方式中,实现了准确性方面的多达20%的改进而维持时间方面的4x改进。图15-16中的表图示了这些结果。
特别地,这些证明了按用于FLANN算法的NN数目并且使用本文所述的技术在两个不同的参数集的情况下在100个查询点上的平均准确性。针对10NN以及对应的时间性能图示了平均准确性。特别地,在图15中,通过使用10K个点的数据集、100个点的查询集以及128D浮点变量而示出了针对最先10个最近邻的平均准确性。在图16中,通过使用50k个点的数据集、100个点的查询集以及128D浮点变量而示出了针对最先10个最近邻的平均准确性。
如所提及的,本发明的一个实施例在树构建和树搜索过程二者处采用多种技术。与标准RKD树构建过程相反,本发明的一个实施例中所采用的树构建在当前数据子集中的点的数目小于或等于桶中所指定的最大点阈值时停止。如所提及的,图11示出了2D空间中标准RKD树构建算法的结果,其中每个桶由单个点表示。图13示出了当最大的桶大小被设置为4时RKD树构建的结果。在该实施例中,每个桶由2D空间中4个或更少的点表示。
在一个实施例中,二叉树(binary tree)上的搜索算法被划分成两个阶段。第一阶段向下通过树直到达到叶节点(桶)并且在空间中找到包含查询点的格室。可以利用一系列等于树深度(Tdepth)的比较来执行该步骤。在诸如此处所述的GPU 1212上的实现方式的情况中,这意味着对GPU存储器的Tdepth读取。本文所述的多点桶方法显著地减小树深度,因而减少通过GPU的存储器读取并且改进性能。
一般而言,当搜索时,来自所标识的格室的点是对NN的良好近似。然而,第一候选不一定是最近邻。图11例如图示了其中最近邻不在查询点格室中的情形(箭头指向NN)。搜索的第二阶段回溯通过树以便找到真实的NN。在回溯阶段,树的整个分支可以被修剪并且当所有未经探索的分支已经被修剪时搜索终止。所述过程在低维空间是有效的但是在高维空间中变得低效,其中可能存在邻近于查询点格室的更加多的格室。可以通过限制要被检查的叶节点的数目并且将最佳近邻设置为NN(如本文所述的那样)来执行近似NN。
存在对搜索树进行回溯的许多方式。最频繁使用的方式之一称作“优先搜索”,其不是按树结构的次序来进行的,而是基于查询点的定位。特别地,按距查询点的距离的次序来搜索树节点。优先搜索算法涉及计算从查询点到每个格室的距离并且维护优先队列。优先队列在每个节点处被更新并且保存关于未采取的选项的信息。通过从查询点到格室的距离来对优先队列进行排序。在检查了第一叶节点之后,优先队列中的顶部条目被移除并且用于遍历最近的分支。因而,在搜索期间连续地更新优先队列。在一个实施例中,当队列为空或者已经检查了最大数目的叶节点时终止搜索。
以下技术在一个实施例中被采用以改进在具有多个执行单元的GPU上的性能。这些技术基于以下观察:(1)来自第一定位的格室的点是对最近邻的良好近似;以及(2)最接近第一定位的格室的格室也具有包含真实NN的高概率。
基于这些观察,在本发明的一个实施例中,通过使用构建过程中的改变来组合近邻的格室(例如,如以上关于图13所述的那样)并且在所选点的子集中执行强力NN搜索(而不是如在现有系统中那样对树进行回溯)。这样的方法对于主机处理器(例如CPU)上的执行通常不是理想的,因为它需要相对大的桶大小和作为结果的一系列不必要的距离计算。然而,对于具有多个执行单元1203-1210的GPU 1212而言它是良好的适配(fit),因为不必要的计算随所需要的计算同时执行。
另外,在一个实施例中,为了改进准确性,如图14中所示的那样采用模糊分割过程。存在当查询点1401落于接近于格室边缘并且NN 1402可能在邻近格室中(如由箭头所指示的那样)的情况。用于解决该问题的一种技术是多重树构建并且增加桶大小。当构建更多的树并且使用更大的桶大小时,这降低NN将在初始定位的桶外部的概率。
图17中的表格示出针对10,000个128D点的数据集的不同数目的树和不同的桶大小的准确性。数据大小随着要使用的更多的树和更大的桶大小而增大以达到更准确的结果。所需的准确性是取决于应用的并且可以通过经验参数选择来选定。
如所提及的,本发明的一个实施例还在树构建操作期间执行模糊分割。返回到图14,图像上的较粗实的线示出对格室的标准划分。本发明的一个实施例执行附加的分割,其中边缘点同时属于多于一个的桶,称为“模糊分割”。图14中的较轻淡/较细的线图示了这些模糊桶。在一个实施例中,通过从在数据阵列中邻近但是不一定在空间中邻近的桶中读取数据仅部分地实现模糊桶,本文中称为“准模糊(quasi fuzzy)”。图18中所示的表格图示了在具有和没有该“准模糊”(QF)实现方式的情况下的准确性。从邻近的阵列中的桶读取数据以执行该“准模糊”实现方式提供了2%的平均改进,而在点5(被突出)处,它提供了6%的改进。
图19图示了根据本发明的一个实施例的方法。在1901处发起最近邻(NN)树构建过程之后,在1902处在第一/下一个树节点(即在过程开始处的第一树节点和用于每个迭代的下一个树节点)处划分来自输入数据集的数据点。在一个实施例中,数据点在每个树节点处被对半划分或大体上对半划分。过程迭代通过1902,其中数据点在每个新的树节点处被划分成越来越小的子集直到在1903处达到点阈值。在一个实施例中,在当前数据子集中的点的数目小于或等于桶中指定的最大点数目时达到阈值。例如,在图13中,指定桶大小为4,由此使得每个桶将由2D空间中4个或更少的点来表示。
如果在1903处达到阈值,则在1904处可以(可选地)实现模糊分割。例如,如以上关于图14所述的,可以定义附加分割以使得边缘点同时属于多于一个桶。
一旦构建了树,在1905处就可以发起树搜索。作为响应,在1906处树搜索过程遍历树以定位正确的桶。树遍历是众所周知的技术,其中数据点与每个树节点处的数据点进行比较并且基于比较来选择通过树的路径。一旦在1906处到达了桶,在1907处就确定桶内的最近邻点。如以上所提及的,通过设置足够大的桶大小(例如,通过使用上述的点阈值),不需要树回溯。存在在较大的桶内标识的最近邻事实上是实际的最近邻或对于最近邻的接近的近似的相当高的可能性。
在前述说明书中,已经参照其特定示例性实施例描述本发明。然而,将明显的是,在不偏离如在所附权利要求中所阐述的本发明的较宽泛的精神和范围的情况下,可以对其做出各种修改和改变。说明书和附图因此要以说明性的而非限制性的意义来看待。
本发明的实施例可以包括已经在以上被描述的各种步骤。可以以机器可执行指令来体现所述步骤,所述机器可执行指令可以用于使通用或专用处理器执行所述步骤。可替换地,可以由包含用于执行步骤的硬接线逻辑的特定硬件组件或者由经编程的计算机组件和定制的硬件组件的任何组合来执行这些步骤。
如本文中所描述的,指令可以是指被配置成执行某些操作或者具有被存储在以非暂时性计算机可读介质所体现的存储器中的预定功能或软件指令的硬件(诸如专用集成电路(ASIC))的特定配置。因而,各图中所示的技术可以通过使用在一个或多个电子设备(例如终端站、网络元件等)上所存储和执行的代码和数据来实现。这样的电子设备通过使用计算机机器可读介质来存储和传送(内部地和/或通过网络与其它电子设备)代码和数据,所述计算机机器可读介质诸如非暂时性的计算机机器可读存储介质(例如磁盘;光盘;随机存取存储器;只读存储器;闪速存储器设备;相变存储器)和暂时性的计算机机器可读通信介质(例如电学、光学、声学或其它形式的传播信号,诸如载波、红外信号、数字信号等等)。另外,这样的电子设备典型地包括耦合到一个或多个其它组件的一个或多个处理器的集合,所述其它组件诸如一个或多个存储设备(非暂时性机器可读存储介质)、用户输入/输出设备(例如键盘、触摸屏和/或显示器)和网络连接。处理器的集合与其它组件的耦合典型地是通过一个或多个总线和桥(也称为总线控制器)。承载网络业务的存储设备和信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因而,给定电子设备的存储设备典型地存储代码和/或数据以供在该电子设备的一个或多个处理器的集合上执行。当然,本发明的实施例的一个或多个部分可以通过使用软件、固件和/或硬件的不同组合来实现。贯穿本具体实施方式,为了解释的目的,阐述了众多特定细节以便提供对本发明的透彻理解。然而,对本领域技术人员将显而易见的是,可以在没有这些特定细节中的一些的情况下实践本发明。在某些实例中,没有以详尽的细节描述众所周知的结构和功能以便避免使本发明的主题模糊。因此,应当按照以下权利要求来判定本发明的范围和精神。

Claims (36)

1.一种用于实现最近邻搜索的装置,包括:
主机处理器;以及
图形处理器单元,用以响应于来自主机处理器的信号而执行最近邻树构建操作和最近邻树搜索操作;
最近邻树构建操作包括划分数据点的第一集合以定义每个树节点以形成多个桶,每个桶包括数据点的第一集合中的至少一个,桶的数目将基于阈值而被限制,从而导致至少一些桶具有多个数据点;以及
最近邻树搜索操作包括通过比较输入数据点的第二集合中的每一个与树中的数据点以标识桶,然后比较输入数据点的第二集合中的数据点之一与桶中的数据点以标识桶中的最近邻数据点来遍历树。
2.如权利要求1中所述的装置,其中所述树包括随机化K维树,其中在每个树节点处在随机选定的维度上均等地划分数据点的第一集合。
3.如权利要求1中所述的装置,其中在最近邻树构建操作期间执行模糊分割以使得来自第一集合的至少一些数据点被包括在多于一个桶中。
4.如权利要求3中所述的装置,其中模糊分割包括通过使用在数据阵列格式中在邻近桶中但不在空间格式中邻近的数据而执行计算的准模糊分割。
5.如权利要求3中所述的装置,其中模糊分割包括通过使用在数据阵列格式中在邻近桶中并且在空间格式中邻近的数据而执行计算的准模糊分割。
6.如权利要求1中所述的装置,其中阈值被指定为每桶的数据点的最大数目,并且其中在当前数据子集中的点的数目小于或等于桶中所指定的最大数据点数目时终止最近邻树构建操作。
7.如权利要求1中所述的装置,其中在最近邻树搜索操作中遍历树包括执行多个等于树深度的比较。
8.如权利要求1中所述的装置,其中图形处理器单元包括线程分派逻辑,其用以跨多个执行单元而分派用于要并行执行的最近邻树构建操作的执行的线程的第一集合。
9.如权利要求8中所述的装置,其中线程分派逻辑将跨多个执行单元而分派要并行执行的最近邻树搜索操作的线程的第二集合。
10.一种用于实现最近邻搜索的方法,包括:
执行最近邻树构建操作,其包括划分数据点的第一集合以定义每个树节点以形成多个桶,每个桶包括数据点的第一集合中的至少一个,桶的数目将基于阈值而被限制,从而导致至少一些桶具有多个数据点;以及
执行最近邻树搜索操作,其包括通过比较输入数据点的第二集合中的每一个与树中的数据点以标识桶,然后比较输入数据点的第二集合中的数据点之一与桶中的数据点以标识桶中的最近邻数据点来遍历树。
11.如权利要求10中所述的方法,其中所述树包括随机化K维树,其中在每个树节点处在随机选定的维度上均等地划分数据点的第一集合。
12.如权利要求10中所述的方法,其中在最近邻树构建操作期间执行模糊分割以使得来自第一集合的至少一些数据点被包括在多于一个桶中。
13.如权利要求12中所述的方法,其中模糊分割包括通过使用在数据阵列格式中在邻近桶中但不在空间格式中邻近的数据而执行计算的准模糊分割。
14.如权利要求12中所述的方法,其中模糊分割包括通过使用在数据阵列格式中在邻近桶中并且在空间格式中邻近的数据而执行计算的准模糊分割。
15.如权利要求10中所述的方法,其中阈值被指定为每桶的数据点的最大数目,并且其中在当前数据子集中的点的数目小于或等于桶中所指定的最大数据点数目时终止最近邻树构建操作。
16.如权利要求10中所述的方法,其中在最近邻树搜索操作中遍历树包括执行多个等于树深度的比较。
17.如权利要求10中所述的方法实现在图形处理器单元上,其中图形处理器单元包括线程分派逻辑,其用来跨多个执行单元而分派用于要并行执行的最近邻树构建操作的执行的线程的第一集合。
18.如权利要求17中所述的方法,其中线程分派逻辑将跨多个执行单元而分派要并行执行的最近邻树搜索操作的线程的第二集合。
19.一种具有存储在其上的程序代码的机器可读介质,所述程序代码当由图形处理器单元执行时使得图形处理器单元执行以下操作:
执行最近邻树构建操作,其包括划分数据点的第一集合以定义每个树节点以形成多个桶,每个桶包括数据点的第一集合中的至少一个,桶的数目将基于阈值而被限制,从而导致至少一些桶具有多个数据点;以及
执行最近邻树搜索操作,其包括通过比较输入数据点的第二集合中的每一个与树中的数据点以标识桶,然后比较输入数据点的第二集合中的数据点之一与桶中的数据点以标识桶中的最近邻数据点来遍历树。
20.如权利要求19中所述的机器可读介质,其中所述树包括随机化K维树,其中在每个树节点处在随机选定的维度上均等地划分数据点的第一集合。
21.如权利要求19中所述的机器可读介质,其中在最近邻树构建操作期间执行模糊分割以使得来自第一集合的至少一些数据点被包括在多于一个桶中。
22.如权利要求21中所述的机器可读介质,其中模糊分割包括通过使用在数据阵列格式中在邻近桶中但不在空间格式中邻近的数据而执行计算的准模糊分割。
23.如权利要求21中所述的机器可读介质,其中模糊分割包括通过使用在数据阵列格式中在邻近桶中并且在空间格式中邻近的数据而执行计算的准模糊分割。
24.如权利要求19中所述的机器可读介质,其中阈值被指定为每桶的数据点的最大数目,并且其中在当前数据子集中的点的数目小于或等于桶中所指定的最大数据点数目时终止最近邻树构建操作。
25.如权利要求19中所述的机器可读介质,其中在最近邻树搜索操作中遍历树包括执行多个等于树深度的比较。
26.如权利要求19中所述的机器可读介质,其中图形处理器单元包括线程分派逻辑,其用来跨多个执行单元而分派用于要并行执行的最近邻树构建操作的执行的线程的第一集合。
27.如权利要求26中所述的机器可读介质,其中线程分派逻辑将跨多个执行单元而分派要并行执行的最近邻树搜索操作的线程的第二集合。
28.一种用于实现最近邻搜索的装置,包括:
用于执行最近邻树构建操作的部件,所述最近邻树构建操作包括划分数据点的第一集合以定义每个树节点以形成多个桶,每个桶包括数据点的第一集合中的至少一个,桶的数目将基于阈值而被限制,从而导致至少一些桶具有多个数据点;以及
用于执行最近邻树搜索操作的部件,所述最近邻树搜索操作包括通过比较输入数据点的第二集合中的每一个与树中的数据点以标识桶,然后比较输入数据点的第二集合中的数据点之一与桶中的数据点以标识桶中的最近邻数据点来遍历树。
29.如权利要求28中所述的装置,其中所述树包括随机化K维树,其中在每个树节点处在随机选定的维度上均等地划分数据点的第一集合。
30.如权利要求28中所述的装置,其中在最近邻树构建操作期间执行模糊分割以使得来自第一集合的至少一些数据点被包括在多于一个桶中。
31.如权利要求30中所述的装置,其中模糊分割包括通过使用在数据阵列格式中在邻近桶中但不在空间格式中邻近的数据而执行计算的准模糊分割。
32.如权利要求30中所述的装置,其中模糊分割包括通过使用在数据阵列格式中在邻近桶中并且在空间格式中邻近的数据而执行计算的准模糊分割。
33.如权利要求28中所述的装置,其中阈值被指定为每桶的数据点的最大数目,并且其中在当前数据子集中的点的数目小于或等于桶中所指定的最大数据点数目时终止最近邻树构建操作。
34.如权利要求28中所述的装置,其中在最近邻树搜索操作中遍历树包括执行多个等于树深度的比较。
35.如权利要求28中所述的装置,实现在图形处理器单元上,其中图形处理器单元包括线程分派逻辑,其用来跨多个执行单元而分派用于要并行执行的最近邻树构建操作的执行的线程的第一集合。
36.如权利要求35中所述的装置,其中线程分派逻辑将跨多个执行单元而分派要并行执行的最近邻树搜索操作的线程的第二集合。
CN201510429785.9A 2014-08-21 2015-07-21 用于在图形处理单元(gpu)上实现最近邻搜索的方法和装置 Active CN105404889B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201462040031P 2014-08-21 2014-08-21
US62/040031 2014-08-21
US14/581490 2014-12-23
US14/581,490 US10032244B2 (en) 2014-08-21 2014-12-23 Method and apparatus for implementing a nearest neighbor search on a graphics processing unit (GPU)

Publications (2)

Publication Number Publication Date
CN105404889A CN105404889A (zh) 2016-03-16
CN105404889B true CN105404889B (zh) 2020-03-17

Family

ID=55348700

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510429785.9A Active CN105404889B (zh) 2014-08-21 2015-07-21 用于在图形处理单元(gpu)上实现最近邻搜索的方法和装置

Country Status (3)

Country Link
US (1) US10032244B2 (zh)
CN (1) CN105404889B (zh)
TW (1) TWI590187B (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8510270B2 (en) 2010-07-27 2013-08-13 Oracle International Corporation MYSQL database heterogeneous log based replication
US9298878B2 (en) * 2010-07-29 2016-03-29 Oracle International Corporation System and method for real-time transactional data obfuscation
EP3065051A1 (en) * 2015-03-05 2016-09-07 Ingo Josopait Flow control for language-embedded programming in general-purpose computing on graphics processing units
US10031947B2 (en) * 2015-06-24 2018-07-24 Advanced Micro Devices, Inc. Method and apparatus for performing a search operation on heterogeneous computing systems
US10134103B2 (en) * 2015-10-23 2018-11-20 Qualcomm Incorporated GPU operation algorithm selection based on command stream marker
US10510017B2 (en) * 2015-11-18 2019-12-17 Oath Inc. Method for approximate k-nearest-neighbor search on parallel hardware accelerators
US20170300361A1 (en) * 2016-04-15 2017-10-19 Intel Corporation Employing out of order queues for better gpu utilization
US20180095792A1 (en) * 2016-10-05 2018-04-05 Mediatek Inc. Multi-core system including heterogeneous processor cores with different instruction set architectures
US10649770B2 (en) * 2017-01-31 2020-05-12 Facebook, Inc. κ-selection using parallel processing
US11157801B2 (en) * 2017-02-28 2021-10-26 Microsoft Technology Licensing, Llc Neural network processing with the neural network model pinned to on-chip memories of hardware nodes
US10304154B2 (en) 2017-04-24 2019-05-28 Intel Corporation Coordination and increased utilization of graphics processors during inference
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
CN108874799B (zh) * 2017-05-09 2021-11-30 中国科学院沈阳自动化研究所 高速并行数据查找方法
US11645261B2 (en) 2018-04-27 2023-05-09 Oracle International Corporation System and method for heterogeneous database replication from a remote server
CN109344295B (zh) * 2018-08-24 2020-05-05 阿里巴巴集团控股有限公司 分布式图嵌入方法、装置、设备及系统
US11275801B1 (en) * 2019-03-05 2022-03-15 Sprint Communications Company L.P. Performance metrics collection and promulgation from within a mobile application
CN113396401A (zh) 2019-03-15 2021-09-14 英特尔公司 多贴片存储器管理
US11132326B1 (en) 2020-03-11 2021-09-28 Nvidia Corporation Techniques to transfer data among hardware devices
CN112988114B (zh) * 2021-03-12 2022-04-12 中国科学院自动化研究所 基于gpu的大数计算系统
US20230137876A1 (en) * 2021-11-04 2023-05-04 Oracle International Corporation System and method for providing on-demand localization in a microservice application environment

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103403704A (zh) * 2010-12-17 2013-11-20 伊维赛斯公司 用于查找最近邻的方法和设备

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6054990A (en) * 1996-07-05 2000-04-25 Tran; Bao Q. Computer system with handwriting annotation
US5987468A (en) * 1997-12-12 1999-11-16 Hitachi America Ltd. Structure and method for efficient parallel high-dimensional similarity join
TW527250B (en) 2000-11-13 2003-04-11 Sumitomo Heavy Industries Method and device for working planning and method and device for producing working data therefor
US20030228908A1 (en) * 2002-06-10 2003-12-11 Daniel Caiafa Statistics system for online console-based gaming
US7096444B2 (en) * 2003-06-09 2006-08-22 Kuoching Lin Representing device layout using tree structure
JP5092722B2 (ja) * 2007-12-07 2012-12-05 ソニー株式会社 画像処理装置、画像処理方法およびプログラム
US7827219B2 (en) * 2008-02-29 2010-11-02 International Business Machines Corporation Method for encoding, traversing, manipulating and querying a tree
US20110283059A1 (en) * 2010-05-11 2011-11-17 Progeniq Pte Ltd Techniques for accelerating computations using field programmable gate array processors
US9183667B2 (en) * 2011-07-15 2015-11-10 Kirill Garanzha Out-of-core ray tracing with memory-efficient page generation
US8630375B2 (en) * 2011-08-29 2014-01-14 Telefonaktiebolaget Lm Ericsson (Publ) Method and apparatus for received signal processing in a multi-stage receiver
US20130226966A1 (en) * 2012-02-27 2013-08-29 Technion Research & Development Foundation Limited Processing a hierarchical structure to respond to a query
US8812488B2 (en) * 2012-08-16 2014-08-19 Oracle International Corporation Constructing multidimensional histograms for complex spatial geometry objects

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103403704A (zh) * 2010-12-17 2013-11-20 伊维赛斯公司 用于查找最近邻的方法和设备

Also Published As

Publication number Publication date
US10032244B2 (en) 2018-07-24
US20160055611A1 (en) 2016-02-25
CN105404889A (zh) 2016-03-16
TWI590187B (zh) 2017-07-01
TW201626326A (zh) 2016-07-16

Similar Documents

Publication Publication Date Title
CN105404889B (zh) 用于在图形处理单元(gpu)上实现最近邻搜索的方法和装置
US9824026B2 (en) Apparatus and method for managing a virtual graphics processor unit (VGPU)
US9990758B2 (en) Bounding volume hierarchy generation using a heterogeneous architecture
US10565775B2 (en) Method and apparatus for load balancing in a ray tracing architecture
CN106575221B (zh) 用于simd执行引擎的非结构化控制流的方法和设备
CN106575430B (zh) 用于像素哈希的方法和装置
CN106662999B (zh) 用于simd结构化分支的方法和装置
EP3221850B1 (en) Apparatus and method for efficient frame-to-frame coherency exploitation for sort-last architectures
CN106575451B (zh) 用于对像素区域进行着色的方法、装置、设备及存储介质
WO2018063582A1 (en) Method and apparatus for the proper ordering and enumeration of multiple successive ray-surface intersections within a ray tracing architecture
CN107004293B (zh) 仅位置流水线中的宽松拣分
CN107004294B (zh) 用于高吞吐量栅格器的方法和装置
WO2017127173A1 (en) Level of detail selection during ray tracing
EP3274963A1 (en) Edge-based coverage mask compression
CN107077758B (zh) 零覆盖光栅化剔除
WO2017074377A1 (en) Boosting local memory performance in processor graphics
US9633452B2 (en) Resolving multi-sampled anti-aliasing buffers into single sampled buffers
US9601092B2 (en) Dynamically managing memory footprint for tile based rendering
CN108292426B (zh) 基于部分跨度的光栅化
CN107004252B (zh) 用于在处理浮点值时实现功率节省技术的装置与方法

Legal Events

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