CN105700855A - 改进的simd k最近邻实现 - Google Patents
改进的simd k最近邻实现 Download PDFInfo
- Publication number
- CN105700855A CN105700855A CN201510769833.9A CN201510769833A CN105700855A CN 105700855 A CN105700855 A CN 105700855A CN 201510769833 A CN201510769833 A CN 201510769833A CN 105700855 A CN105700855 A CN 105700855A
- Authority
- CN
- China
- Prior art keywords
- simd
- knn
- processor
- distance
- technology
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17356—Indirect interconnection networks
- G06F15/17368—Indirect interconnection networks non hierarchical topologies
- G06F15/17375—One dimensional, e.g. linear array, ring
-
- 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/02—Comparing digital values
- G06F7/023—Comparing digital values adaptive, e.g. self learning
-
- 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/02—Comparing digital values
- G06F7/026—Magnitude comparison, i.e. determining the relative order of operands based on their numerical value, e.g. window comparator
Abstract
描述了涉及改进的SIMD(单指令多数据)K最近邻(KNN)实现的方法以及设备。实施例提供了用于改进多维K最近邻(KNN)技术的SIMD实现的技术。一个实施例以SIMD操作的序列来替换KNN算法的非SIMD友好部分。例如,为了避免算法热点中的分支(例如,内循环),可以在每一次迭代之后,使用SIMD操作来更新最近距离(以及最近邻)的列表。还公开并要求保护其他实施例。
Description
技术领域
本公开一般涉及电子学领域。更具体而言,实施例涉及改进的SIMD(单指令多数据)K最近邻实现。
背景技术
一般而言,SIMD是用于实现数据级并行性的技术。具体而言,可以根据单条指令而在SIMD引擎的多个对应的通道中处理多个数据。
可以使用SIMD来加速对图形数据的处理,包括K最近邻(K-Nearest-Neighbors,KNN)算法。KNN算法一般用于图案识别中的分类或回归分析。
附图说明
参考附图提供“具体实施方式”。在附图中,附图标记中最左边的数字标识该附图标记首次出现在其中的附图。在不同的附图中使用相同的附图标记指示相似或完全相同的项。
图1以及图5-7示出可用于实现本文中所讨论的各实施例的计算系统的各实施例的框图。
图2示出根据实施例的计算系统的处理器核和其他组件的诸部分的框图。
图3A和3B示出根据一些实施例的与执行改进的KNN方法相关联的操作的流程图。
图4示出根据实施例的用于改进的KNN方法的样本伪代码和对应的样本值。
具体实施方式
在下面的描述中,阐述了很多具体细节以提供对各实施例的透彻理解。然而,在没有这些具体细节的情况下,也可实践各实施例。在其他实例中,没有详细描述公知的方法、过程、组件和电路,从而不使特定实施例变得模糊。此外,可使用各种装置来执行实施例的各方面,各种装置诸如,集成的半导体电路(“硬件”)、组织成一个或多个程序的计算机可读指令(“软件”)或硬件和软件的某种组合。为本公开的目的,对“逻辑”的引用应当是指硬件、软件,或者硬件和软件的某种组合。
一些实施例涉及改进的SIMD(单指令多数据)K最近邻(KNN)算法实现。实施例提供用于改进多维KNN技术的SIMD实现的技术。KNN一般用于计算机视觉和/或机器学习,并可以使用SIMD引擎(诸如,各种VLIW(超长指令字)数字信号处理器(DSP)和GPU(图形处理单元),诸如,参考图1-7所讨论的处理器)来加速。一个实施例以SIMD操作序列来替换KNN算法的非SIMD友好部分。更具体而言,为了避免算法热点中的分支(例如,内循环),可以在每一次迭代之后,使用SIMD操作来更新最近距离(以及最近邻)的列表。
此外,本文中所讨论的技术可以用于各种计算系统中(例如,非移动设备,诸如,台式计算机、服务器、工作站等,以及移动设备,诸如,智能电话、平板、UMPC(超移动个人计算机)、膝上型计算机、超极本TM、计算设备、可穿戴设备(例如,智能手表、智能眼镜),等等),包括参考图1-7所讨论的那些计算系统。更具体而言,图1示出根据实施例的计算系统100的框图。系统100可包括一个或多个处理器102-1到102-N(在本文中统称为“诸处理器102”或“处理器102”)。诸处理器102可以经由互连或总线104进行通信。每一个处理器都可包括各种组件,为清楚起见,仅参考处理器102-1来讨论这些组件中的一些组件。相应地,其余的处理器102-2到102-N中的每一个处理器都可包括参考处理器102-1所讨论的相同或类似的组件。
在一个实施例中,处理器102-1包括一个或多个处理器核106-1到106-M(在本文中称为“诸核106”或“核106”)、高速缓存108和/或路由器110。可以在单个集成电路(IC)芯片上实现处理器核106。此外,芯片可包括一个或多个共享的和/或私有的高速缓存(诸如,高速缓存108)、总线或互连(诸如,总线或互连112)、图形和/或存储器控制器(诸如,参考图5-7所讨论的那些)或其他组件。
在一个实施例中,可以使用路由器110以在处理器102-1和/或系统100的各种组件之间进行通信。此外,处理器102-1还可包括多于一个的路由器110。此外,许多路由器110可以处于通信中,以便在处理器102-1内部或外部的各种组件之间实现数据路由。
高速缓存108可以存储由处理器102-1的一个或多个组件(诸如,核106)使用的数据(例如,包括指令)。例如,高速缓存108可以在本地对存储在存储器114中的数据进行高速缓存,以便由处理器102的组件更快地访问(例如,由核106更快地访问)。如图1所示,存储器114可以经由互连104来与处理器102通信。在实施例中,高速缓存108(其可以是共享的)可以是中级高速缓存(MLC)、末级高速缓存(LLC),等等。同样,核106中的每一个都可包括第1级(L1)高速缓存(116-1)(在本文中统称为“L1高速缓存116”)或其他层级的高速缓存,诸如,第2级(L2)高速缓存。此外,处理器102-1的各种组件可以直接地,通过总线(例如,总线112)和/或存储器控制器或中枢来与高速缓存108进行通信。
如图1所示,处理器102还可以用于提供本文中所讨论的改进的基于SIMD的KNN实现的KNN逻辑160。在实施例中,逻辑160(或系统100中的或耦合到系统100的其他逻辑)导致以SIMD操作序列来替换KNN算法的非SIMD友好部分。更具体而言,为了避免在算法热点中的分支(例如,内循环),在每一次迭代之后,可以使用SIMD操作(由逻辑160生成)来更新最近距离(以及最近邻)的列表。
此外,逻辑160还可以访问本文中所讨论的一个或多个存储设备(诸如,高速缓存108、L1高速缓存116、存储器114或系统100中的另一存储器),从而存储与逻辑160的操作有关的信息,所述信息诸如,与本文中处所讨论的系统100的各种组件进行通信的信息。逻辑160也可以位于除在图1中所示位置以外的位置中。
图2示出根据实施例的计算系统的处理器核106和其他组件的诸部分的框图。在一个实施例中,图2中示出的箭头示出指令穿过核106的流动方向。一个或多个处理器核(诸如,处理器核106)可以实现在单个集成电路芯片(或管芯)上,诸如,参考图1所讨论的集成电路芯片(或管芯)。此外,芯片可包括一个或多个共享的和/或私有的高速缓存(例如,图1的高速缓存108)、互连(例如,图1的互连104和/或112)、控制单元、存储器控制器或其他组件。
如图2所示,处理器核106可包括用于取出指令(包括具有条件分支的指令)以由核106来执行的取出单元202。可以从任何存储设备中取出指令,诸如,存储器114和/或参考图5-7所讨论的存储器设备。核106也可以包括用于对取出的指令解码的解码单元204。例如,解码单元204可以将取出的指令解码为多个uop(微操作)。另外,核106可包括调度单元206。调度单元206可以执行与存储经解码的指令(例如,从解码单元204接收到的指令)相关联的各种操作,直到指令准备好供分派为止,例如,直到经解码的指令的所有源值都变得可用为止。在一个实施例中,调度单元206可以将经解码的指令调度和/或发布(分派)给执行单元208以供执行。执行单元208可以在指令经解码(例如,由解码单元204解码)并经分派(例如,由调度单元206分派)之后来执行经分派的指令。在实施例中,执行单元208可包括多于一个的执行单元(诸如,成像计算单元、图形计算单元、通用计算单元,等等)。执行单元208也可以执行各种算术操作(诸如,加法、减法、乘法,和/或除法),并可包括一个或多个算术逻辑单元(ALU)。在实施例中,协处理器(未示出)可以结合执行单元208来执行各种算术操作。
此外,执行单元208可以无序地执行指令。因此,在一个实施例中,处理器核106可以是无序处理器核。核106也可以包括引退单元210。引退单元210可以在指令被提交之后来引退被执行的这些指令。在实施例中,被执行的指令的引退会导致:处理器状态从指令的执行被提交,对由指令使用的物理寄存器解除分配,等等。
核106也可以包括用于经由一个或多个总线(例如,总线104和/或112)来实现处理器核106的组件与其他组件(诸如,参考图1所讨论的组件)之间的通信的总线单元214。核106也可以包括用于存储由核106的各种组件访问的数据(诸如,由逻辑160用来实现本文中所讨论的(例如,参考图3A-4所讨论的)改进的KNN技术的值)的一个或多个寄存器216。
此外,即便图1示出逻辑160经由互连112耦合到核106(例如,以便将KNN相关的操作卸载到另一单元,诸如,卸载到GPU,ASIC(专用集成电路),等等),但是在各实施例中,逻辑160也可以定位在别处,诸如,在核106内,经由总线104耦合到核,等等。
在一个实施例中,逻辑160利用距离给定的测试样本最短距离来确定的“K”个最近的数据库样本(例如,组织在列表中)。算法迭代中的每一次迭代首先计算测试样本与数据库样本中的一个样本之间的距离。随后,将计算出的距离与前一次迭代的“K”个最短距离进行比较。如果新距离比K个最短距离(例如,在列表经排序的情况下)中的至少一个短,则以该新距离替换来自前一次迭代的“最长的”距离。在SIMD引擎中加速KNN的动机部分地是因为,一般而言距离计算是非常SIMD友好的。然而,可在其中具有至少两个分支的标量'for'循环中进行将距离列表与新距离进行比较。此'for'循环以及与它相关联的分支不是DSP友好的,并且它们使算法的此部分成为该实现的瓶颈。
此外,一些解决方案可能试图通过存储所有距离并且随后在稍后时刻对它们进行排序以过滤这K个最短距离来解决此问题。尽管此方法可以在某种程度上改善热点问题,但是它仅适用于非常小的数据库/列表,因为需要将所有距离存储在存储器中。另外,它增加了加载和存储操作的数量,例如,增加延迟、降低性能,和/或增加功耗。此方法的另一劣势在于,当对元素进行排序时,它不会利用SIMD能力。这导致非常低驻留期的发布时隙,并最终导致低效率。
相应地,一些实施例提供用于以SIMD操作来替换距离更新部分(以及与它相关联的分支)的更高效和/或更快的技术。这使得更新最近邻的列表同时在热点循环中没有分支并由此具有好得多的驻留期、效率速度等成为可能。此外,与某些VLIWDSP一起使用此类实施例可能会导致性能相对而言三倍的改善(例如,取决于VLIW架构、发布时隙的数量和类型、SIMD宽度和有效负载等,从大约对于每个样本的约18个周期降至对于每个样本的约六个周期——因此,不同的组合会产生更好或更差加速度)。
在实施例中,逻辑160将K个最短距离的列表保留在SIMD寄存器(或其他存储设备,诸如,本文中所讨论的(例如,参考图1-2和图5-7所讨论的)那些存储设备)中,并使用SIMD操作来以新距离更新该列表。这与使用标量比较操作和内部'for'循环来负责更新形成对照。使用SIMD操作而不是分支还以下列方式中的至少一种优化了热点循环:(a)在VLIWDSP中:避免更新'for'循环使得“展开”('unroll')和“流水线化”('pipeline')热点内循环成为可能。这显著地改善发布时隙的驻留期;以及(b)在GPU中:使用SIMD操作防止与分支相关联的损失以及错误的分支预测。
如上文所提及,SIMDKNN加速的一些实现可以使用标量代码来更新距离列表。然而,标量代码一般在热点内使用,而在其他实现中,所有距离都被存储,并且随后经排序以找出最短的“K”个差异。这第二种方法比第一种方法好,但是与本文中所讨论的各实施例相比仍具有以下劣势:(1)尽管在一些引擎中是可能的,但是许多DSP和GPU具有与可以被存储和读取的存储器的对齐和尺寸有关的限制。(2)存储所有距离的需求使得此方法合理地仅适用于非常小的数据库。这是主要的限制,因为数据库可能具有数万到数百万样本向量。(3)虽然更新代码脱离算法热点运行,但是由于分支的存在,更新代码仍是具有非常低的驻留期和低效率的标量代码。SIMD代码实现好得多的性能。(4)存储时效性距离并再次读取它们涉及对于每个样本多至少两个IO(输入/输出)操作。这些操作在功率和等待时间两方面而言是趋于昂贵的。
一般而言,K的值是低的(例如,在1到15之间),并且在大多数情况下,它低于引擎的SIMD层级。为此,实施例维护'K'个最近的距离(以及最近邻)的经排序的列表,并使用SIMD操作来以新值更新该列表。
图3A示出根据实施例的用于提供改进的KNN的方法300的流程图。在一个实施例中,可以使用参考图1-2和图5-7所讨论的各种组件(包括例如,逻辑160)来执行参考图3A所讨论的操作中的一项或多项。
参考图3A,在操作302处(初始化阶段),将距离列表的所有元素初始化为“MAXDISTANCE”(“最大距离”)。然后,将列表加载(操作304)到向量寄存器(KD_v)或另一存储设备(诸如,本文中所讨论的那些存储设备)中。在实施例中,贯穿KNN算法流的执行(例如,当方法300正在执行时)保持从最大到最小对该向量排序,从而例如增加查找速度。
在操作306(循环阶段/热点)处,方法300循环遍历数据库/所存储的样本向量,并将它们与测试向量进行比较。在每一次迭代中,计算距离,并随后将该距离与来自前一次迭代的“K”个最近距离的列表进行比较。
图3B示出了根据实施例的用于提供图3A的KNN方法的循环阶段的方法306的流程图。在一个实施例中,可以使用参考图1-2和5-7所讨论的各种组件(包括例如,逻辑160)来执行参考图3B所讨论的操作中的一项或多项。
参考图3B,在操作310(循环阶段1)处,计算/确定测试向量与当前的数据库向量之间的距离(D)。此阶段使用SIMD操作来执行。在操作312(循环阶段2)处,将标量值D传输/广播到新的向量寄存器(NewD_v)。此操作将D的值分配到NewD_v的所有元素。
在操作314(循环阶段3)处,使用SIMD操作来比较KD_v与NewD_v值,并且将结果存储在布尔向量寄存器(M_v)中。在操作314中,对于每一个索引'i',如果KD_v[i]大于NewD_v[i],则该比较将M_v[i]设置为'1',否则,将M_v[i]设置为'0'。由于在实施例中,从最大到最小来对KD_v排序,并且NewD_v的所有元素都具有相同值,因此,至多将有一个索引,在其中,M_v[i]!=M_v[i+1]。此索引(i)是经排序的列表中的新值的新索引。
在操作316(循环阶段4)处,使用SIMD操作将KD_v中大于新距离的所有元素都循环左移(向左选择/混洗元素)。这可以通过使用M_v作为合并掩码来合并KD_v与ShiftLeft(KD_v),或通过KD_v[i]=M_v[i]?KD_v[i+1]:KD_v[i]来实现,其中,“?”是指具有可以通过诸如“condition?evaluated-when-true:evaluated-when-false”之类的模板描述的函数的条件表达式的特殊三元算子,例如,在前述的表达中的情况下,“?”指示对于其M_v[i]为真(或1)的所有元素索引'i',KD_v[i]被左移位。
在操作318(循环阶段5)处,新距离D被存储在KD_v的第i元素中。为了这样做,通过将M_v与ShiftLeft(M_v)进行异或(XOR)来创建新掩码(MI_v)。由于至多可能会有一个索引(i)使得其中M_v[i]!=M_v[i+1],因此,MI_v将至多具有一个条目被设置为“1”。然后,通过使用MI_v作为合并掩码来合并KD_v与NewD_v从而将新距离’D’插入到KD_v[i],如下所示:NewD_v[i]=MI_v[i]?NewD_v[i]:KD_v[i]。
该方法的某种变体不仅返回K个最短距离,而且还返回最近邻的K个索引。为支持此,可以使用以与维护距离相同的方式来使用M_v和MI_v掩码,从而维护最近索引的列表。
图4示出根据实施例的用于改进的KNN方法的示例伪代码和对应的样本值。更具体而言,伪代码(在图4的左侧)演示根据一些实施例的KNN算法流的样本操作和数据,并示出在每一阶段之后(例如,参考图3A和3B所讨论的每一个阶段)的核寄存器值(在图4的右侧)。在图4的示例中,K(K最近邻)是5,D(距离)是7,而SIMD长度是8。
如本文中所讨论,KNN用于计算机视觉和机器学习解决方案中。由于距离计算是非常SIMD友好的,因此一些实施例在GPU或在专用VLIWDSP中被加速。使用由一些实施例提供的优化也将改善在GPU或专用DSP上运行的任何KNN实现的功耗和/或性能。
图5示出根据实施例的计算系统500的框图。计算系统500可包括一个或多个中央处理单元(CPU)或处理器502-1到502-P(其在本文中可以被称为“处理器502”或“诸处理器502”)。诸处理器502可以通过互连网络(或总线)504进行通信。处理器502可包括通用处理器、网络处理器(其处理通过计算机网络503传递的数据),或其他类型的处理器(包括精简指令集计算机(RISC)处理器或复杂指令集计算机(CISC))。
此外,处理器502还可以具有单核或多核设计。具有多核设计的处理器502可以将不同类型的处理器核集成在同一个集成电路(IC)管芯上。具有多核设计的处理器502还可以实现为对称的或不对称的多处理器。在实施例中,处理器502中的一个或多个可以与图1的处理器102相同或类似。在一些实施例中,处理器502中的一个或多个可包括图1的核106和逻辑160中的一个或多个。参考图1-4所讨论的操作也可以由系统500的一个或多个组件来执行。
芯片组506也可以与互连网络504进行通信。芯片组506可包括图形和存储器控制中枢(GMCH)508。GMCH508可包括与存储器512进行通信的存储器控制器510。存储器512可以存储数据,包括由处理器502或计算系统500中所包括的任何其他设备执行的指令序列。在一个实施例中,存储器512可以包括一个或多个易失性存储(或存储器)设备,诸如,随机存取存储器(RAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、静态RAM(SRAM)或其他类型的存储设备。还可以使用非易失性存储器,诸如,硬盘。附加的设备(诸如,多个CPU和/或多个系统存储器)可以经由互连网络504进行通信。
GMCH508也可以包括与显示设备516进行通信的图形接口514。在一个实施例中,图形接口514可以经由加速图形端口(AGP)或外围组件互连(PCI)(或PCI快速(PCIe)接口)来与显示设备516进行通信。在实施例中,显示设备516(诸如,平板显示器、阴极射线管(CRT)、投影屏,等等)可以通过例如信号转换器来与图形接口514进行通信,该信号转换器将存储在诸如视频存储器或系统存储器之类的存储设备中的图像的数字表示转换为由显示设备518解释和显示的显示信号。产生的显示信号在由显示设备516解释并随后显示在该显示设备516上之前可通过各种控制设备。
中枢接口518可以允许GMCH508与输入/输出控制中枢(ICH)520进行通信。ICH520可以向与计算系统500进行通信的I/O设备提供接口。ICH520可以通过外围桥(或控制器)524来与总线522通信,外围桥(或控制器)524诸如,外围组件互连(PCI)桥、通用串行总线(USB)控制器或其他类型的外围桥或控制器。桥524可以在处理器502与外围设备之间提供数据路径。可以使用其他类型的拓扑。此外,多个总线还可以例如通过多个桥或控制器来与ICH520进行通信。此外,在各实施例中,与ICH520进行通信的其他外围设备可包括,集成驱动器电子(IDE)或小型计算机系统接口(SCSI)硬驱动器、USB端口、键盘、鼠标、并行端口、串行端口、软盘驱动器、数字输出支持(例如,数字视频接口(DVI))或其他设备。
总线522可以与音频设备526、一个或多个盘驱动器528以及一个或多个网络接口设备530(它们与计算机网络503进行通信)进行通信。其他设备可以经由总线522进行通信。此外,在一些实施例中,各种组件(诸如,网络接口设备530)也可以与GMCH508进行通信。另外,可组合处理器502与GMCH508以形成单个芯片。此外,在其他实施例中,图形加速器(例如,AGP和/或PCI/PCIe图形器件)可以被包括在GMCH508内。
此外,计算系统500可包括易失性和/或非易失性存储器(或存储设备)。例如,非易失性存储器可包括下列各项中的一项或多项:只读存储器(ROM)、可编程ROM(PROM)、可擦PROM(EPROM)、电EPROM(EEPROM)、盘驱动器(例如,528)、软盘、紧致盘ROM(CD-ROM)、数字多功能盘(DVD)、闪存、磁光盘或能够存储电子数据(例如,包括指令)的其他类型的非易失性机器可读介质。在实施例中,系统500的组件可以按点对点(PtP)配置来安排。例如,处理器、存储器,和/或输入/输出设备可以通过数个点对点接口来互连。
图6示出根据实施例的按点对点(PtP)配置安排的计算系统600。具体而言,图6示出其中处理器、存储器以及输入/输出设备通过数个点对点接口来互连的系统。参考图1-5所讨论的操作可以由系统600的一个或多个组件来执行。
如图6所示,系统600可包括若干处理器,为清楚起见,仅示出其中的两个,即处理器602和604。处理器602和604各自可包括本地存储器控制器中枢(MCH)606和608以实现与存储器610和612的通信。存储器610和/或612可以存储各种数据,诸如,参考图5的存储器512所讨论的那些数据。处理器602和604也可包括图1的核106和逻辑160中的一个或多个。
在实施例中,处理器602和604可以是参考图5所讨论的处理器502中的一个。处理器602和604可以分别使用PtP接口电路616和618,经由点对点(PtP)接口614来交换数据。处理器602和604还可以各自使用点对点接口电路626、628、630和632,经由单独的PtP接口622和624来与芯片组620交换数据。芯片组620还可以进一步例如使用PtP接口电路637,经由高性能图形接口636来与高性能图形设备634交换数据。
在至少一个实施例中,参考图1-5所讨论的一个或多个操作可以由处理器602或604和/或系统600的其他组件(诸如,经由总线640进行通信的那些组件)来执行。然而,其他实施例可以存在于图6的系统600内的其他电路、逻辑单元或设备中。此外,可遍及图6中所示的若干电路、逻辑单元或设备来分布一些实施例。
芯片组620可以使用PtP接口电路641来与总线640进行通信。总线640可以具有与它进行通信的一个或多个设备,诸如,总线桥642和I/O设备643。经由总线644,总线桥642可以与其他设备进行通信,其他设备诸如,键盘/鼠标645,通信设备646(诸如,调制解调器、网络接口设备或可以与计算机网络503进行通信的其他通信设备)、音频I/O设备和/或数据存储设备648。数据存储设备648可以存储可以由处理器602和/或604执行的代码649。
在一些实施例中,本文中所讨论的组件中的一个或多个可以具体化为芯片上系统(SOC)设备。图7示出根据实施例的SOC封装的框图。如图7所示,SOC702包括一个或多个中央处理单元(CPU)核720、一个或多个图形处理器单元(GPU)核730、输入/输出(I/O)接口740以及存储器控制器742。SOC封装702的各种组件可以耦合到诸如本文中参考其他附图所讨论的互连或总线。SOC封装702还可包括更多或更少的组件,诸如,本文中参考其他附图所讨论的那些组件。此外,SOC封装720的每一个组件都可包括一个或多个其他组件,例如,参考本文中的其他附图所讨论的组件。在一个实施例中,在一个或多个集成电路(IC)管芯上提供SOC封装702(以及其组件),例如,SOC封装702(以及其组件)被封装进单个的半导体器件。
如图7所示,SOC封装702经由存储器控制器742被耦合到存储器760(其可以与本文中参考其他附图所讨论的存储器类似或相同)。在实施例中,存储器760(或它的部分)可以被集成在SOC封装702上。
I/O接口740可例如经由诸如本文中参考其他附图所讨论的互连和/或总线而耦合到一个或多个I/O设备770。I/O设备770可包括键盘、鼠标、触板、显示器、图像/视频捕捉设备(诸如,相机或摄录一体机/视频记录器)、触屏、扬声器等中的一个或多个。此外,在实施例中,SOC封装702可包括/集成逻辑160。或者,可以在SOC封装702的外部提供逻辑160(即,作为分立逻辑)。
以下示例关于进一步的实施例。示例1包括一种设备,其包括:逻辑,该逻辑用于至少部分地基于第一距离与第二距离的比较而导致以一个或多个SIMD操作来替换K最近邻(KNN)技术的一个或多个非SIMD(单指令多数据)部分,第一距离对应于KNN技术的当前迭代,并且第二距离对应于KNN技术的前一次迭代的最短距离。示例2包括示例1的设备,其中,所述逻辑导致KNN的一个或多个非SIMD部分的替换以避免KNN技术的内循环中的分支。示例3包括示例1的设备,其中,KNN技术的一个或多个非SIMD部分包括一个或多个标量操作。示例4包括示例1的设备,其中,在KNN技术的每一次迭代之后,一个或多个SIMD操作更新最近距离的列表。示例5包括示例4的设备,进一步包括用于存储列表的存储器。示例6包括示例1的设备,其中,VLIW(超长指令字)数字信号处理器(DSP)或GPU(图形处理单元)中的一个包括所述逻辑。示例7包括示例1的设备,其中,具有一个或多个处理器核的处理器包括所述逻辑。示例8包括示例1的设备,其中,所述逻辑、具有一个或多个处理器核的处理器以及存储器位于同一个集成器件上。
示例9包括一种方法,该方法包括:至少部分地基于第一距离与第二距离的比较而导致以一个或多个SIMD操作来替换K最近邻(KNN)技术的一个或多个非SIMD(单指令多数据)部分,第一距离对应于KNN技术的当前迭代,并且第二距离对应于KNN技术的前一次迭代的最短距离。示例10包括示例9的方法,进一步包括:导致KNN的一个或多个非SIMD部分的替换以避免KNN技术的内循环中的分支。示例11包括示例9的方法,其中,KNN技术的一个或多个非SIMD部分包括一个或多个标量操作。示例12包括示例9的方法,进一步包括,在KNN技术的每一次迭代之后,一个或多个SIMD操作更新最近距离的列表。示例13包括示例12的方法,进一步包括将列表存储在存储器中。示例14包括示例9的方法,其中,替换操作由VLIW(超长指令字)数字信号处理器(DSP)或GPU(图形处理单元)中的一个执行。
示例15包括其中包括一条或多条指令的计算机可读介质,当在处理器上执行所述一条或多条指令时,所述一条或多条指令将所述处理器配置为执行一个或多个操作以:至少部分地基于第一距离与第二距离的比较而导致以一个或多个SIMD操作来替换K最近邻(KNN)技术的一个或多个非SIMD(单指令多数据)部分,第一距离对应于KNN技术的当前迭代,并且第二距离对应于KNN技术的前一次迭代的最短距离。示例16包括示例15的计算机可读介质,进一步包括一条或多条指令,当在处理器上执行所述一条或多条指令时,所述一条或多条指令将所述处理器配置为执行一个或多个操作以:导致KNN的一个或多个非SIMD部分的替换以避免KNN技术的内循环中的分支。示例17包括示例15的计算机可读介质,其中,KNN技术的一个或多个非SIMD部分包括一个或多个标量操作。示例18包括示例15的计算机可读介质,进一步包括一条或多条指令,当在处理器上执行所述一条或多条指令时,所述一条或多条指令将所述处理器配置为执行一个或多个操作以导致在KNN技术的每一次迭代之后,一个或多个SIMD操作更新最近距离的列表。示例19包括示例15的计算机可读介质,进一步包括一条或多条指令,当在处理器上执行所述一条或多条指令时,所述一条或多条指令将所述处理器配置为执行一个或多个操作以导致将列表存储在存储器中。示例20包括示例15的计算机可读介质,其中,替换操作由VLIW(超长指令字)数字信号处理器(DSP)或GPU(图形处理单元)中的一个执行。
示例21包括一种系统,该包括:处理器,其具有一个或多个处理器核;显示设备,其耦合到所述处理器,并且用于显示一个或多个图像;以及逻辑,所述逻辑用于至少部分地基于第一距离与第二距离的比较而导致以一个或多个SIMD操作来替换K最近邻(KNN)技术的一个或多个非SIMD(单指令多数据)部分,第一距离对应于KNN技术的当前迭代,并且第二距离对应于KNN技术的前一次迭代的最短距离。示例22包括示例21的系统,其中,所述逻辑导致KNN的一个或多个非SIMD部分的替换以避免KNN技术的内循环中的分支。示例23包括示例21的系统,其中,KNN技术的一个或多个非SIMD部分包括一个或多个标量操作。示例24包括示例21的系统,其中,在KNN技术的每一次迭代之后,一个或多个SIMD操作更新最近距离的列表。示例25包括示例24的系统,进一步包括用于存储列表的存储器。示例26包括示例21的系统,其中,VLIW(超长指令字)数字信号处理器(DSP)或GPU(图形处理单元)中的一个包括所述逻辑。示例27包括示例21的系统,其中,所述处理器包括所述逻辑。示例28包括示例21的系统,其中,所述逻辑、所述处理器以及存储器位于同一个集成器件上。
示例29包括设备,该设备包括用于执行前述任何一个示例中阐述的方法的装置。
示例30包括机器可读存储设备,其包括机器可读指令,当执行所述机器可读指令时,所述机器可读指令实现前述任何一个示例中阐述的方法或设备。
在各实施例中,本文中(例如,参考图1-7)所讨论的操作可以实现为硬件(例如,逻辑电路)、软件、固件、或它们的组合,它们可以作为计算机程序产品提供,例如,包括有形的机器可读或计算机可读介质,该有形的机器可读或计算机可读介质在其上存储有指令(或软件过程),这些指令(或软件过程)用于对计算机编程以执行本文中所讨论的进程。机器可读介质可包括存储设备,诸如,参考图1-7所讨论的那些存储设备。
另外,此类计算机可读介质还可以作为计算机程序产品被下载,其中,经由通信链路(例如,总线、调制解调器和/或网络连接),通过在载波或其他传播介质中提供的数据信号,可将程序从远程计算机(例如,服务器)传输到请求计算机(例如,客户机)。
说明书中对“一个实施例”、“实施例”的引用意味着结合该实施例描述的特定特征、结构或特性可以被包括在至少一个实现中。在本说明书中的不同位置出现短语“在一个实施例中”可以或可以不都是指同一个实施例。
此外,在说明书和权利要求书中,可使用术语“耦合的”和“连接的”及其衍生词。在一些实施例中,可以使用“连接的”来指示两个或更多个元件彼此直接物理或电接触。“耦合的”可表示两个或更多个元件直接物理或电接触。然而,“耦合的”也可表示两个或更多个元件可以不彼此直接接触,但是仍然彼此协作或相互作用。
如此,尽管已经用对结构特征和/或方法动作专用的语言描述了各实施例,但可以理解,要求保护的主题可以不限于所描述的这些特定特征或动作。相反,特定特征和动作作为实现所要求保护的主题的样本形式而公开。
Claims (24)
1.一种用于改进SIMD(单指令多数据)K最近邻实现的设备,所述设备包括:
逻辑,所述逻辑用于至少部分地基于第一距离与第二距离的比较而导致以一个或多个SIMD操作来替换K最近邻(KNN)技术的一个或多个非SIMD(单指令多数据)部分,所述第一距离对应于所述KNN技术的当前迭代,并且所述第二距离对应于所述KNN技术的前一次迭代的最短距离。
2.如权利要求1所述的设备,其特征在于,所述逻辑用于导致所述KNN技术的所述一个或多个非SIMD部分的替换以避免在所述KNN技术的内循环中的分支。
3.如权利要求1所述的设备,其特征在于,所述KNN技术的所述一个或多个非SIMD部分包括一个或多个标量操作。
4.如权利要求1所述的设备,其特征在于,在所述KNN技术的每一次迭代之后,所述一个或多个SIMD操作更新最近距离的列表。
5.如权利要求4所述的设备,进一步包括用于存储所述列表的存储器。
6.如权利要求1所述的设备,其特征在于,VLIW(超长指令字)数字信号处理器(DSP)或GPU(图形处理单元)中的一个包括所述逻辑。
7.如权利要求1所述的设备,其特征在于,具有一个或多个处理器核的处理器包括所述逻辑。
8.如权利要求1所述的设备,其特征在于,所述逻辑、具有一个或多个处理器核的处理器以及存储器位于同一个集成器件上。
9.一种用于改进SIMD(单指令多数据)K最近邻实现的方法,所述方法包括:
至少部分地基于第一距离与第二距离的比较而导致以一个或多个SIMD操作来替换K最近邻(KNN)技术的一个或多个非SIMD(单指令多数据)部分,所述第一距离对应于所述KNN技术的当前迭代,并且所述第二距离对应于所述KNN技术的前一次迭代的最短距离。
10.如权利要求9所述的方法,其特征在于,进一步包括:导致所述KNN技术的所述一个或多个非SIMD部分的替换以避免所述KNN技术的内循环中的分支。
11.如权利要求9所述的方法,其特征在于,所述KNN技术的所述一个或多个非SIMD部分包括一个或多个标量操作。
12.如权利要求9所述的方法,进一步包括:在所述KNN技术的每一次迭代之后,所述一个或多个SIMD操作更新最近距离的列表。
13.如权利要求12所述的方法,进一步包括将所述列表存储在存储器中。
14.如权利要求9所述的方法,其特征在于,所述替换操作由VLIW(超长指令字)数字信号处理器(DSP)或GPU(图形处理单元)中的一个执行。
15.一种用于改进SIMD(单指令多数据)K最近邻实现的系统,所述系统包括:
处理器,所述处理器具有一个或多个处理器核;
显示设备,所述显示设备耦合到所述处理器,并且用于显示一个或多个图像;以及
逻辑,所述逻辑用于至少部分地基于第一距离与第二距离的比较而导致以一个或多个SIMD操作来替换K最近邻(KNN)技术的一个或多个非SIMD(单指令多数据)部分,所述第一距离对应于所述KNN技术的当前迭代,并且所述第二距离对应于所述KNN技术的前一次迭代的最短距离。
16.如权利要求15所述的系统,其特征在于,所述逻辑导致所述KNN技术的所述一个或多个非SIMD部分的替换以避免所述KNN技术的内循环中的分支。
17.如权利要求15所述的系统,其特征在于,所述KNN技术的所述一个或多个非SIMD部分包括一个或多个标量操作。
18.如权利要求15所述的系统,其特征在于,在所述KNN技术的每一次迭代之后,所述一个或多个SIMD操作更新最近距离的列表。
19.如权利要求18所述的系统,进一步包括用于存储所述列表的存储器。
20.如权利要求15所述的系统,其特征在于,VLIW(超长指令字)数字信号处理器(DSP)或GPU(图形处理单元)中的一个包括所述逻辑。
21.如权利要求15所述的系统,其特征在于,所述处理器包括所述逻辑。
22.如权利要求15所述的系统,其特征在于,所述逻辑、所述处理器以及存储器位于同一个集成器件上。
23.一种机器可读介质,包括代码,所述代码在被执行时导致机器执行如权利要求9-14中的任一项所述的方法。
24.一种设备,包括用于执行如权利要求9-14中的任一项所述的方法的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/570,413 US10042813B2 (en) | 2014-12-15 | 2014-12-15 | SIMD K-nearest-neighbors implementation |
US14/570,413 | 2014-12-15 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105700855A true CN105700855A (zh) | 2016-06-22 |
CN105700855B CN105700855B (zh) | 2018-09-21 |
Family
ID=56082628
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510769833.9A Active CN105700855B (zh) | 2014-12-15 | 2015-11-11 | 用于改进simd knn实现的设备、方法、系统和机器可读介质 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10042813B2 (zh) |
CN (1) | CN105700855B (zh) |
DE (1) | DE102015014800A1 (zh) |
TW (1) | TWI587137B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10042813B2 (en) | 2014-12-15 | 2018-08-07 | Intel Corporation | SIMD K-nearest-neighbors implementation |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2023030745A (ja) * | 2021-08-24 | 2023-03-08 | 富士通株式会社 | 計算機および計算方法 |
US11729273B2 (en) * | 2022-01-05 | 2023-08-15 | International Business Machines Corporation | Adjusting idle timeout for a session |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020039446A1 (en) * | 1999-05-17 | 2002-04-04 | Umberto Santoni | Pattern recognition based on piecewise linear probability density function |
US7483573B2 (en) * | 2002-07-26 | 2009-01-27 | Koenig & Gauer Aktiengesellschaft | Method for evaluating the signals of an electronic image sensor during pattern recognition of image contents in a test piece |
CN102576304A (zh) * | 2009-06-19 | 2012-07-11 | 奇异计算有限公司 | 使用紧凑的运算处理元件进行处理 |
US20120179704A1 (en) * | 2009-09-16 | 2012-07-12 | Nanyang Technological University | Textual query based multimedia retrieval system |
WO2014143802A1 (en) * | 2013-03-15 | 2014-09-18 | Citrix Systems, Inc. | Managing computer server capacity |
US20140334721A1 (en) * | 2013-05-10 | 2014-11-13 | Tantrum Street LLC | Methods and apparatus for capturing, processing, training, and detecting patterns using pattern recognition classifiers |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5717947A (en) * | 1993-03-31 | 1998-02-10 | Motorola, Inc. | Data processing system and method thereof |
US6374349B2 (en) * | 1998-03-19 | 2002-04-16 | Mcfarling Scott | Branch predictor with serially connected predictor stages for improving branch prediction accuracy |
US6173388B1 (en) * | 1998-04-09 | 2001-01-09 | Teranex Inc. | Directly accessing local memories of array processors for improved real-time corner turning processing |
US7219213B2 (en) * | 2004-12-17 | 2007-05-15 | Intel Corporation | Flag bits evaluation for multiple vector SIMD channels execution |
JP2009151896A (ja) * | 2007-12-21 | 2009-07-09 | Sony Corp | 画像処理装置、動画再生装置、これらにおける処理方法およびプログラム |
US8775153B2 (en) * | 2009-12-23 | 2014-07-08 | Intel Corporation | Transitioning from source instruction set architecture (ISA) code to translated code in a partial emulation environment |
US10042813B2 (en) | 2014-12-15 | 2018-08-07 | Intel Corporation | SIMD K-nearest-neighbors implementation |
-
2014
- 2014-12-15 US US14/570,413 patent/US10042813B2/en not_active Expired - Fee Related
-
2015
- 2015-10-28 TW TW104135445A patent/TWI587137B/zh active
- 2015-11-11 CN CN201510769833.9A patent/CN105700855B/zh active Active
- 2015-11-13 DE DE102015014800.1A patent/DE102015014800A1/de active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020039446A1 (en) * | 1999-05-17 | 2002-04-04 | Umberto Santoni | Pattern recognition based on piecewise linear probability density function |
US7483573B2 (en) * | 2002-07-26 | 2009-01-27 | Koenig & Gauer Aktiengesellschaft | Method for evaluating the signals of an electronic image sensor during pattern recognition of image contents in a test piece |
CN102576304A (zh) * | 2009-06-19 | 2012-07-11 | 奇异计算有限公司 | 使用紧凑的运算处理元件进行处理 |
US20120179704A1 (en) * | 2009-09-16 | 2012-07-12 | Nanyang Technological University | Textual query based multimedia retrieval system |
WO2014143802A1 (en) * | 2013-03-15 | 2014-09-18 | Citrix Systems, Inc. | Managing computer server capacity |
US20140334721A1 (en) * | 2013-05-10 | 2014-11-13 | Tantrum Street LLC | Methods and apparatus for capturing, processing, training, and detecting patterns using pattern recognition classifiers |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10042813B2 (en) | 2014-12-15 | 2018-08-07 | Intel Corporation | SIMD K-nearest-neighbors implementation |
Also Published As
Publication number | Publication date |
---|---|
TW201633147A (zh) | 2016-09-16 |
TWI587137B (zh) | 2017-06-11 |
US20160170771A1 (en) | 2016-06-16 |
US10042813B2 (en) | 2018-08-07 |
DE102015014800A1 (de) | 2016-06-16 |
CN105700855B (zh) | 2018-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10853276B2 (en) | Executing distributed memory operations using processing elements connected by distributed channels | |
US7617384B1 (en) | Structured programming control flow using a disable mask in a SIMD architecture | |
US8615646B2 (en) | Unanimous branch instructions in a parallel thread processor | |
US10089229B2 (en) | Cache allocation with code and data prioritization | |
EP3388940B1 (en) | Parallel computing architecture for use with a non-greedy scheduling algorithm | |
US9946549B2 (en) | Register renaming in block-based instruction set architecture | |
TW201702866A (zh) | 用戶等級分叉及會合處理器、方法、系統及指令 | |
EP3394737B1 (en) | Processing devices to perform a key value lookup instruction | |
CN109308191B (zh) | 分支预测方法及装置 | |
CN108475192B (zh) | 分散减少指令 | |
US20160335322A1 (en) | Automatic generation of multi-source breadth-first search from high-level graph language | |
WO2017185404A1 (zh) | 一种用于执行向量逻辑运算的装置及方法 | |
CN112783554A (zh) | 用于程序间数据交换的持久便签内存 | |
CN105164637A (zh) | 对管线化的软件的动态优化 | |
CN105700855A (zh) | 改进的simd k最近邻实现 | |
CN108292217A (zh) | 用于结构阵列的向量存储/加载指令 | |
CN108604107A (zh) | 用于基于指令类型调整最大时钟频率的处理器、方法和系统 | |
US9311270B2 (en) | Scheduler and scheduling method for reconfigurable architecture | |
CN108475242B (zh) | 冲突掩码生成 | |
US20210318908A1 (en) | Graph partitioning to exploit batch-level parallelism | |
US20230126594A1 (en) | Instruction generating method, arithmetic processing device, and instruction generating device | |
US20210319369A1 (en) | Multi-level caching for dynamic deep learning models | |
US11880669B2 (en) | Reducing compiler type check costs through thread speculation and hardware transactional memory | |
US20240118899A1 (en) | Scalarization of instructions for simt architectures | |
CN108475253A (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 |