CN103197953A - 推测执行和回滚 - Google Patents

推测执行和回滚 Download PDF

Info

Publication number
CN103197953A
CN103197953A CN2012104365354A CN201210436535A CN103197953A CN 103197953 A CN103197953 A CN 103197953A CN 2012104365354 A CN2012104365354 A CN 2012104365354A CN 201210436535 A CN201210436535 A CN 201210436535A CN 103197953 A CN103197953 A CN 103197953A
Authority
CN
China
Prior art keywords
instruction
threads
sets
rollback
thread
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
Application number
CN2012104365354A
Other languages
English (en)
Other versions
CN103197953B (zh
Inventor
杰克·希莱尔·肖凯特
奥利维尔·吉普
罗伯特·J·斯托尔
仇小钢
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.)
Nvidia Corp
Original Assignee
Nvidia 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 Nvidia Corp filed Critical Nvidia Corp
Publication of CN103197953A publication Critical patent/CN103197953A/zh
Application granted granted Critical
Publication of CN103197953B publication Critical patent/CN103197953B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)

Abstract

本发明的一个实施例阐述了一种用于推测性地发送指令以允许处理管线在其他指令的回滚期间继续处理一些指令的技术。调度器电路发送指令用于执行,假设几个循环后,当指令到达多线程执行单元时,指令之间的这种相关性将被解析,资源将可用,操作数数据将可用并且其他条件将不会防止指令的执行。当在特定线程组的指令的执行点处存在回滚条件时,不把指令分派到多线程执行单元。然而,由调度器电路发送以供不同线程组执行的且不存在回滚条件的其他指令被多线程执行单元执行。在回滚条件不再存在后,重新发送引发回滚条件的指令。

Description

推测执行和回滚
技术领域
本发明总地涉及计算任务的执行,并且更具体地涉及指令的推测执行(speculative execution)和回滚(rollback)。
背景技术
传统的管线化处理器已经执行对条件分支指令的推测执行,这是通过预测条件分支的哪一侧将被执行而实现的。当该预测不正确时,指令被回滚,使得可执行条件分支的另一侧。当指令被回滚时,处理管线的管线阶段是空闲的,直到条件分支的另一侧的指令到达那些管线阶段。
因此,本领域所需要的是一种允许处理管线在其他指令的回滚期间继续处理一些指令的用于推测性地发送指令的系统和方法。重要的是,推测执行不应该限于条件分支指令。
发明内容
一种用于推测性地发送指令的系统和方法,其允许处理管线在其他指令的回滚期间继续处理一些指令。调度器电路发送指令以供多线程执行单元执行,假设几个循环后,当指令到达多线程执行单元时,指令之间的这种相关性将被解析,资源将可用,操作数数据将可用并且其他条件将不会阻止指令的执行。当在特定线程组的指令的执行点处存在回滚条件时,不把指令分派到多线程执行单元。然而,由调度器电路发送以供不同线程组执行的且不存在回滚条件的其他指令被多线程执行单元执行。在回滚条件不再存在后,重新发送引发回滚条件的指令。
用于执行推测发送的指令的回滚的本发明的方法的多个实施例包括发送第一线程组的第一指令集和发送第二线程组的第二指令集。在所述第一指令集中的指令的预执行处理期间检测所述第一线程组中的至少一个线程的回滚条件,并且停止发送所述第一线程组的附加指令。丢弃所述第一指令集中已经发送的且尚未执行的进行中(in-flight)指令,并且执行所述第二线程组的所述第二指令集。
本发明的多个实施例包括一种用于执行推测发送的指令的回滚的系统。所述系统包括存储器、调度器单元、分派单元和多个执行单元。存储器被配置成存储第一线程组的第一指令集和第二线程组的第二指令集。调度器单元被配置成:发送第一线程组的第一指令集;发送第二线程组的第二指令集;并且当检测到回滚条件时停止发送所述第一线程组的附加指令。分派单元被配置成:在所述第一指令集中的指令的预执行处理期间检测所述第一线程组中的至少一个线程的回滚条件;并且丢弃所述第一指令集中已经发送的且尚未执行的进行中指令。多个执行单元被配置成执行所述第二线程组的所述第二指令集。
重要的是,指令的推测执行不限于条件分支指令。调度器电路不解码指令,因此不执行预测操作。晚至在执行点处,如果特定线程组的任何指令引发回滚条件,则不执行指令并且针对该指令和已经发送给特定线程组的其他指令执行回滚。
附图说明
因此,可以详细地理解上述列举的本发明的特征,并且可以参考实施例得到对如上面所概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应该注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,因为本发明可以承认其他等效的实施例。
图1是示出了经配置以实现本发明一个或多个方面的计算机系统的框图;
图2是根据本发明一个实施例的用于图1的计算机系统的并行处理子系统的框图;
图3A是根据本发明一个实施例的图2的前端的框图;
图3B是根据本发明一个实施例的在图2的一个并行处理单元内的通用处理集群的框图;
图3C是根据本发明的一个实施例的图3B的流多处理器(SM:streaming multiprocessor)的一部分的框图;
图4A示出了根据本发明的一个实施例的推测指令发送和指令回滚方法;以及
图4B示出了根据本发明的一个实施例的推测指令发送和部分指令回滚方法。
具体实施方式
在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,对本领域的技术人员显而易见的是本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他例子中,没有描述公知的特征以避免对本发明造成混淆。
系统概述
图1是示出了经配置以实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU)102和经由可以包括存储器桥105的互连路径通信的系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由路径106和存储器桥105将所述输入转发到CPU 102。并行处理子系统112经由总线或其他通信路径113(例如PCI Express、加速图形端口或超传输链路)耦合到存储器桥105;在一个实施例中,并行处理子系统112是将像素传递到显示设备110(例如传统的基于CRT或LCD的监视器)的图形子系统。系统盘114也连接到I/O桥107。开关116提供I/O桥107与诸如网络适配器118以及各种外插卡120和121的其他组件之间的连接。其他组件(未明确示出),包括USB或其他端口连接、CD驱动器、DVD驱动器、胶片录制设备及类似组件,也可以连接到I/O桥107。使图1中各种组件互连的通信路径可以使用任何适合的协议实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且不同设备间的连接可使用本领域已知的不同协议。
在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成起来,诸如存储器桥105、CPU 102以及I/O桥107,以形成片上系统(SoC)。
应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数量和布置、CPU 102的数量以及并行处理子系统112的数量,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU 102而不是通过桥,并且其他设备经由存储器桥105和CPU 102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU 102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上。大量实施例可以包括两个或两个以上的CPU 102以及两个或两个以上的并行处理系统112。本文所示的特定组件是可选的;例如,任意数量的外插卡或外围设备都可能得到支持。在一些实施例中,开关116被去掉,网络适配器118和外插卡120、121直接连接到I/O桥107。
图2示出了根据本发明一个实施例的并行处理子系统112。如图所示,并行处理子系统112包括一个或多个并行处理单元(PPU)202,每个并行处理单元202都耦合到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实体以标识该对象的附图标记和需要时标识所述实体的括号中的数字来表示。)PPU 202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
再参考图1,在一些实施例中,并行处理子系统112的一些或所有PPU 202是具有渲染管线的图形处理器,它可以经配置以执行与下述相关的各种操作:经由存储器桥105和总线113从CPU 102和/或系统存储器104所提供的图形数据生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常用帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU 202以及包括一个或多个用于通用计算的其他PPU 202。这些PPU可以是相同的或不同的,并且每个PPU均可具有其自己的专用并行处理存储器设备或不具有专用的并行处理存储器设备。一个或多个PPU 202可输出数据到显示设备110,或者每个PPU 202均可输出数据到一个或多个显示设备110。
在操作中,CPU 102是计算机系统100的主处理器,控制和协调其他系统组件的操作。具体地,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102为每个PPU 202写入命令流到数据结构中(在图1或图2中未明确示出),所述数据结构可位于系统存储器104、并行处理存储器204、或CPU 102和PPU 202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以启动对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU 102的操作异步地执行命令。可以为每个入栈缓冲区指定执行优先权以控制对不同入栈缓冲区的调度。
现在返回参考图2B,每个PPU 202均包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU 102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU 202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可作为外插卡来实现,所述外插卡可被插入到计算机系统100的扩展槽中。在其他实施例中,PPU 202可以和诸如存储器桥105或I/O桥107的总线桥一起集成在单个芯片上。而在其他实施例中,PPU 202的一些或所有元件可以和CPU 102一起集成在单个芯片上。
在一个实施例中,通信路径113是PCI-EXPRESS链路,如本领域所知的,在PCI-EXPRESS链路中专用通道被分配到每个PPU 202。I/O单元205生成用于在通信路径113上传输的数据包(或其他信号),并且还从通信路径113接收所有传入的数据包(或其他信号),将传入的数据包引导到PPU 202的适当组件。例如,可将与处理任务有关的命令引导到主机接口206,而可将与存储器操作有关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
有利地,每个PPU 202都实现高度并行处理架构。如详细示出的,PPU 202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC 208都能够并发执行大量的(例如,几百或几千)线程,其中每个线程均是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于执行不同类型的计算。取决于因每种类型的程序或计算所产生的工作量,GPC 208的分配可以变化。
GPC 208从任务/工作单元207内的工作分布单元来接收将要执行的处理任务。所述工作分布单元接收指向被编码为队列元数据(QMD)并存储在存储器中的计算处理任务的指针。指向QMD的指针被包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以被编码为QMD的处理任务包括将被处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个QMD所指定的处理启动前,将GPC 208配置为有效状态。可以为每个QMD指定用来调度处理任务的执行的优先权。
存储器接口214包括D个分区单元215,每个分区单元215均直接耦合到一部分并行处理存储器204,其中D≥1。如所示的,分区单元215的数量一般等于DRAM 220的数量。在其他实施例中,分区单元215的数量也可以不等于存储器设备的数量。本领域的技术人员应该理解DRAM 220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM 220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
任意一个GPC 208都可以处理将要被写到并行处理存储器204内的任意DRAM 220的数据。交叉开关单元210经配置以路由每个GPC 208的输出到任意分区单元215的输入或到另一个GPC 208用于进一步处理。GPC 208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC 208内的处理内核能够与系统存储器104或对于PPU 202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC 208与分区单元215之间的业务流。
另外,GPC 208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色、顶点着色、几何着色、和/或像素着色程序)等等。PPU 202可将数据从系统存储器104和/或本地并行处理存储器204传送到内部(片上)存储器中,处理所述数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统组件访问,所述其他系统组件包括CPU 102或另一个并行处理子系统112。
PPU 202可配备有任意容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任意组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU 202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU 202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU 202可被集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI-EXPRESS)的分立芯片提供,所述高速链路经由桥式芯片或其他通信方式将PPU 202连接到系统存储器。
如上所述,并行处理子系统112可以包括任意数量的PPU 202。例如,可在单个外插卡上提供多个PPU 202、或可将多个外插卡连接到存储路径113、或可将一个或多个PPU 202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此相同或不同。例如,不同的PPU 202可能具有不同数量的处理内核、不同容量的本地并行处理存储器等等。在出现多个PPU 202的情况下,可并行操作那些PPU从而以高于单个PPU 202所可能达到的吞吐量来处理数据。包含一个或多个PPU 202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
多个并发任务调度
可以在GPC 208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务以由GPC 208执行。
图3A是根据本发明一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级来组织将要被调度的任务。对于每个优先级,任务管理单元300将指向对应于任务的QMD 322的指针链表存储在调度器表321中。可以将QMD 322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务以执行的速度是解耦的,这使得任务管理单元300能够基于优先权信息或使用其他技术来调度任务。
工作分布单元340包括具有槽的任务表345,每个槽均可以被正在被执行的任务的QMD 322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务以执行。当没有空闲槽时,没有占用槽的较高优先权任务可以驱逐占用槽的较低优先权任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将该任务添加到调度器表321中的链表。当生成子处理任务时,将该子任务添加到调度器表321中的链表。当任务被驱逐时,从槽移除该任务。
任务处理概述
图3B是根据本发明一个实施例的、图2的一个PPU 202内的GPC 208的框图。每个GPC 208可被配置为并行地执行大量线程,其中术语“线程”是指对特定的一组输入数据执行的特定程序的实例。在一些实施例中,采用单指令多数据(SIMD)指令发送技术来支持大量线程的并行执行,而无需提供多个独立指令单元。在另一些实施例中,采用单指令多线程(SIMT)技术,使用被配置为发送指令到每一个GPC 208内一组处理引擎的公共指令单元,来支持大量通常同步化的线程的并行执行。不同于其中所有处理引擎一般都执行相同指令的SIMD执行机制,SIMT执行允许不同的线程更容易跟随(follow)通过给定线程程序的发散的执行路径。本领域普通技术人员将理解的是,SIMD处理机制代表SIMT处理机制的功能子集。
经由管线管理器305来有利地控制GPC 208的操作,所述管线管理器305将处理任务分布到流多处理器(SM)310。管线管理器305也可被配置为通过为由SM 310输出的处理后的数据指定目的地来控制工作分布交叉开关330。
在一个实施例中,每个GPC 208均包括M个SM 310,其中M≥1,每个SM 310均被配置为处理一个或多个线程组。而且,每个SM 310有利地还包括同样的一组可被管线化的功能执行单元(在图3C中示为Exec单元302),从而允许在前一个指令结束之前发送新的指令,如本领域所已公知的。可提供功能执行单元的任何组合。在一个实施例中,这些功能单元支持多种运算,包括整数和浮点算法(例如,加法和乘法)、比较运算、布尔运算(AND、OR、XOR)、移位以及各种代数函数的计算(例如,平面插值、三角、指数和对数函数等);并且相同的功能单元硬件可均衡地用于(be leveraged to)执行不同运算。
传送到特定GPC 208的指令序列构成线程,如本文前面所定义的,并且跨SM 310内并行处理引擎(未示出)的一定数量并发执行的线程的集合在本文中被称为“卷绕包(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同的输入数据并发执行同一程序的一组线程,且该组中有一个线程被分配给SM 310内不同的处理引擎。线程组可包括比SM 310内处理引擎的数量少的线程,在此情况下,在正在处理该线程组的周期内,一些处理引擎将处于空闲状态。线程组也可包括比SM 310内处理引擎的数量多的线程,在此情况下,处理将在连续的时钟周期上进行。由于每个SM 310可以支持多达G个线程组并发执行,所以在任一给定时间都可以允许多达G×M个线程组在GPC 208中执行。
另外,在SM 310内,多个相关的线程组可同时活动(处于不同执行阶段)。这种线程组的集合在本文中被称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m×k,其中k是线程组中并发执行的线程的数量,并且一般是SM 310内处理引擎的数量的整数倍,m是SM 310内同时活动的线程组的数量。CTA的大小通常由编程人员和CTA可用的硬件资源例如存储器或寄存器的容量决定。
每个SM 310均包括一级(L1)高速缓存(在图3C中示出),或使用在SM 310之外对应的L1高速缓存中用以执行加载和存储操作的空间。每个SM 310也有权访问二级(L2)高速缓存,它们在所有GPC 208之间被共享并且可用于在线程之间传送数据。最后,SM 310也有权访问片外“全局”存储器,该存储器可以包括例如并行处理存储器204和/或系统存储器104。应予以理解的是,PPU 202外部的任何存储器都可被用作全局存储器。此外,一点五级(L1.5)高速缓存335可被包括在GPC 208之内,被配置为经由存储器接口214来接收和保持从存储器中获取的、SM 310所请求的数据,包括指令、一致性(uniform)数据以及常数数据,以及向SM 310提供所请求的数据。在GPC 208中具有多个SM 310的实施例有利地共享被高速缓存于L1.5高速缓存335中的公共指令和数据。
每个GPC 208可包括存储器管理单元(MMU)328,该单元被配置为将虚拟地址映射到物理地址。在另一些实施例中,MMU 328可处于存储器接口214内。MMU 328包括一组页表条目(PTE)以及可选地包括高速缓存线索引(cache line index),该组PTE被用于将虚拟地址映射到像素块(tile)的物理地址。MMU 328可包括地址转译后备缓冲区(translationlookaside buffer,TLB)或高速缓存,其可处于多处理器SM 310或L1高速缓存或GPC 208内。物理地址被处理为分布表面数据访问位置以允许在分区单元之间交错的高效请求。高速缓存线索引可用于确定对于高速缓存线的请求是否命中或未命中。
在图形和计算应用中,GPC 208可被配置为使得每个SM 310耦合至纹理单元315,用于执行纹理映射操作,例如,确定纹理采样位置、读取纹理数据以及过滤纹理数据。纹理数据是从内部纹理L1高速缓存(未示出)读取的,或者在一些实施例中是从SM 310内的L1高速缓存读取的,并且根据需要从L2高速缓存、并行处理存储器204或系统存储器104获取。每个SM 310将处理后的任务输出到工作分布交叉开关330,以便将处理后的任务提供到另一个GPC 208用于进一步处理,或者经由交叉开关单元210将处理后的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中。preROP(pre-raster operations,预光栅操作)325被配置为从SM 310接收数据,将数据引向分区单元215中的ROP单元,并执行对色彩混合的优化、组织像素色彩数据以及执行地址转译。
应予以理解的是,本文所描述的内核架构是例示性的,可以对其进行各种变形和修改。GPC 208内可包含有任何数量的处理单元,例如,SM 310或纹理单元315、preROP 325。此外,虽然仅示出了一个GPC 208,但PPU202可包含任何数量的GPC 208,这些GPC 208最好在功能上彼此相似,以使执行行为不依赖于接收具体处理任务的GPC 208。此外,每个GPC 208最好使用单独的且各异的处理单元、L1高速缓存等,相对于其他GPC 208独立地操作。
本领域普通技术人员应理解的是,图1、2、3A和3B中所描述的架构决非限制本发明的范围,并且在不脱离本发明的范围的情况下,本文所教导的技术可在任何适当配置的处理单元上实施,这些处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU 202、一个或多个GPC 208、一个或多个图形或专用处理单元等。
在本发明的实施例中,所期望的是,用PPU 202或计算系统的其他处理器使用线程阵列来执行通用计算。给线程阵列中的每个线程分配唯一的线程标识符(“线程ID”),所述线程标识符在线程执行期间可由该线程访问。线程ID可以被定义为一维或多维数值,控制线程的处理行为的各个方面。例如,线程ID可用于确定线程输入数据集中将要处理的部分和/或确定线程输出数据集中将要生成或写入的部分。
每线程的指令序列可包含至少一个指令,所述至少一个指令定义线程阵列中代表性线程和一个或多个其他线程之间的协作行为。例如,每线程的指令序列可能包含下列指令:指示在序列中的特定点处暂定执行代表性线程的操作直至一个或多个其他线程到达该特定点时为止的指令;指示代表性线程将数据存储在一个或多个其他线程有权访问的共享存储器中的指令;指示代表性线程自动读取和更新存储在共享存储器中的数据的指令,一个或多个其他线程基于它们的线程ID有权访问所述共享存储器;等等。CTA程序也可以包含计算将从中读取数据的共享存储器中的地址的指令,其中地址为线程ID的函数。通过定义合适的功能并提供同步技术,可以以可预测的方式通过CTA的一个线程将数据写入到共享存储器中的给定位置,并且通过同一CTA的不同线程从该位置读取出来。因此,线程之间任何期望模式的数据共享都可以得到支持,并且CTA中的任何线程都可以与同一CTA中的任何其他线程共享数据。CTA的线程之间如果存在数据共享,则数据共享的程度由CTA程序决定;因而,应予以理解的是,在使用CTA的具体应用中,取决于CTA程序,CTA的线程实际上可能彼此共享或者不共享数据,并且术语“CTA”和“线程阵列”在本文中具有相同含义。
推测指令发送和回滚
图3C为根据本发明的一个实施例的、图3B的SM 310的框图。该SM310包括指令L1高速缓存370,其被配置为经由L1.5高速缓存335从存储器接收指令。Warp调度器和指令单元312从指令L1高速缓存370接收指令并且把指令发送到指令管线324。指令发送过程是推测的,因为warp调度器和指令单元212被配置成执行指令的任何解码。因此,指令被推测性地发送而不确定关于该指令的任何内容,例如指令内容、源或目的地操作的数量等等。
指令管线324执行预执行指令操作诸如指令解码和数据验证。指令管线324根据读和写操作数的指令来收集指令的操作数,从而访问本地寄存器文件304、存储器和高速缓存互连380、共享存储器306以及L1高速缓存320。在预执行指令操作期间,指令管线324可确定发生了回滚条件。指令管线324指示回滚条件是否通过设置回滚标志而发生并且提供识别回滚条件起因的回滚代码。指令管线324向分派单元326输出经处理的指令、回滚标志和回滚代码。
分派单元326为在N个exec(执行或处理)单元302中执行的线程和线程组维持资源计分板和状态信息。分派单元326从指令管线324接收经处理的指令、回滚标志和回滚代码并且当指令管线324尚未识别回滚条件时,分派单元326可基于资源计分板和状态信息来确定发生了回滚条件。回滚状态包括造成回滚的指令的地址。当回滚条件发生时,分派单元326向warp调度器和指令单元312输出回滚标志和回滚代码。否则,分派单元326分派供exec单元302执行的经处理的指令。在一个实施例中,当多个回滚条件发生时,向调度器312汇报的回滚条件指示两个或更多回滚条件已发生。在另一个实施例中,针对不同的回滚条件指定优先级并且向调度器汇报具有最高优先级的回滚条件。
回滚可用来应对各种错误条件同时还实现指令的推测发送。当识别回滚条件时,发起回滚的线程组的所有进行中(in-flight)指令应该被无效。进行中指令包括线程组的已经发送但是仍未分派(提交)供exec单元302执行的任何指令。在回滚操作的第一操作中,线程组的指令发送停止并且线程组的新指令取出也停止。在线程组的进行中指令到达分派单元326时,进行中指令被丢弃。在替代实施例中,进行中指令被warp调度器和指令单元312、指令管线324以及分派单元326丢弃,使得进行中指令未经过分派单元326。一旦回滚操作被去除或校正,回滚操作的第二阶段就开始于warp调度器和指令单元312更新线程组的程序计数器。warp调度器和指令单元312然后从指令L1高速缓存370取出在程序计数器处开始的回滚指令并且发送回滚指令。
SM 310提供具有不同可访问级别的片上(内部)数据存储。专用寄存器(未示出)对于分派单元326可读但不可写,并被用于存储定义每个线程的“位置”的参数。在一个实施例中,专用寄存器包括每线程(或SM 310内每exec单元302)一个的存储线程ID的寄存器;每个线程ID寄存器仅可由各自的exec单元302所访问。专用寄存器还可以包括可由同一栅格(grid)或队列中的所有线程读取的附加寄存器,所述附加寄存器存储CTA标识符、CTA维度、CTA所属的栅格的维度(或者如果是队列的话为队列位置)以及CTA所属的栅格或队列的标识符。属于栅格的CTA具有指示各个CTA在栅格内的位置的隐含x、y、z参数。在初始化期间,响应从设备驱动器103经由前端212接收的命令对专用寄存器进行写入,并且在处理任务的执行期间不变。前端212把待执行的每个处理任务调度作为栅格或队列。每个CTA与用于并发执行一个或多个任务的特定栅格或队列关联。另外,单个GPC 208可并发执行多个任务。
参数存储器(未示出)存储运行时间参数(常数),这些参数可由同一CTA内的任一线程(或任一LSU 303)读取但不可由其写入。在一个实施例中,设备驱动器103在指引SM 310开始执行使用这些参数的任务之前将这些参数提供给参数存储器。任一CTA(或者SM 310内的任一exec单元302)内的任一线程可以通过存储器接口214访问全局存储器。该全局存储器的一部分可被存储在L1高速缓存320中。
每个线程均可使用本地寄存器文件304作为临时空间(scratch space);每个寄存器均被分配用于一个线程的排他性使用,并且任何本地寄存器文件304中的数据均只可由寄存器被分配给的线程所访问。通过在物理上或逻辑上将寄存器文件划分为N个通道(lane)来实现本地寄存器文件,每个通道均具有某一数量的条目(其中每个条目可能存储例如32位字)。给N个exec单元302中的每一个分配一个通道,并且不同通道中对应的条目可以填充有供执行同一程序的不同线程使用的数据,以利于SIMD执行。可以将这些通道的不同部分分配给G个并发线程组中的不同的线程组,以使本地寄存器文件304中的给定条目只可由特定线程访问。在一个实施例中,本地寄存器文件304内的某些条目被保留用于存储线程标识符,实现专用寄存器之一。另外,一致性L1高速缓存可以被包括在SM 310内以存储N个exec单元302的每一个通道的一致性或常数值。
单个CTA内的线程可访问共享存储器306;换言之,共享存储器306中的任一位置均可由同一CTA内的任一线程(或由SM 310内任一处理引擎)所访问。共享存储器306也可被实现为具有互连的共享片上高速缓存存储器或共享寄存器文件,允许任一处理引擎对该共享存储器中任一位置进行读写。在其他一些实施例中,共享的状态空间可能映射到片外存储器的每CTA区域上,并被高速缓存在L1高速缓存320中。参数存储器可以被实现为在同一共享寄存器文件内或者在实现了共享存储器306的共享高速缓存存储器内的指定扇区(section),或者被实现为LSU 303只能以只读方式访问的单独的共享寄存器文件或片上高速缓存存储器。在一个实施例中,也可使用实现参数存储器的区域来存储CTAID和任务ID,以及CTA和栅格维度或队列位置,从而实现专用寄存器的一部分。SM 310还可包括统一地址映射单元352,该统一地址映射单元352将在统一的存储器空间中提供给所指定的加载和存储指令的地址转换为在每个各异的存储器空间中的地址。因此,通过指定在统一的存储器空间中的地址,指令可用于访问任何本地、共享或者全局存储器空间。
每个SM 310中的L1高速缓存320可以用来高速缓存私有每线程本地数据以及还有每应用全局数据。在一些实施例中,每CTA共享数据可高速缓存在L1高速缓存320中。指令管线324经由存储器和高速缓存互连380耦合到共享存储器306和L1高速缓存320。指令管线324被配置成检测各种回滚条件,包括由于高速缓存未命中或者因为操作数仍未存储而不可用的操作数。例如,当在常数高速缓存中常数不可用,即发生高速缓存未命中时,指令管线324指示回滚条件存在。编译器典型地组织指令,使得可通过确保相关指令所需要的任何操作数被(按需)计算并被较早指令存储在相同或不同的线程组中而无延迟地执行所述相关指令。然而,回滚条件可能造成一个或多个线程组的指令被延迟。因此,指令管线324可被配置成确定当源或目的地操作数在存储器中不可用并且是相关指令所需要的时存在回滚条件。
指令管线324还可被配置成当指令指定不能并行执行的两个操作时检测无效的超标量对(super-scalar-pair)。当检测到无效的超标量对时,回滚条件存在并且warp调度器和指令单元312将发送每个操作作为单独的指令,即原始指令将被串行化。指令管线324还可被配置成通过使用错误校正码(ECC)来检测源操作数何时被损坏。在一个实施例中,指令管线324被配置成使用ECC来校正源操作数值。在其他实施例中,指令管线324通过相应地设置回滚标志和回滚代码而指示回滚条件存在。
分派单元326被配置成坚检测各种回滚条件,包括由于资源竞争所致的指令计分板互锁以及被用来同步不同线程组的同步屏障所阻挡的指令。同步屏障可能直到仍未发送的指令被执行时才能被完成。因此,重要的是,如果需要的话允许那些未发送的指令执行,从而旁路遇到回滚条件的指令。
当条目在计分板中不可用或者不可用于存储线程或线程组的状态信息时,分派单元326还可确定回滚条件存在。另外,当计分板指示存储器或处理资源竞争在未被分派的指令和正在执行的指令之间存在时,分派单元326通过相应地设置回滚标志和回滚代码而指示回滚条件存在。编译器可被配置成组织每个线程组的指令,假设某些操作有预定的等待时间。当由于各种情形例如高速缓存未命中、回滚操作而超过预定的等待时间时,分派单元326基于计分板内容来确定回滚条件存在。不是拖延输入的经处理指令同时等待解析该情形,分派单元326确定回滚条件存在并且输入的经处理指令被无拖延地应对。
因为warp调度器和指令单元312在向指令管线324发送指令之前不解码指令,因此指令被发送而假设不采取分支,即经过程序的“失败(fall-through)”路径的指令被推测性地发送。当不采取失败路径时,回滚条件存在。然而,每当分支或跳转指令的失败路径有效,即线程组必须在某个时间在失败路径中执行指令时,回滚直到在执行失败路径中的指令之后才发生。换言之,回滚被推迟并且向失败路径给予优先级。分派单元326通过把发散令牌推到用于线程组中的不采取失败路径且将执行分支或跳转指令的任何线程的执行栈上而推迟该回滚。发散令牌包括用于分支或跳转指令的程序计数器和指示线程组中的将执行分支或跳转路径的线程的活动掩码。
用于正在执行的每个线程组的活动掩码被分派单元326维持并且被warp调度器和指令单元312与每个发送的指令一起输出。当线程组开始执行计算任务时并且当填充发散令牌时,初始化该活动掩码。分派单元326可被配置成解析分支操作以及从执行栈推入和取出条目。
在一个实施例中,优化失败路径的执行以避免回滚从而针对特定情形采取非失败路径。例如,当非失败路径指令是使执行非失败路径的线程作为采取失败路径(接着执行失败路径)的线程在相同的指令处恢复执行的“波普尔”指令时,无回滚发生。当检测到触发回滚条件的分支或跳转指令时,不把发散令牌推到执行栈上。“波普尔”指令的示例包括退出、返回、中断、继续、长跳转以及具有指示线程组的所有活动线程在执行继续之前需要同步的S选项的指令。相比而言,包括相对调用(CAL)、绝对调用(JCAL)、断点(BPT)或中断、从捕获返回(RTT)或从中断返回、间接分支(BRX)以及间接跳转(JMX)的无条件分支指令确实造成要求回滚操作的回滚条件。
当执行栈被配置成把一些条目存储在高速缓存中且把其他条目进一步向下存储在栈中、在图形存储器中时,分派单元326可被配置成当执行栈不可用时指示发生了回滚条件。当条目正在从高速缓存转移到图形存储器中或者从图形存储器转移到高速缓存中时,执行栈可能不可用。
图4A示出了根据本发明的一个实施例的推测指令发送和指令回滚方法400。尽管结合图1、2、3A、3B和3C的系统来描述方法步骤,但是本领域的技术人员将理解任何经配置以按任意顺序执行所述方法步骤的系统都在本发明的范围内。
在步骤405处,warp调度器和指令单元312每个时钟循环发送至少一个指令,从而交织一个或多个线程组的指令。在步骤410处,指令管线324和分派单元326对指令执行预执行指令处理并且识别指令的任何回滚条件。在步骤415处,恰好在提交经处理的指令来执行之前,分派单元326检查经处理的指令的回滚标志以确定是否针对经处理的指令发生了回滚条件。如果没有发生回滚条件,则在步骤445处,分派单元326分派经处理的指令以供一个或多个exec单元302执行。否则,在步骤425处,分派单元326用信号通知warp调度器和指令单元312停止发送与和设置的回滚标志关联的经处理指令关联的线程组的指令。分派单元326还向warp调度器和指令单元312提供指定回滚条件类型的回滚代码。
在步骤430处,分派单元326去除在检测到回滚条件时处于进行中的、线程组的经处理的指令。分派单元326还继续分派未发生回滚条件的其他线程组的经处理的指令,使得在完成回滚操作时其他线程组的指令执行继续。在步骤435处,warp调度器和指令单元312确定回滚操作是否完成并且被回滚的指令可针对线程组被重新发送。当回滚条件被去除或校正时,回滚操作完成。用于回滚的线程组的所有进行中指令对于重新发送指令而言不需要被去除。在回滚操作完成后,warp调度器和指令单元312为线程组重新发送回滚的指令。
一些回滚条件不要求对线程组中的所有线程的回滚操作。作为替代,可执行部分回滚操作。线程组中的不需要回滚的线程被分派单元326提交并且被exec单元302执行,同时针对线程组中的其他线程执行(部分)回滚操作。分派单元326计算并存储线程组的指示将执行部分回滚操作的线程的回滚活动掩码。当为线程组重新发送指令时,warp调度器和指令单元312输出回滚活动掩码。当存在待用于线程组的部分回滚时,线程组的捕获操作不被允许并且指令和重新发送的指令必须在采取任何捕获之前完成执行。
可执行部分回滚操作的指令包括像素属性内插指令和索引化常数负载指令。当线程组中的部分线程针对这些指令发散时,针对发散线程执行部分回滚。当造成回滚的指令被再次发送时,仅仅发散线程(根据回滚活动掩码)执行指令。
图4B示出了根据本发明的一个实施例的推测指令发送和部分指令回滚方法450。尽管结合图1、2、3A、3B和3C的系统来描述方法步骤,但是本领域的技术人员将理解任何经配置以按任意顺序执行所述方法步骤的系统都在本发明的范围内。
在步骤405处,warp调度器和指令单元312每个时钟循环发送至少一个指令,从而交织一个或多个线程组的指令。在步骤410处,指令管线324和分派单元326对指令执行预执行指令处理并且识别指令的任何回滚条件。在步骤415处,恰好在提交经处理的指令来执行之前,分派单元326检查经处理的指令的回滚标志以确定是否针对经处理的指令发生了回滚条件。如果没有发生回滚条件,则在步骤445处,分派单元326分派经处理的指令以供一个或多个exec单元302执行。
否则,在步骤420处,分派单元326确定是否可针对指令执行部分回滚操作,并且如果否的话,则在步骤425处,分派单元326用信号通知warp调度器和指令单元312停止发送与和设置的回滚标志关联的经处理指令关联的线程组的指令。分派单元326还向warp调度器和指令单元312提供指定回滚条件类型的回滚代码。
在步骤430处,分派单元326去除在检测到回滚条件时处于进行中的、线程组的经处理的指令。分派单元326还继续分派未发生回滚条件的其他线程组的经处理的指令,使得在完成回滚操作时其他线程组的指令执行继续。在步骤435处,warp调度器和指令单元312确定回滚操作是否完成并且被回滚的指令可针对线程组被重新发送。
如果在步骤420处,分派单元326确定可针对指令执行部分回滚操作,则在步骤455处,分派单元326计算并存储部分回滚活动掩码并且把线程组标志为执行部分回滚操作。在步骤460处,分派单元326分派指令和任何进行中指令以供线程组中的非发散线程执行。在步骤465处,分派单元326把线程组的活动掩码更新为部分回滚活动掩码并且行进至步骤440以重新发送回滚的指令。在步骤445处执行回滚的指令后,分派单元326清除部分回滚标志,由此实现线程组的捕获操作的执行。
一个或多个线程组的指令被推测性地发送用于预执行处理,并且不能被提交用于执行的任何指令被丢弃并且在解析了防止执行的回滚条件后针对线程组重新发送。丢弃由于回滚条件而不能被提交的指令允许针对其他线程组提交和执行其他指令,而不是在解析回滚条件时拖延。因此,针对未遇到回滚条件的线程组维持指令处理吞吐量。
本发明的一个实施例可以作为与计算机系统一起使用的程序产品实现。程序产品的程序定义实施例的功能(包括本文所述的方法)并且可以被包含在各种计算机可读存储介质上。示例性的计算机可读存储介质包括,但不限于:(ⅰ)信息被永久保存在其上的非可写存储介质(例如,计算机内的只读存储器设备,诸如可被CD-ROM驱动器读取的CD-ROM盘、闪存、ROM芯片或任何类型的固态非易失性半导体存储器);和(ⅱ)可变信息被保存在其上的可写存储介质(例如,磁盘驱动器内的软盘或者硬盘驱动器或者任何类型的固态随机存取半导体存储器)。
以上已经参照具体实施例描述了本发明。然而,本领域的技术人员应该理解在不脱离如所附权利要求提出的本发明更宽的精神和范围的情况下,可以做出各种修改和改变。因此,前述的描述和附图应被视为说明性的而非限制性的意义。

Claims (10)

1.一种用于执行推测发送的指令的回滚的方法,所述方法包括:
发送第一线程组的第一指令集;
发送第二线程组的第二指令集;
在所述第一指令集中的指令的预执行处理期间检测所述第一线程组中的至少一个线程的回滚条件;
停止发送所述第一线程组的附加指令;
丢弃所述第一指令集中已经发送的且尚未执行的进行中指令;以及
执行所述第二线程组的所述第二指令集。
2.一种用于调度计算任务来执行的系统,所述系统包括:
存储器,被配置成存储第一线程组的第一指令集和第二线程组的第二指令集;
调度器单元,被配置成:
发送第一线程组的第一指令集;
发送第二线程组的第二指令集;并且
当检测到回滚条件时停止发送所述第一线程组的附加指令;
分派单元,被配置成:
在所述第一指令集中的指令的预执行处理期间检测所述第一线程组中的至少一个线程的回滚条件;并且
丢弃所述第一指令集中已经发送的且尚未执行的进行中指令;和
多个执行单元,被配置成执行所述第二线程组的所述第二指令集。
3.根据权利要求2所述的系统,其中所述调度器单元进一步被配置成:
发送第三线程组的第三指令集,
所述分派单元进一步被配置成:
在所述第三指令集中的第一指令的预执行处理期间检测所述第三线程组中的至少一个线程的部分回滚条件;并且
存储指示第三线程组中的针对第一指令发散的第一部分线程的部分回滚活动掩码,并且
所述多个执行单元进一步被配置成:
执行第三线程组中的针对第一指令未发散的第二部分线程的第一指令。
4.根据权利要求2所述的系统,其中所述调度器单元进一步被配置成重新发送第三线程组的第一指令并且所述多个执行单元进一步被配置成基于所述部分回滚活动掩码来执行第一部分线程的第一指令。
5.根据权利要求2所述的系统,其中所述第一指令集中的指令指定不能并行执行的两个操作的无效超标量对。
6.根据权利要求5所述的系统,其中所述调度器单元进一步被配置成:
作为第一线程组的第一指令发送所述无效超标量对的第一操作;并且
作为第一线程组的第二指令发送所述无效超标量对的第一操作。
7.根据权利要求2所述的系统,其中所述第一指令集中的指令是被配置成使第一线程组与第二线程组同步的屏障同步指令。
8.根据权利要求2所述的系统,其中所述第一指令集中的指令指定被损坏的操作数。
9.根据权利要求2所述的系统,其中所述调度器单元进一步被配置成在去除所述回滚条件后重新发送第一线程组的第一指令集。
10.根据权利要求2所述的系统,其中所述分派单元进一步被配置成在完成所述进行中指令的预执行处理后丢弃所述进行中指令。
CN201210436535.4A 2011-11-04 2012-11-05 推测执行和回滚 Active CN103197953B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/289,643 2011-11-04
US13/289,643 US9830158B2 (en) 2011-11-04 2011-11-04 Speculative execution and rollback

Publications (2)

Publication Number Publication Date
CN103197953A true CN103197953A (zh) 2013-07-10
CN103197953B CN103197953B (zh) 2016-09-28

Family

ID=48129133

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210436535.4A Active CN103197953B (zh) 2011-11-04 2012-11-05 推测执行和回滚

Country Status (4)

Country Link
US (1) US9830158B2 (zh)
CN (1) CN103197953B (zh)
DE (1) DE102012220029A1 (zh)
TW (1) TWI529620B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108830777A (zh) * 2017-04-27 2018-11-16 辉达公司 用于全面同步执行线程的技术

Families Citing this family (151)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2885708A4 (en) * 2012-08-20 2016-11-09 D Kevin Cameron ASSIGNMENT OF TREATMENT RESOURCE
US9158667B2 (en) 2013-03-04 2015-10-13 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US8964496B2 (en) 2013-07-26 2015-02-24 Micron Technology, Inc. Apparatuses and methods for performing compare operations using sensing circuitry
US8971124B1 (en) 2013-08-08 2015-03-03 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US9153305B2 (en) 2013-08-30 2015-10-06 Micron Technology, Inc. Independently addressable memory array address spaces
US9019785B2 (en) 2013-09-19 2015-04-28 Micron Technology, Inc. Data shifting via a number of isolation devices
US9449675B2 (en) 2013-10-31 2016-09-20 Micron Technology, Inc. Apparatuses and methods for identifying an extremum value stored in an array of memory cells
US9430191B2 (en) 2013-11-08 2016-08-30 Micron Technology, Inc. Division operations for memory
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
US9934856B2 (en) 2014-03-31 2018-04-03 Micron Technology, Inc. Apparatuses and methods for comparing data patterns in memory
US9704540B2 (en) 2014-06-05 2017-07-11 Micron Technology, Inc. Apparatuses and methods for parity determination using sensing circuitry
US9449674B2 (en) 2014-06-05 2016-09-20 Micron Technology, Inc. Performing logical operations using sensing circuitry
US9910787B2 (en) 2014-06-05 2018-03-06 Micron Technology, Inc. Virtual address table
US9830999B2 (en) 2014-06-05 2017-11-28 Micron Technology, Inc. Comparison operations in memory
US9455020B2 (en) 2014-06-05 2016-09-27 Micron Technology, Inc. Apparatuses and methods for performing an exclusive or operation using sensing circuitry
US9496023B2 (en) 2014-06-05 2016-11-15 Micron Technology, Inc. Comparison operations on logical representations of values in memory
US9786335B2 (en) 2014-06-05 2017-10-10 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US9711207B2 (en) 2014-06-05 2017-07-18 Micron Technology, Inc. Performing logical operations using sensing circuitry
US10074407B2 (en) 2014-06-05 2018-09-11 Micron Technology, Inc. Apparatuses and methods for performing invert operations using sensing circuitry
US9779019B2 (en) 2014-06-05 2017-10-03 Micron Technology, Inc. Data storage layout
US9711206B2 (en) 2014-06-05 2017-07-18 Micron Technology, Inc. Performing logical operations using sensing circuitry
US9740607B2 (en) 2014-09-03 2017-08-22 Micron Technology, Inc. Swap operations in memory
US9747961B2 (en) 2014-09-03 2017-08-29 Micron Technology, Inc. Division operations in memory
US9847110B2 (en) 2014-09-03 2017-12-19 Micron Technology, Inc. Apparatuses and methods for storing a data value in multiple columns of an array corresponding to digits of a vector
US9898252B2 (en) 2014-09-03 2018-02-20 Micron Technology, Inc. Multiplication operations in memory
US9589602B2 (en) 2014-09-03 2017-03-07 Micron Technology, Inc. Comparison operations in memory
US9904515B2 (en) 2014-09-03 2018-02-27 Micron Technology, Inc. Multiplication operations in memory
US10068652B2 (en) 2014-09-03 2018-09-04 Micron Technology, Inc. Apparatuses and methods for determining population count
US10102002B2 (en) * 2014-09-30 2018-10-16 International Business Machines Corporation Dynamic issue masks for processor hang prevention
US9940026B2 (en) 2014-10-03 2018-04-10 Micron Technology, Inc. Multidimensional contiguous memory allocation
US9836218B2 (en) 2014-10-03 2017-12-05 Micron Technology, Inc. Computing reduction and prefix sum operations in memory
US10163467B2 (en) 2014-10-16 2018-12-25 Micron Technology, Inc. Multiple endianness compatibility
US10147480B2 (en) 2014-10-24 2018-12-04 Micron Technology, Inc. Sort operation in memory
US9779784B2 (en) 2014-10-29 2017-10-03 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US9747960B2 (en) 2014-12-01 2017-08-29 Micron Technology, Inc. Apparatuses and methods for converting a mask to an index
US10073635B2 (en) 2014-12-01 2018-09-11 Micron Technology, Inc. Multiple endianness compatibility
US10032493B2 (en) 2015-01-07 2018-07-24 Micron Technology, Inc. Longest element length determination in memory
US10061590B2 (en) 2015-01-07 2018-08-28 Micron Technology, Inc. Generating and executing a control flow
US9583163B2 (en) 2015-02-03 2017-02-28 Micron Technology, Inc. Loop structure for operations in memory
EP3254287A4 (en) 2015-02-06 2018-08-08 Micron Technology, INC. Apparatuses and methods for memory device as a store for program instructions
WO2016126472A1 (en) 2015-02-06 2016-08-11 Micron Technology, Inc. Apparatuses and methods for scatter and gather
WO2016126474A1 (en) 2015-02-06 2016-08-11 Micron Technology, Inc. Apparatuses and methods for parallel writing to multiple memory device locations
WO2016144724A1 (en) 2015-03-10 2016-09-15 Micron Technology, Inc. Apparatuses and methods for shift decisions
US9898253B2 (en) 2015-03-11 2018-02-20 Micron Technology, Inc. Division operations on variable length elements in memory
US9741399B2 (en) 2015-03-11 2017-08-22 Micron Technology, Inc. Data shift by elements of a vector in memory
EP3268965A4 (en) 2015-03-12 2018-10-03 Micron Technology, INC. Apparatuses and methods for data movement
US10146537B2 (en) 2015-03-13 2018-12-04 Micron Technology, Inc. Vector population count determination in memory
US10049054B2 (en) 2015-04-01 2018-08-14 Micron Technology, Inc. Virtual register file
US10140104B2 (en) 2015-04-14 2018-11-27 Micron Technology, Inc. Target architecture determination
US9959923B2 (en) 2015-04-16 2018-05-01 Micron Technology, Inc. Apparatuses and methods to reverse data stored in memory
US10073786B2 (en) 2015-05-28 2018-09-11 Micron Technology, Inc. Apparatuses and methods for compute enabled cache
US9704541B2 (en) 2015-06-12 2017-07-11 Micron Technology, Inc. Simulating access lines
US9921777B2 (en) 2015-06-22 2018-03-20 Micron Technology, Inc. Apparatuses and methods for data transfer from sensing circuitry to a controller
US9996479B2 (en) 2015-08-17 2018-06-12 Micron Technology, Inc. Encryption of executables in computational memory
US9905276B2 (en) 2015-12-21 2018-02-27 Micron Technology, Inc. Control of sensing components in association with performing operations
US9952925B2 (en) 2016-01-06 2018-04-24 Micron Technology, Inc. Error code calculation on sensing circuitry
US10048888B2 (en) 2016-02-10 2018-08-14 Micron Technology, Inc. Apparatuses and methods for partitioned parallel data movement
US9892767B2 (en) 2016-02-12 2018-02-13 Micron Technology, Inc. Data gathering in memory
US9971541B2 (en) 2016-02-17 2018-05-15 Micron Technology, Inc. Apparatuses and methods for data movement
US9899070B2 (en) 2016-02-19 2018-02-20 Micron Technology, Inc. Modified decode for corner turn
US10956439B2 (en) 2016-02-19 2021-03-23 Micron Technology, Inc. Data transfer with a bit vector operation device
US9697876B1 (en) 2016-03-01 2017-07-04 Micron Technology, Inc. Vertical bit vector shift in memory
US9997232B2 (en) 2016-03-10 2018-06-12 Micron Technology, Inc. Processing in memory (PIM) capable memory device having sensing circuitry performing logic operations
US10262721B2 (en) 2016-03-10 2019-04-16 Micron Technology, Inc. Apparatuses and methods for cache invalidate
US10379772B2 (en) 2016-03-16 2019-08-13 Micron Technology, Inc. Apparatuses and methods for operations using compressed and decompressed data
US9910637B2 (en) 2016-03-17 2018-03-06 Micron Technology, Inc. Signed division in memory
US10388393B2 (en) 2016-03-22 2019-08-20 Micron Technology, Inc. Apparatus and methods for debugging on a host and memory device
US10120740B2 (en) 2016-03-22 2018-11-06 Micron Technology, Inc. Apparatus and methods for debugging on a memory device
US11074988B2 (en) 2016-03-22 2021-07-27 Micron Technology, Inc. Apparatus and methods for debugging on a host and memory device
US10474581B2 (en) 2016-03-25 2019-11-12 Micron Technology, Inc. Apparatuses and methods for cache operations
US10977033B2 (en) 2016-03-25 2021-04-13 Micron Technology, Inc. Mask patterns generated in memory from seed vectors
US10074416B2 (en) 2016-03-28 2018-09-11 Micron Technology, Inc. Apparatuses and methods for data movement
US10430244B2 (en) 2016-03-28 2019-10-01 Micron Technology, Inc. Apparatuses and methods to determine timing of operations
US10453502B2 (en) 2016-04-04 2019-10-22 Micron Technology, Inc. Memory bank power coordination including concurrently performing a memory operation in a selected number of memory regions
US10607665B2 (en) 2016-04-07 2020-03-31 Micron Technology, Inc. Span mask generation
US9818459B2 (en) 2016-04-19 2017-11-14 Micron Technology, Inc. Invert operations using sensing circuitry
US10153008B2 (en) 2016-04-20 2018-12-11 Micron Technology, Inc. Apparatuses and methods for performing corner turn operations using sensing circuitry
US9659605B1 (en) 2016-04-20 2017-05-23 Micron Technology, Inc. Apparatuses and methods for performing corner turn operations using sensing circuitry
US10042608B2 (en) 2016-05-11 2018-08-07 Micron Technology, Inc. Signed division in memory
US9659610B1 (en) 2016-05-18 2017-05-23 Micron Technology, Inc. Apparatuses and methods for shifting data
US10049707B2 (en) 2016-06-03 2018-08-14 Micron Technology, Inc. Shifting data
US10387046B2 (en) 2016-06-22 2019-08-20 Micron Technology, Inc. Bank to bank data transfer
US10037785B2 (en) 2016-07-08 2018-07-31 Micron Technology, Inc. Scan chain operation in sensing circuitry
US10388360B2 (en) 2016-07-19 2019-08-20 Micron Technology, Inc. Utilization of data stored in an edge section of an array
US10387299B2 (en) 2016-07-20 2019-08-20 Micron Technology, Inc. Apparatuses and methods for transferring data
US10733089B2 (en) 2016-07-20 2020-08-04 Micron Technology, Inc. Apparatuses and methods for write address tracking
US9767864B1 (en) 2016-07-21 2017-09-19 Micron Technology, Inc. Apparatuses and methods for storing a data value in a sensing circuitry element
US9972367B2 (en) 2016-07-21 2018-05-15 Micron Technology, Inc. Shifting data in sensing circuitry
US10303632B2 (en) 2016-07-26 2019-05-28 Micron Technology, Inc. Accessing status information
US10468087B2 (en) 2016-07-28 2019-11-05 Micron Technology, Inc. Apparatuses and methods for operations in a self-refresh state
US9990181B2 (en) 2016-08-03 2018-06-05 Micron Technology, Inc. Apparatuses and methods for random number generation
US11029951B2 (en) 2016-08-15 2021-06-08 Micron Technology, Inc. Smallest or largest value element determination
US10606587B2 (en) 2016-08-24 2020-03-31 Micron Technology, Inc. Apparatus and methods related to microcode instructions indicating instruction types
US10466928B2 (en) 2016-09-15 2019-11-05 Micron Technology, Inc. Updating a register in memory
US10387058B2 (en) 2016-09-29 2019-08-20 Micron Technology, Inc. Apparatuses and methods to change data category values
US10014034B2 (en) 2016-10-06 2018-07-03 Micron Technology, Inc. Shifting data in sensing circuitry
US10529409B2 (en) 2016-10-13 2020-01-07 Micron Technology, Inc. Apparatuses and methods to perform logical operations using sensing circuitry
US9805772B1 (en) 2016-10-20 2017-10-31 Micron Technology, Inc. Apparatuses and methods to selectively perform logical operations
CN207637499U (zh) 2016-11-08 2018-07-20 美光科技公司 用于形成在存储器单元阵列上方的计算组件的设备
US10423353B2 (en) 2016-11-11 2019-09-24 Micron Technology, Inc. Apparatuses and methods for memory alignment
US9761300B1 (en) 2016-11-22 2017-09-12 Micron Technology, Inc. Data shift apparatuses and methods
US10402340B2 (en) 2017-02-21 2019-09-03 Micron Technology, Inc. Memory array page table walk
US10403352B2 (en) 2017-02-22 2019-09-03 Micron Technology, Inc. Apparatuses and methods for compute in data path
US10268389B2 (en) 2017-02-22 2019-04-23 Micron Technology, Inc. Apparatuses and methods for in-memory operations
US10474468B2 (en) 2017-02-22 2019-11-12 Advanced Micro Devices, Inc. Indicating instruction scheduling mode for processing wavefront portions
US10838899B2 (en) 2017-03-21 2020-11-17 Micron Technology, Inc. Apparatuses and methods for in-memory data switching networks
US11222260B2 (en) 2017-03-22 2022-01-11 Micron Technology, Inc. Apparatuses and methods for operating neural networks
US10185674B2 (en) 2017-03-22 2019-01-22 Micron Technology, Inc. Apparatus and methods for in data path compute operations
US10049721B1 (en) 2017-03-27 2018-08-14 Micron Technology, Inc. Apparatuses and methods for in-memory operations
US10043570B1 (en) 2017-04-17 2018-08-07 Micron Technology, Inc. Signed element compare in memory
US10147467B2 (en) 2017-04-17 2018-12-04 Micron Technology, Inc. Element value comparison in memory
US9997212B1 (en) 2017-04-24 2018-06-12 Micron Technology, Inc. Accessing data in memory
US10942843B2 (en) 2017-04-25 2021-03-09 Micron Technology, Inc. Storing data elements of different lengths in respective adjacent rows or columns according to memory shapes
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US10236038B2 (en) 2017-05-15 2019-03-19 Micron Technology, Inc. Bank to bank data transfer
US10068664B1 (en) 2017-05-19 2018-09-04 Micron Technology, Inc. Column repair in memory
US10620994B2 (en) 2017-05-30 2020-04-14 Advanced Micro Devices, Inc. Continuation analysis tasks for GPU task scheduling
US10013197B1 (en) 2017-06-01 2018-07-03 Micron Technology, Inc. Shift skip
US10152271B1 (en) 2017-06-07 2018-12-11 Micron Technology, Inc. Data replication
US10262701B2 (en) 2017-06-07 2019-04-16 Micron Technology, Inc. Data transfer between subarrays in memory
US10318168B2 (en) 2017-06-19 2019-06-11 Micron Technology, Inc. Apparatuses and methods for simultaneous in data path compute operations
US10162005B1 (en) 2017-08-09 2018-12-25 Micron Technology, Inc. Scan chain operations
US10534553B2 (en) 2017-08-30 2020-01-14 Micron Technology, Inc. Memory array accessibility
US10741239B2 (en) 2017-08-31 2020-08-11 Micron Technology, Inc. Processing in memory device including a row address strobe manager
US10416927B2 (en) 2017-08-31 2019-09-17 Micron Technology, Inc. Processing in memory
US10346092B2 (en) 2017-08-31 2019-07-09 Micron Technology, Inc. Apparatuses and methods for in-memory operations using timing circuitry
GB2566339B (en) * 2017-09-06 2019-11-27 Advanced Risc Mach Ltd An apparatus and method of executing thread groups
US10474822B2 (en) * 2017-10-08 2019-11-12 Qsigma, Inc. Simultaneous multi-processor (SiMulPro) apparatus, simultaneous transmit and receive (STAR) apparatus, DRAM interface apparatus, and associated methods
US10409739B2 (en) 2017-10-24 2019-09-10 Micron Technology, Inc. Command selection policy
US10877757B2 (en) * 2017-11-14 2020-12-29 Nvidia Corporation Binding constants at runtime for improved resource utilization
US10522210B2 (en) 2017-12-14 2019-12-31 Micron Technology, Inc. Apparatuses and methods for subarray addressing
US10332586B1 (en) 2017-12-19 2019-06-25 Micron Technology, Inc. Apparatuses and methods for subrow addressing
US10614875B2 (en) 2018-01-30 2020-04-07 Micron Technology, Inc. Logical operations using memory cells
US10437557B2 (en) 2018-01-31 2019-10-08 Micron Technology, Inc. Determination of a match between data values stored by several arrays
US11194477B2 (en) 2018-01-31 2021-12-07 Micron Technology, Inc. Determination of a match between data values stored by three or more arrays
US10725696B2 (en) 2018-04-12 2020-07-28 Micron Technology, Inc. Command selection policy with read priority
US10440341B1 (en) 2018-06-07 2019-10-08 Micron Technology, Inc. Image processor formed in an array of memory cells
US11442795B2 (en) 2018-09-11 2022-09-13 Nvidia Corp. Convergence among concurrently executing threads
US10769071B2 (en) 2018-10-10 2020-09-08 Micron Technology, Inc. Coherent memory access
US11175915B2 (en) 2018-10-10 2021-11-16 Micron Technology, Inc. Vector registers implemented in memory
US10483978B1 (en) 2018-10-16 2019-11-19 Micron Technology, Inc. Memory device processing
US11184446B2 (en) 2018-12-05 2021-11-23 Micron Technology, Inc. Methods and apparatus for incentivizing participation in fog networks
EP3977413A4 (en) * 2019-05-29 2023-07-19 Advanced Micro Devices, Inc. SOFTWARE CONTROLLED VARIABLE WAVEFRONT SIZE EXECUTION AT A GPU
US10867655B1 (en) 2019-07-08 2020-12-15 Micron Technology, Inc. Methods and apparatus for dynamically adjusting performance of partitioned memory
US11360768B2 (en) 2019-08-14 2022-06-14 Micron Technolgy, Inc. Bit string operations in memory
JP2021039658A (ja) * 2019-09-05 2021-03-11 富士通株式会社 Ac並列化回路、ac並列化方法及び並列情報処理装置
US11449577B2 (en) 2019-11-20 2022-09-20 Micron Technology, Inc. Methods and apparatus for performing video processing matrix operations within a memory array
US11853385B2 (en) 2019-12-05 2023-12-26 Micron Technology, Inc. Methods and apparatus for performing diversity matrix operations within a memory array
US11227641B1 (en) 2020-07-21 2022-01-18 Micron Technology, Inc. Arithmetic operations in memory
US11934867B2 (en) 2020-07-23 2024-03-19 Nvidia Corp. Techniques for divergent thread group execution scheduling
US20230115044A1 (en) * 2021-10-08 2023-04-13 Nvidia Corp. Software-directed divergent branch target prioritization

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101128797A (zh) * 2005-02-04 2008-02-20 美普思科技有限公司 具有用于增进流水线使用效率的优化线程调度器的多线程微处理器
CN101178646A (zh) * 2006-11-08 2008-05-14 松下电器产业株式会社 多线程处理器
US20090217020A1 (en) * 2004-11-22 2009-08-27 Yourst Matt T Commit Groups for Strand-Based Computing

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6233690B1 (en) * 1998-09-17 2001-05-15 Intel Corporation Mechanism for saving power on long latency stalls
US7444498B2 (en) * 2004-12-17 2008-10-28 International Business Machines Corporation Load lookahead prefetch for microprocessors
US20070143755A1 (en) * 2005-12-16 2007-06-21 Intel Corporation Speculative execution past a barrier
US8261276B2 (en) * 2008-03-31 2012-09-04 International Business Machines Corporation Power-efficient thread priority enablement
US8522000B2 (en) * 2009-09-29 2013-08-27 Nvidia Corporation Trap handler architecture for a parallel processing unit
US8438571B2 (en) * 2010-02-24 2013-05-07 International Business Machines Corporation Thread speculative execution and asynchronous conflict

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090217020A1 (en) * 2004-11-22 2009-08-27 Yourst Matt T Commit Groups for Strand-Based Computing
CN101128797A (zh) * 2005-02-04 2008-02-20 美普思科技有限公司 具有用于增进流水线使用效率的优化线程调度器的多线程微处理器
CN101178646A (zh) * 2006-11-08 2008-05-14 松下电器产业株式会社 多线程处理器

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108830777A (zh) * 2017-04-27 2018-11-16 辉达公司 用于全面同步执行线程的技术

Also Published As

Publication number Publication date
TW201331836A (zh) 2013-08-01
TWI529620B (zh) 2016-04-11
CN103197953B (zh) 2016-09-28
US9830158B2 (en) 2017-11-28
DE102012220029A1 (de) 2013-05-08
US20130117541A1 (en) 2013-05-09

Similar Documents

Publication Publication Date Title
CN103197953A (zh) 推测执行和回滚
US8732711B2 (en) Two-level scheduler for multi-threaded processing
US9830156B2 (en) Temporal SIMT execution optimization through elimination of redundant operations
US8639882B2 (en) Methods and apparatus for source operand collector caching
US10007527B2 (en) Uniform load processing for parallel thread sub-sets
CN102648449B (zh) 一种用于处理干扰事件的方法和图形处理单元
CN103309786B (zh) 用于在非可抢占式图形处理单元上交互调试的方法和装置
US8751771B2 (en) Efficient implementation of arrays of structures on SIMT and SIMD architectures
US9755994B2 (en) Mechanism for tracking age of common resource requests within a resource management subsystem
US9606808B2 (en) Method and system for resolving thread divergences
US9513975B2 (en) Technique for computational nested parallelism
US10255228B2 (en) System and method for performing shaped memory access operations
CN103218309B (zh) 多级指令高速缓存预取的方法、系统与设备
US9069664B2 (en) Unified streaming multiprocessor memory
US9069609B2 (en) Scheduling and execution of compute tasks
US9626216B2 (en) Graphics processing unit sharing between many applications
US10095548B2 (en) Mechanism for waking common resource requests within a resource management subsystem
US20140258693A1 (en) System and method for hardware scheduling of conditional barriers and impatient barriers
CN103176848A (zh) 计算工作分布参考计数器
US11934867B2 (en) Techniques for divergent thread group execution scheduling
US9715413B2 (en) Execution state analysis for assigning tasks to streaming multiprocessors
CN103197917A (zh) 计算线程阵列粒度执行抢占
US9262348B2 (en) Memory bandwidth reallocation for isochronous traffic

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant