CN115039076A - 无障碍和无围栏共享存储器同步 - Google Patents

无障碍和无围栏共享存储器同步 Download PDF

Info

Publication number
CN115039076A
CN115039076A CN202180012138.1A CN202180012138A CN115039076A CN 115039076 A CN115039076 A CN 115039076A CN 202180012138 A CN202180012138 A CN 202180012138A CN 115039076 A CN115039076 A CN 115039076A
Authority
CN
China
Prior art keywords
thread
state
flag
value
location
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202180012138.1A
Other languages
English (en)
Inventor
V·沃尔科夫
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 CN115039076A publication Critical patent/CN115039076A/zh
Pending legal-status Critical Current

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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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/30094Condition code generation, e.g. Carry, Zero flag
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/52Indexing scheme relating to G06F9/52
    • G06F2209/521Atomic

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Multi Processors (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)

Abstract

当通过共享存储器进行通信时,生产者线程生成被写入共享存储器中的位置的值。该值由消费者线程从共享存储器中读取。挑战在于确保消费者线程仅在写入值并因此同步后读取位置。当生产者线程写入存储器位置时,同时与值一起存储在存储器位置中的标志被切换。消费者线程跟踪信息,以确定存储在位置中的标志是否指示生产者是否已将值写入该位置。在读取和写入存储器中的位置的同时读取和写入标志,从而消除了对存储器围栏的需要。在所有消费者线程读取该值后,可以重用该位置来写入一个或更多个附加值并同时切换标志。

Description

无障碍和无围栏共享存储器同步
优先权声明
本申请要求2020年3月13日提交的题目为“无障碍和无围栏共享存储器同步(BARRIERLESS AND FENCELESS SHARED MEMORY SYNCHRONIZATION)”的美国专利申请No.16/818,845的优先权,其全部内容通过引用并入本文。
技术领域
本公开涉及共享存储器同步,尤其是无障碍和无围栏共享存储器同步。
背景技术
促进共享存储器通信的传统方法是使用障碍(barrier)同步。“障碍”是指由生产者线程和消费者线程执行的例程,并暂停每个线程,直到所有其他线程也达到障碍。此外,该障碍确保所有先前启动的存储器写入都已完成,这是通过使用存储器围栏来完成的。障碍确保在存储器位置包含生产者线程写入的预期数据之前,消费者线程不会访问存储器位置。传统方法的缺点是双重的。首先,执行障碍同步例程的成本很高,并且涉及到对存储器的多次往返。其次,如果线程在不同的时间到达障碍,一些线程将不得不等待并处于空闲状态,这可能会增加总计算时间。
虽然传统同步方法的一些变体可能不使用显式障碍同步例程,但这些变体仍然使用存储器围栏。这种变体的例子是信号量。对于这些变体的方法,通过使用一个或更多个同步变量来实现同步。在将数据写入存储器后,生产者线程执行存储器围栏,以确保数据被提交到存储器。然后,生产者线程更新同步变量。消费者线程轮询(例如,读取)同步变量,直到同步变量改变状态,然后再继续从存储器中读取数据。这些方法的缺点是围栏的成本和额外的存储器往返。例如,实现存储器围栏需要一次存储器往返。同步变量中通信更改的成本需要额外的存储器往返。然而,读取数据通常需要另一个额外的存储器往返。需要解决这些问题和/或与现有技术相关的其他问题。
发明内容
当通过共享存储器进行通信时,生产者线程生成被写入共享存储器中的位置的值。该值由消费者线程从共享存储器中读取。挑战在于确保消费者线程仅在写入值并因此同步后读取位置。当生产者线程写入存储器位置时,同时存储在存储器位置中的标志和值一起切换。消费者线程跟踪信息,以确定存储在位置中的标志是否指示生产者是否已将值写入该位置。在读取和写入存储器中的位置的同时读取和写入标志,从而消除了对存储器围栏的需要。消费者线程读取值后,可以重用该位置来写入附加值,同时切换标志。
本公开涉及一种用于共享存储器同步的方法、计算机可读介质和系统。在一个实施例中,一种方法包括由多线程并行处理器执行线程组,以根据指令序列处理输入,由线程组中的第一线程生成第一值,并将第一值写入共享存储器的第一位置,同时更新存储在第一位置的第一标志。在一个实施例中,第一标志从第一状态切换到第二状态,其中当指令序列的执行开始时,第一标志被初始化为第二状态。在另一个实施例中,第一标志从第二状态切换到第一状态,其中当指令序列的执行开始时,第一标志被初始化为第一状态。
在一个实施例中,该方法还包括由第三线程确定第一标志已从第一状态更改为第二状态,由第三线程从第一位置读取第一值,然后更新存储在共享存储器第二位置的第二标志,该标志将由线程组中的第二线程写入,以及由第三线程处理第一值以产生输出。在一个实施例中,确定第一标志已从第一状态更改为第二状态包括由第三线程从第一位置同时读取第一标志和第一值。在一个实施例中,确定第一标志已从第一状态更改为第二状态还包括将第一标志与有效状态进行比较。
在一个实施例中,第一标志被存储在替换第一值的位的第一位置内的位置。在一个实施例中,该位置对应于第一值的最低有效位。
在一个实施例中,第一值和第一标志被编码为单个16位、32位、64位或128位字之一。
在一个实施例中,至少一个附加值与第一标志相关联,进一步包括当第一值被写入第一存储位置时,同时将至少一个附加值写入第一存储位置。
在一个实施例中,指令序列的执行包括使用神经网络执行一个或更多个操作。
在一个实施例中,该方法还包括由第三线程将输出写入第三位置,同时将存储在共享存储器第三位置的第三标志从第一状态更新为第二状态。在一个实施例中,该方法还包括由第四线程确定第三标志已从第一状态更改为第二状态,处理第四线程的输出以产生第四值,以及将存储在第一位置的第一标志从第二状态更新为第一状态,同时将第四值写入第一位置。
在一个实施例中,系统包括多核心并行处理器,其被耦合到共享存储器并被配置为:执行线程组以根据指令序列处理输入,由线程组中的第一线程生成第一值,以及将第一值写入共享存储器中的第一位置,同时将存储在第一位置的第一标志从第一状态更新为第二状态,其中当指令序列的执行开始时,第一标志被初始化为第二状态。
在一个实施例中,非暂态计算机可读介质存储计算机指令,当由一个或更多个处理器执行指令时,使一个或更多个处理器执行以下步骤:执行线程组以根据指令序列处理输入,由线程组中的第一线程生成第一值,以及将第一值写入共享存储器的第一位置,同时将存储在第一位置的第一标志从第一状态更新为第二状态,其中当指令序列的执行开始时,第一标志被初始化为第二状态。
附图说明
图1A示出了根据一个实施例的多线程共享存储器通信系统的框图。
图1B示出了根据一个实施例的示例共享存储器数据格式的示意图。
图1C示出了根据一个实施例的另一示例多线程共享存储器通信系统的框图。
图1D示出了根据一个实施例的使用循环缓冲区的共享存储器通信的概念图。
图2A示出了根据一个实施例的用于同步共享存储器通信的方法的流程图。
图2B示出了根据一个实施例的用于同步共享存储器通信的方法的另一流程图。
图3示出了根据一个实施例的并行处理单元。
图4A示出了根据一个实施例的图3的并行处理单元内的通用处理集群。
图4B示出了根据一个实施例的图3的并行处理单元的存储器分区单元。
图5A示出了根据一个实施例的图4A的流式多处理器。
图5B示出了根据一个实施例的使用图3的PPU实现的处理系统的概念图。
图5C示出了一个可以实现各种先前实施例的各种架构和/或功能的示例性系统。
具体实施方式
在多线程处理期间,数据通过共享存储器从生产者线程传输到消费者线程。在以下描述的上下文中,共享存储器可以由并行处理器内执行的不同线程访问(读取和/或写入)。当使用共享存储器进行通信时,生产者线程处理一组输入并生成写入共享存储器中第一位置的第一值。消费线程从共享存储器中读取第一值,并对其进行处理以生成写入共享存储器中第二位置的第二值,依此类推。挑战在于确保第二线程仅在第一线程生成的值写入存储器位置后读取存储器位置。通过在写入值的每个存储器位置中包括标志,并在同一事务中(例如,同时)写入包含标志和值的数据包,可以避免障碍和围栏。写入存储器位置时,会更新标志,以指示已使用有效值写入存储器位置。与现有技术相比,该标志未更新到预定值以指示存储器位置已被写入。相反,所有标志都被初始化为相同的状态(真或假),并且每次写入存储器位置时,都会切换标志的状态。
当消费者线程从存储器位置读取值时,值与存储在同一位置的标志同时读取。为了确保读取值有效,对存储器位置进行轮询(读取),直到发现标志处于指示值有效的状态。然后,可以在处理中使用与标志一起读取的值,这消除了在同步完成后对存储器进行额外往返以获取值的需要。每个线程维护状态信息,该状态信息指示已写入且因此有效或需要写入且因此无效的存储器位置的标志状态。在一个实施例中,存储器位置可以由单个生产者线程写入,并由一个或更多个消费者线程读取。在一个实施例中,可以用新值覆盖存储器位置,而无需重新初始化标志。然而,在用新值覆盖存储器位置之前,必须确保不再需要存储在存储器位置中的先前值,即所有消费者线程都已被读取。
图1A示出了根据一个实施例的多线程共享存储器通信系统100。尽管在处理单元的上下文中描述了共享存储器系统100,但单元110和115中的一个或更多个可以作为程序、自定义电路或通过自定义电路和程序的组合来实现。例如,单元110和/或115可以由GPU(图形处理单元)、CPU(中央处理单元)或任何其他类型的处理器实现。在一个实施例中,单元110和115实现神经网络的组件。在一个实施例中,神经网络是递归神经网络(RNN)。此外,本领域的普通技术人员将理解,执行共享存储器系统的操作的任何系统都在本发明实施例的范围和精神内。
单元110是多线程并行处理单元,该并行处理单元配置为接收输入并根据第一组线程执行的第一指令处理输入,以产生第一值。在一个实施例中,单元110是图4A所示的可编程流式多处理器(SM)440。在一个实施例中,第一指令是程序指令序列,其中程序还包括至少第二指令和第三指令。第一组线程将第一值同时写入存储器位置101和102,同时将存储在共享存储器105的存储器位置101和102中的第一标志从第一状态切换(例如,更新)到第二状态。当第一指令的执行开始时,第一标志被初始化为第一状态。或者,将第一标志初始化为第二状态,并且当写入第一值时,将第一标志从第二状态切换到第一状态。在一个实施例中,共享存储器105包括图5A的L2高速缓存460。
单元115是多线程并行处理单元,配置为与存储在相同存储器位置的标志同时读取第一值,并且当标志指示第一值有效时,根据第二组线程执行的第二指令处理第一值以产生第二值。第一值可以在不同的时间写入存储器位置101和102。因此,一些第二线程可以从位置101读取第一值,并在其他第二线程仍在等待将数据写入位置102时开始处理。相反,当使用单个常规障碍来同步第一线程与第二线程时,任何第二线程都不能开始处理直到所有第一线程将值写入存储器。
第二组线程中的每个线程轮询(例如,读取,如图1A中的虚线箭头所示)存储在各自存储器位置的第二标志,以检测从第一状态到第二状态的变化,指示第二值已写入存储器位置。与现有技术相比,其中第一状态或第二状态指示有效数据,而另一状态指示无效数据,第一状态和第二状态都不总是指示存储器位置存储有效数据。换句话说,标志状态的解释取决于上下文,因此对于一个事务(例如,读或写),第一状态指示存储器位置包含有效数据,对于另一个事务,第一状态指示同一存储器位置包含无效数据,如本文进一步所述。
当线程轮询的特定标志指示值有效时(例如,标志随着写入的值而改变),生产者线程和消费者线程之间的同步就完成了共享存储器位置,消费者线程可以使用与标志同时读取的值进行计算。当第二组线程中的每一个线程完成处理时,该线程将第二值中的线程部分同时写入存储器位置111或112,同时将分别存储在存储器位置111或112中的第二标志从第一状态切换到第二状态。第二值可以再次处理和/或可以作为输出从单元115发送。
现在将根据用户的愿望,阐述关于可以实现上述框架的各种可选架构和特征的更多说明性信息。应特别注意的是,以下信息仅供说明,不应被解释为以任何方式进行限制。以下任何特征均可选择性地与所述的其他特征结合或不排除其他特征。
图1B示出了根据一个实施例的示例共享存储器格式的示意图。数据包106由线程存储在共享存储器的存储器位置中,并且包括至少一个值和与至少一个值相关联的单个标志。至少一个值中的每个值可以用固定点、浮点或任何其他可行的格式表示。在一个实施例中,存储由线程产生的值的所有位而不降低精度,并且单个位专用于标志。在另一个实施例中,标志存储在值中一个值的最低有效位(lsb)位置,从而降低了一个值的精度。当值以浮点格式表示时,lsb位置可以是尾数的lsb。存储在数据包106中的任何其他值以全精度存储。
数据包107由线程存储在共享存储器的存储器位置,并包括两个值和与这两个值相关联的单个标志。每个值可以用定点、浮点或任何其他可行的格式表示。在一个实施例中,存储由线程生成的两个值的所有位,而不降低精度,并且单个位专用于标志。如数据包107中所示,标志可以存储在数据包107内的任何位位置,包括两个值之一内的任何位位置。在特定实施例中,标志存储在两个值中的第一值的位位置(lsb或另一位),从而降低第一值的精度,并且另一个值以全精度存储在数据包107中。
数据包106和107中的每一个都被完全(原子地)读取,以便同时读取标志和值。数据包106和107中的每一个都被完全(原子地)写入,以便同时写入标志和值。当将数据包106或107写入共享存储器105时,生产者线程在数据包中设置标志,以便切换该标志。具体来说,处于第一状态的标志被切换为处于第二状态(例如,从假到真或从真到假)。在一个实施例中,标志和值在数据包106或107中被编码为单个16位、32位、64位或128位字,使得标志在数据包106或107中采用单个位。
图1C示出了根据一个实施例的另一示例多线程共享存储器通信系统140的框图。尽管在处理单元的上下文中描述了共享存储器系统140,但单元160和165中的一个或更多个可以作为程序、自定义电路或通过自定义电路和程序的组合来实现。例如,单元160和/或165可以由GPU(图形处理单元)、CPU(中央处理单元)或任何处理器实现。在一个实施例中,单元160和165中的每一个都能够实现神经网络的至少一层。此外,本领域的普通技术人员将理解,执行共享存储器系统的操作的任何系统都在本发明实施例的范围和精神内。
单元160是多线程并行处理单元,配置为接收输入并根据第一组线程执行的第一指令处理输入,以产生第一值。在单元160和165开始处理之前,标志管理单元120将标志初始化为预定的标志状态(例如,第一或第二状态)。在一个实施例中,单元160和165是图4A中所示的可编程SM440。第一组线程将第一值同时写入共享存储器105的存储器位置101和102,同时切换存储在存储器位置101和102中的第一标志。
单元160和165内的标志状态125被配置为跟踪标志状态,提供确定与任何时间点对应的有效值的两种状态中的哪一种所需的信息。在一个实施例中,当从共享存储器105读取数据包时,读取共享存储器105的线程知道数据包被(或将被)写入之前的标志状态(例如,无效状态)。在一个实施例中,当从共享存储器105读取数据包时,读取共享存储器105的线程知道在写入数据包后标志将具有的状态(例如,有效状态)。在一个实施例中,单元165内的标志状态125分别跟踪第二线程访问的每个标志。
在一个实施例中,当所有第一值必须在第二组线程中的任何线程读取任何第一值之前写入共享存储器105时,单元165内的标志状态125将第二组线程访问的所有标志作为组进行跟踪,有效地实现由第一线程执行的第一指令和由第二线程执行的第二指令之间的障碍。
单元165从存储器位置101和102同时读取第一值和第一标志,当标志指示第一值有效时,第二线程组根据第二指令处理第一值以产生第二值。在一个实施例中,如果在单元165中执行的特定线程将处理存储在存储器位置101和102中的值,则该线程将轮询存储在存储器位置101和102中的相应标志。在一个实施例中,线程在根据第二指令开始处理之前,等待两个标志指示值有效。在另一个实施例中,当存储在存储器位置101中的标志改变状态时,线程根据第二指令开始处理,并且当第二指令中的指令达到存储在存储器位置102中的值的要求时,线程等待存储在存储器位置102中的标志改变状态。
当第二组线程中的每个线程完成处理时,线程将值写入存储器位置111或112,同时将存储在存储器位置111或112中的标志从第一状态切换到第二状态。在单元160中执行第三指令的第三组线程从存储器位置111和112读取第二值,并且当相应的标志指示第二值有效时,第三组线程中的每个线程根据第三指令处理第二值中的至少一个以产生第三值。第三组线程将第三值写入共享存储器105的存储器位置101和102,同时切换存储在存储器位置101和102中的第一标志。在一个实施例中,第一组线程和第三组线程是同一组线程。
存储在存储器位置101和102中的第一值被重用并用第三值覆盖,并且第一标志被切换回第一标志初始化时的相同状态。然而,在执行第三组线程之前,标志管理单元120可能不会再次初始化所有标志。相反,对于至少包括第一、第二和第三条指令的整个程序,标志初始化一次。在一个实施例中,每个新数据包被写入共享存储器105内的程序可用的“阵列”中的不同存储器位置,直到阵列中的所有存储器位置都被写入为止。写入整个阵列后,写入可能会“换行(wrap)”,并开始覆盖阵列中的存储器位置。阵列中存储器位置的数量和/或换行能力是特定于应用程序的,并确定为确保仅覆盖已消耗的存储器位置。相比之下,传统技术将每个存储器位置写入一次,并且不重用任何存储器位置。因此,使用传统技术执行同一程序需要更多的存储器位置。
图1D示出了根据一个实施例的使用循环缓冲区的共享存储器通信的概念图。在一个实施例中,共享存储器105中选定的一组存储器位置被配置为圆形阵列,并且被存储在初始化为相同状态的存储器位置中的标志。例如,如图1D所示,存储器位置131、132到141、142到151和152到161被初始化为第一状态。在其他实施例中,共享存储器105中的更少或更多存储器位置可以包括在圆形阵列中。通过线程A和线程B用数据包写入存储器位置131和132,并且存储在存储器位置131和132中的相关标志从第一状态切换到第二状态。线程C通过同时读取存储在该位置的值和标志来轮询存储器位置131,直到确定标志处于第二状态。线程C处理这些值并将第二值写入存储器位置141,同时切换存储在存储器位置141中的标志。线程C可以处理一个或更多个附加值以及从存储器位置131读取的值。线程D将其他值写入存储器位置142。
在确定存储在存储器位置141中的标志处于第二状态后,线程E可以开始处理第二值。由于当从存储器位置141读取标志时在同一事务中获得第二值,因此不需要单独读取以获得第二值。线程E处理第二值并将第三值写入存储器位置151,同时切换存储在存储器位置151中的标志。线程F将其他值写入存储器位置152。线程F可以读取和处理存储在存储器位置141和/或142中的值。在确定存储在存储器位置151中的标志处于第二状态之后,线程A处理第三值并将第四值写入存储器位置131,换行阵列并覆盖先前写入的值。在另一个实施例中,不同的线程可以处理第三值并将第四值写入存储器位置,而不是重用线程A,换行阵列并覆盖先前写入的值。线程A在写入第四值的同时,将存储在存储器位置131中的标志从第二状态切换到第一状态。在另一个实施例中,线程E将存储在存储器位置131中的标志从第二状态切换到第一状态,同时将第三值写入存储器位置131,换行阵列并覆盖先前写入的值。在又一个实施例中,一个或更多个附加线程读取第三值,生成第四值,该第四值被写入共享存储器105,同时切换相关标志,以在换行阵列之前连续生成任意数量的值。
与传统共享存储器同步技术相比,当可重用存储器位置的数量时,可减少共享存储器105内的存储器位置的数量。此外,由于在重用存储器位置之前不需要重新初始化标志,因此性能得以提高。不是初始化与一次性使用存储器位置对应的标志,而是切换用于减少可重用存储器位置数量的少量标志,以确保同步。此外,维护标志状态信息以跟踪指示存储在存储器位置中的值是否有效的标志状态。在一个实施例中,包括阵列的存储器位置存储在片上高速缓存中,例如1级(L1)和/或2级(L2)高速缓存。
图2A示出了根据一个实施例的用于同步共享存储器通信的方法200的流程图。尽管在处理单元的上下文中描述了方法200,但方法200也可以通过程序、自定义电路或自定义电路和程序的组合来执行。例如,方法200可以由GPU、CPU或能够访问共享存储器105的任何处理器执行。此外,本领域的普通技术人员将理解,执行方法200的任何系统都在本发明实施例的范围和精神内。
在步骤205,标志管理单元120初始化包括共享存储器105中的多个存储器位置的阵列中的所有标志,并初始化标志状态125。在步骤210,多线程并行处理器(例如单元110或160)执行第一组线程,以根据指令序列处理输入。在步骤215,第一组线程中的第一线程生成第一值。在步骤220,将第一值被写入第一位置,同时更新存储在共享存储器105的第一位置中的第一标志。通过切换第一标志来更新第一标志。当阵列中的标志初始化为第一状态时,切换将第一标志更新为第二状态。当共享存储器通信从阵列的末尾进行换行以重用存储器位置时,随着每个存储器位置被覆盖,标志从第二状态切换回第一状态。当共享存储器通信第二次从阵列末端进行换行时,标志再次从第一状态切换到第二状态,依此类推。
图2B示出了根据一个实施例的用于同步共享存储器通信的方法225的另一流程图。尽管在处理单元的上下文中描述了方法225,但也可以通过程序、自定义电路或自定义电路和程序的组合来执行方法225。例如,方法225可以由GPU、CPU或能够访问共享存储器105的任何处理器执行。此外,本领域的普通技术人员将理解,执行方法225的任何系统都在本发明实施例的范围和精神内。
在步骤205,标志管理单元120初始化包括共享存储器105中的多个存储器位置的阵列中的所有标志,并初始化标志状态125。在步骤212,线程A执行第一指令以处理输入并生成第一值。在步骤222,线程A将第一值写入第一存储器位置131,同时切换存储在第一存储器位置131中的第一标志。在步骤224,线程C开始执行第二条指令以处理第一值。在步骤226,线程C读取存储在第一存储器位置131中的与第一值对应的标志,并指示第一值是否已由线程A写入。在一个实施例中,存储在标志状态125中的标志状态信息用于确定标志是否已改变指示第一值有效的状态。
如果在步骤226,标志指示第一值无效,则重复步骤226。当在步骤226,标志指示第一值有效时,则在步骤228,线程C读取并处理第一值以生成第二值。在步骤228,第二值写入第二存储器位置141,同时切换存储在第二存储器位置141中的第二标志。
在步骤230,线程E开始执行第三指令以处理第二值。在步骤232,线程E读取存储在第二存储器位置141中的与第二值对应的第二标志,并指示第二值是否已由线程C写入。如果在步骤232,第二标志指示第二值无效,则重复步骤232。当在步骤232,第二标志指示第二值有效时,则在步骤234,线程E读取并处理第二值以生成第三值。在步骤234,将第三值写入第三存储位置151,同时切换存储在第三存储位置151中的第三标志。
在步骤240,线程A开始执行第四指令以处理第三值。在步骤242,线程A读取存储在第三存储器位置151中的与第三值对应的第三标志,并指示第三值是否已由线程E写入。如果在步骤242,第三个标志指示第三值无效,则重复步骤242。当在步骤242,第三个标志指示第三值有效时,则在步骤244,线程A读取并处理第三值以生成第四值。在步骤244,将第四值写入第一存储位置131,同时切换存储在第一存储位置131中的第一标志。
在每个数据包中存储单个标志和一个或更多个值,其中在写入一个或更多个值的同时切换标志,从而消除了对存储器围栏的需要。该标志还支持生产者线程和一个或更多个消费者线程之间通过共享存储器进行同步数据交换,而无需障碍。为每次写入切换标志,并维护状态信息以供消费者线程使用,以确定标志的状态是否指示与标志相同的数据包中的值有效。在所有消费者读取存储在存储器位置中的值后,可以重用存储器位置。无需重新初始化标志即可重用存储器位置。重用存储器位置可以减少执行程序所需的存储器位置数量,并减少了高速缓存占用空间,从而减少高速缓存抖动的可能性。
并行处理架构
图3示出了根据一个实施例的并行处理单元(PPU)300。在一个实施例中,PPU 300是在一个或更多个集成电路器件上实现的多线程处理器。PPU 300是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由PPU 300执行的指令组的实例。在一个实施例中,PPU 300是图形处理单元(GPU),其被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成用于在显示装置(诸如液晶显示(LCD)设备)上显示的二维(2D)图像数据。在其他实施例中,PPU 300可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
一个或更多个PPU 300可以被配置为加速数千个高性能计算(HPC)、数据中心和机器学习应用。PPU 300可被配置为加速众多深度学习系统和应用,包括自动驾驶汽车平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物研发、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐,等等。
如图3所示,PPU 300包括输入/输出(I/O)单元305、前端单元315、调度器单元320、工作分配单元325、集线器330、交叉开关(Xbar)370、一个或更多个通用处理集群(GPC)350以及一个或更多个存储器分区单元380。PPU 300可以经由一个或更多个高速NVLink 310互连连接到主机处理器或其他PPU 300。PPU 300可以经由互连302连接到主机处理器或其他外围设备。PPU 300还可以连接到包括多个存储器设备的本地存储器304。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。DRAM设备可以被配置为高带宽存储器(HBM)子系统,其中多个DRAM裸晶(die)堆叠在每个设备内。
NVLink 310互连使得系统能够扩展并且包括与一个或更多个CPU结合的一个或更多个PPU 300,支持PPU 300和CPU之间的高速缓存一致性,以及CPU主控。数据和/或命令可以由NVLink 310通过集线器330发送到PPU 300的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图5B更详细地描述NVLink 310。
I/O单元305被配置为通过互连302从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。I/O单元305可以经由互连302直接与主机处理器通信,或通过一个或更多个中间设备(诸如存储器桥)与主机处理器通信。在一个实施例中,I/O单元305可以经由互连302与一个或更多个其他处理器(例如,一个或更多个PPU 300)通信。在一个实施例中,I/O单元305实现外围组件互连高速(PCIe)接口,用于通过PCIe总线进行通信,并且互连302是PCIe总线。在替代的实施例中,I/O单元305可以实现其他类型的已知接口,用于与外部设备进行通信。
I/O单元305对经由互连302接收的数据包进行解码。在一个实施例中,数据包表示被配置为使PPU 300执行各种操作的命令。I/O单元305按照命令指定将解码的命令发送到PPU 300的各种其他单元。例如,一些命令可以被发送到前端单元315。其他命令可以被发送到集线器330或PPU 300的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元305被配置为在PPU 300的各种逻辑单元之间和之中路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向PPU 300提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和PPU 300两者访问(例如,读/写)的区域。例如,I/O单元305可以被配置为经由通过互连302传输的存储器请求访问连接到互连302的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向PPU 300发送指向命令流开始的指针。前端单元315接收指向一个或更多个命令流的指针。前端单元315管理一个或更多个流,从流读取命令并将命令转发到PPU 300的各个单元。
前端单元315耦合到调度器单元320,其配置各种GPC 350以处理由一个或更多个流定义的任务。调度器单元320被配置为跟踪与由调度器单元320管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个GPC 350,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元320管理一个或更多个GPC 350上的多个任务的执行。
调度器单元320耦合到工作分配单元325,其被配置为分派任务以在GPC 350上执行。工作分配单元325可以跟踪从调度器单元320接收到的若干调度的任务。在一个实施例中,工作分配单元325为每个GPC 350管理待处理(pending)任务池和活动任务池。待处理任务池可以包括若干时隙(例如,32个时隙),其包含被指派为由特定GPC 350处理的任务。活动任务池可以包括若干时隙(例如,4个时隙),用于正在由GPC 350主动处理的任务。当GPC350完成任务的执行时,该任务从GPC 350的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在GPC 350上执行。如果GPC 350上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC 350中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在GPC 350上执行。
工作分配单元325经由XBar(交叉开关)370与一个或更多个GPC 350通信。XBar370是将PPU 300的许多单元耦合到PPU 300的其他单元的互连网络。例如,XBar 370可以被配置为将工作分配单元325耦合到特定的GPC 350。虽然没有明确示出,但PPU 300的一个或更多个其他单元也可以经由集线器330连接到XBar 370。
任务由调度器单元320管理并由工作分配单元325分派给GPC 350。GPC 350被配置为处理任务并生成结果。结果可以由GPC 350内的其他任务消耗,经由XBar 370路由到不同的GPC 350,或者存储在存储器304中。结果可以经由存储器分区单元380写入存储器304,存储器分区单元380实现用于从存储器304读取数据和向存储器304写入数据的存储器接口。结果可以通过NVLink310发送到另一个PPU 300或CPU。在一个实施例中,PPU 300包括数目为U的存储器分区单元380,其等于耦合到PPU 300的独立且不同的存储器304存储器设备的数目。下面将结合图4B更详细地描述存储器分区单元380。
在一个实施例中,主机处理器执行实现应用程序编程接口(API)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度操作用于在PPU 300上执行。在一个实施例中,多个计算应用由PPU 300同时执行,并且PPU 300为多个计算应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(例如,API调用),其使得驱动程序内核生成一个或更多个任务以由PPU 300执行。驱动程序内核将任务输出到正在由PPU 300处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图5A更详细地描述线程和协作线程。
图4A示出了根据一个实施例的图3的PPU 300的GPC 350。如图4A所示,每个GPC350包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 350包括管线管理器410、预光栅操作单元(PROP)415、光栅引擎425、工作分配交叉开关(WDX)480、存储器管理单元(MMU)490以及一个或更多个数据处理集群(DPC)420。应当理解,图4A的GPC 350可以包括代替图4A中所示单元的其他硬件单元或除图4A中所示单元之外的其他硬件单元。
在一个实施例中,GPC 350的操作由管线管理器410控制。管线管理器410管理用于处理分配给GPC 350的任务的一个或更多个DPC 420的配置。在一个实施例中,管线管理器410可以配置一个或更多个DPC 420中的至少一个来实现图形渲染管线的至少一部分。例如,DPC 420可以被配置为在可编程流式多处理器(SM)440上执行顶点着色程序。管线管理器410还可以被配置为将从工作分配单元325接收的数据包路由到GPC 350中适当的逻辑单元。例如,一些数据包可以被路由到PROP 415和/或光栅引擎425中的固定功能硬件单元,而其他数据包可以被路由到DPC 420以供图元引擎435或SM 440处理。在一个实施例中,管线管理器410可以配置一个或更多个DPC 420中的至少一个以实现神经网络模型和/或计算管线。
PROP单元415被配置为将由光栅引擎425和DPC 420生成的数据路由到光栅操作(ROP)单元,结合图4B更详细地描述。PROP单元415还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
光栅引擎425包括被配置为执行各种光栅操作的若干固定功能硬件单元。在一个实施例中,光栅引擎425包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和图块聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,图块的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并且发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎425的输出包括例如要由在DPC 420内实现的片段着色器处理的片段。
包括在GPC 350中的每个DPC 420包括M管线控制器(MPC)430、图元引擎435和一个或更多个SM 440。MPC 430控制DPC 420的操作,将从管线管理器410接收到的数据包路由到DPC 420中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎435,图元引擎435被配置为从存储器304提取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到SM 440。
SM 440包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个SM440是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,SM 440实现SIMD(单指令、多数据)体系架构,其中线程组(例如,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,SM 440实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束中的串行执行之间的并发成为可能。在另一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图5A更详细地描述SM440。
MMU 490提供GPC 350和存储器分区单元380之间的接口。MMU 490可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,MMU 490提供用于执行从虚拟地址到存储器304中的物理地址的转换的一个或更多个转换后备缓冲区(TLB)。
图4B示出了根据一个实施例的图3的PPU 300的存储器分区单元380。如图4B所示,存储器分区单元380包括光栅操作(ROP)单元450、二级(L2)高速缓存460和存储器接口470。存储器接口470耦合到存储器304。存储器接口470可以实现用于高速数据传输的32、64、128、1024位数据总线等。在一个实施例中,PPU 300合并了U个存储器接口470,每对存储器分区单元380有一个存储器接口470,其中每对存储器分区单元380连接到对应的存储器304的存储器设备。例如,PPU 300可以连接到多达Y个存储器设备,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储器。
在一个实施例中,存储器接口470实现HBM2存储器接口,并且Y等于U的一半。在一个实施例中,HBM2存储器堆叠位于与PPU 300相同的物理封装上,提供与常规GDDR5 SDRAM系统相比显著的功率高和面积节约。在一个实施例中,每个HBM2堆叠包括四个存储器裸晶并且Y等于4,其中HBM2堆叠包括每个裸晶两个128位通道,总共8个通道和1024位的数据总线宽度。
在一个实施例中,存储器304支持单错校正双错检测(SECDED)纠错码(ECC)以保护数据。对于对数据损毁敏感的计算应用程序,ECC提供了更高的可靠性。在大型集群计算环境中,PPU 300处理非常大的数据集和/或长时间运行应用程序,可靠性尤其重要。
在一个实施例中,PPU 300实现多级存储器层次。在一个实施例中,存储器分区单元380支持统一存储器以为CPU和PPU 300存储器提供单个统一的虚拟地址空间,使得虚拟存储器系统之间的数据能够共享。在一个实施例中,跟踪PPU 300对位于其他处理器上的存储器的访问频率,以确保存储器页面被移动到更频繁地访问该页面的PPU 300的物理存储器。在一个实施例中,NVLink 310支持地址转换服务,其允许PPU 300直接访问CPU的页表并且提供由PPU 300对CPU存储器的完全访问。
在一个实施例中,复制引擎在多个PPU 300之间或在PPU 300与CPU之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元380可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行传输。在常规系统中,针对多个处理器之间的多个复制引擎操作固定存储器(例如,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页面是否驻留,并且复制过程是否透明。
来自存储器304或其他系统存储器的数据可以由存储器分区单元380取回并存储在L2高速缓存460中,L2高速缓存460位于芯片上并且在各个GPC 350之间共享。如图所示,每个存储器分区单元380包括与对应的存储器304相关联的L2高速缓存460的一部分。然后可以在GPC 350内的多个单元中实现较低级高速缓存。例如,每个SM 440可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 440的专用存储器。来自L2高速缓存460的数据可以被获取并存储在每个L1高速缓存中,以在SM 440的功能单元中进行处理。L2高速缓存460被耦合到存储器接口470和XBar 370。
ROP单元450执行与诸如颜色压缩、像素混合等像素颜色相关的图形光栅操作。ROP单元450还与光栅引擎425一起实现深度测试,从光栅引擎425的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则ROP单元450更新深度缓冲区并将深度测试的结果发送给光栅引擎425。将理解的是,存储器分区单元380的数量可以不同于GPC 350的数量,并且因此每个ROP单元450可以耦合到每个GPC 350。ROP单元450跟踪从不同GPC 350接收到的数据包并且确定由ROP单元450生成的结果通过Xbar 370被路由到哪个GPC 350。尽管在图4B中ROP单元450被包括在存储器分区单元380内,但是在其他实施例中,ROP单元450可以在存储器分区单元380之外。例如,ROP单元450可以驻留在GPC 350或另一个单元中。
图5A示出了根据一个实施例的图4A的流式多处理器440。如图5A所示,SM 440包括指令高速缓存505、一个或更多个调度器单元510、寄存器文件520、一个或更多个处理核心550、一个或更多个特殊功能单元(SFU)552、一个或更多个加载/存储单元(LSU)554、互连网络580、共享存储器/L1高速缓存570。
如上所述,工作分配单元325调度任务以在PPU 300的GPC 350上执行。任务被分配给GPC 350内的特定DPC 420,并且如果该任务与着色器程序相关联,则该任务可以被分配给SM 440。调度器单元510接收来自工作分配单元325的任务并且管理指派给SM 440的一个或更多个线程块的指令调度。调度器单元510调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元510可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心550、SFU 552和LSU554)。
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动API支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(例如,sync线程s()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
协作组使得程序员能够在子块(例如,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
分派单元515被配置为向一个或更多个功能单元传送指令。在该实施例中,调度器单元510包括两个分派单元515,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元510可以包括单个分派单元515或附加分派单元515。
每个SM 440包括寄存器文件520,其提供用于SM 440的功能单元的一组寄存器。在一个实施例中,寄存器文件520在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件520的专用部分。在另一个实施例中,寄存器文件520在由SM 440执行的不同线程束之间被划分。寄存器文件520为连接到功能单元的数据路径的操作数提供临时存储器。
每个SM 440包括L个处理核心550。在一个实施例中,SM 440包括大量(例如128个等)不同的处理核心550。每个核心550可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。在一个实施例中,核心550包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensorcore)。
张量核心配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心550中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4×4矩阵上运算并且执行矩阵乘法和累加运算D=A×B+C,其中A、B、C和D是4×4矩阵。
在一个实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累加矩阵C和D可以是16位浮点或32位浮点矩阵。张量核心在16位浮点输入数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4×4×4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。API(诸如CUDA 9C++API)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。
每个SM 440还包括执行特殊函数(例如,属性评估、倒数平方根等)的M个SFU 552。在一个实施例中,SFU 552可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,SFU 552可以包括被配置为执行纹理图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器304加载纹理图(例如,纹理像素的2D阵列)并且对纹理图进行采样以产生经采样的纹理值,用于在由SM 440执行的着色器程序中使用。在一个实施例中,纹理图被存储在共享存储器/L1高速缓存470中。纹理单元实现纹理操作,诸如使用mip图(即,不同细节层次的纹理图)的过滤操作。在一个实施例中,每个SM 440包括两个纹理单元。
每个SM 440还包括N个LSU 554,其实现共享存储器/L1高速缓存570和寄存器文件520之间的加载和存储操作。每个SM 440包括将每个功能单元连接到寄存器文件520以及将LSU 554连接到寄存器文件520、共享存储器/L1高速缓存570的互连网络580。在一个实施例中,互连网络580是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件520中的任何寄存器,以及将LSU 554连接到寄存器文件和共享存储器/L1高速缓存570中的存储器位置。
共享存储器/L1高速缓存570是片上存储器阵列,其允许数据存储和SM 440与图元引擎435之间以及SM 440中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存570包括128KB的存储容量并且在从SM 440到存储器分区单元380的路径中。共享存储器/L1高速缓存570可以用于高速缓存读取和写入。共享存储器/L1高速缓存570、L2高速缓存460和存储器304中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存570内的集成使共享存储器/L1高速缓存570起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图3所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元325将线程块直接指派并分配给DPC 420。块中的线程执行相同的程序,使用计算中的唯一线程ID来确保每个线程生成唯一结果,使用SM 440执行程序并执行计算,使用共享存储器/L1高速缓存570以在线程之间通信,以及使用LSU 554通过共享存储器/L1高速缓存570和存储器分区单元380读取和写入全局存储器。当被配置用于通用并行计算时,SM 440还可以写入调度器单元320可用来在DPC 420上启动新工作的命令。
PPU 300可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,PPU 300包含在单个半导体衬底上。在另一个实施例中,PPU 300与一个或更多个其他器件(诸如附加PPU 300、存储器304、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数字-模拟转换器(DAC)等)一起被包括在片上系统(SoC)上。
在一个实施例中,PPU 300可以被包括在图形卡上,图形卡包括一个或更多个存储器设备。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口。在又一个实施例中,PPU 300可以是包含在主板的芯片集中的集成图形处理单元(iGPU)或并行处理器。
示例性计算系统
具有多个GPU和CPU的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能GPU加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。
图5B是根据一个实施例的使用图3的PPU 300实现的处理系统500的概念图。示例性系统565可以被配置为实现图2A中所示的方法200和/或图2B所示的方法225。处理系统500包括CPU 530、交换机510和多个PPU 300以及相应的存储器304。NVLink 310提供每个PPU 300之间的高速通信链路。尽管图5B中示出了特定数量的NVLink 310和互连302连接,但是连接到每个PPU 300和CPU 530的连接的数量可以改变。交换机510连接互连302和CPU530。PPU 300、存储器304和NVLink 310可以位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两个或更多个在各种不同连接和/或链路之间接口的协议。
在另一个实施例(未示出)中,NVLink 310在每个PPU 300和CPU 530之间提供一个或更多个高速通信链路,并且交换机510在互连302和每个PPU 300之间进行接口。PPU 300、存储器304和互连302可以位于单个半导体平台上以形成并行处理模块525。在又一个实施例(未示出)中,互连302在每个PPU 300和CPU 530之间提供一个或更多个通信链路,并且交换机510使用NVLink 310在每个PPU 300之间进行接口,以在PPU 300之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink 310在PPU 300和CPU 530之间通过交换机510提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连302在每个PPU 300之间直接地提供一个或更多个通信链路。可以使用与NVLink 310相同的协议将一个或更多个NVLink 310高速通信链路实现为物理NVLink互连或者片上或裸晶上互连。
在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块525可以被实现为电路板衬底,并且PPU 300和/或存储器304中的每一个可以是封装器件。在一个实施例中,CPU 530、交换机510和并行处理模块525位于单个半导体平台上。
在一个实施例中,每个NVLink 310的信令速率是20到25千兆位/秒,并且每个PPU300包括六个NVLink 310接口(如图5B所示,每个PPU 300包括五个NVLink 310接口)。每个NVLink 310在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供300千兆位/秒。当CPU 530还包括一个或更多个NVLink 310接口时,NVLink 310可专门用于如图5B所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
在一个实施例中,NVLink 310允许从CPU 530到每个PPU 300的存储器304的直接加载/存储/原子访问。在一个实施例中,NVLink 310支持一致性操作,允许从存储器304读取的数据被存储在CPU 530的高速缓存分层结构中,减少了CPU 530的高速缓存访问延迟。在一个实施例中,NVLink 310包括对地址转换服务(ATS)的支持,允许PPU 300直接访问CPU530内的页表。一个或更多个NVLink 310还可以被配置为以低功率模式操作。
图5C示出了示例性系统565,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统565可以被配置为实现图2A中所示的方法200和/或图2B所示的方法225。
如图所示,提供系统565,其包括连接到通信总线575的至少一个中央处理单元530。通信总线575可以使用任何合适的协议来实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。系统565还包括主存储器540。控制逻辑(软件)和数据被存储在主存储器540中,主存储器540可以采取随机存取存储器(RAM)的形式。
系统565还包括输入设备560、并行处理系统525和显示设备545,例如常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备560(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统565。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,系统565可以出于通信目的通过网络接口535耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、电缆网络等)。
系统565还可以包括辅助存储(未示出)。辅助存储610包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器540和/或辅助存储中。这些计算机程序在被执行时使得系统565能够执行各种功能。存储器540、存储和/或任何其他存储是计算机可读介质的可能示例。
各种在先附图的体系架构和/或功能可以在通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统565可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。
虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
机器学习
在处理器(诸如PPU 300)上开发的深度神经网络(DNN)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习系统需要在物体识别和分类方面进行训练,以便在识别基本物体、遮挡物体等同时还有为物体分配情景时变得更加智能和高效。
在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性水平分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
深度神经网络(DNN)模型包括许多连接节点(例如,感知器、玻尔兹曼机器、径向基函数、卷积层等)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,DNN模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高水平的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
一旦DNN被训练,DNN就可以被部署并用于在被称为推理(inference)的过程中识别和分类对象或图案。推理的示例(DNN从给定输入中提取有用信息的过程)包括识别沉积在ATM机中的支票存款上的手写数字、识别照片中朋友的图像、向超过五千万用户提供电影推荐、识别和分类不同类型的汽车、行人和无人驾驶汽车中的道路危险、或实时翻译人类言语。
在训练期间,数据在前向传播阶段流过DNN,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到DNN正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由PPU 300支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练更低,是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理新的信息。
神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百TFLOPS的性能,PPU 300是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。
注意,本文描述的技术可以体现在存储在计算机可读介质中的可执行指令中,以供基于处理器的指令执行机器、系统、装置或设备使用或与之结合使用。本领域技术人员将理解,对于一些实施例,可以包括用于存储数据的各种类型的计算机可读介质。如本文所使用的,“计算机可读介质”包括用于存储计算机程序的可执行指令的任何合适介质中的一个或更多个,使得指令执行机器、系统、装置或设备可以从计算机可读介质读取(或提取)指令,并执行用于执行所述实施例的指令。合适的存储格式包括电子、磁性、光学和电磁格式中的一种或更多种。传统示例计算机可读介质的非穷举列表包括:便携式计算机软盘;随机存取存储器(RAM);只读存储器(ROM);可擦除可编程只读存储器(EPROM);闪存设备;以及光存储设备,包括便携式光盘(CD)、便携式数字视频光盘(DVD)等。
应当理解,附图中所示的组件布置是为了说明目的,其他布置也是可能的。例如,本文所述的一个或更多个元件可以全部或部分地实现为电子硬件组件。其他元件可以在软件、硬件或软件和硬件的组合中实现。此外,这些其他元件中的一些或全部可以组合,一些可以全部省略,并且可以添加附加组件,仍然可以实现本文所述的功能。因此,本文所述的主题可以体现在许多不同的变型中,并且所有这些变型都在权利要求的预期范围内。
为了促进理解本文所述的主题,根据动作序列描述了许多方面。本领域技术人员将认识到,各种动作可以由专用电路或电路、由一个或更多个处理器执行的程序指令或两者的组合来执行。本文对任何动作序列的描述并不意味着必须遵循为执行该序列而描述的特定顺序。除非本文另有说明或与上下文有明显矛盾,否则本文所述的所有方法均可按任何适当顺序执行。
在描述标的物的上下文中(特别是在以下权利要求的上下文中)使用术语“一”和“一个”以及“该”以及类似指称的使用应当被解释为涵盖单数和复数二者,除非本文另有说明或与上下文明显矛盾。后接具有一个或更多个项目的列表的术语“至少一个”(例如,“A和B中的至少一个”)的使用应当被解释为表示从所列项目中选择的一个项目(A或B),列出项目中的两个或更多个所列项目(A和B)的任何组合,除非本文另有说明或与上下文明显矛盾。此外,上述描述仅用于说明目的,而非用于限制的目的,因为寻求的保护范围由此后其任何等效物一起阐述的权利要求及限定。除非另有声明,否则使用本文提供的任何和所有示例或示例性语言(例如“诸如”)仅旨在更好地说明主题,并不构成对主题范围的限制。在权利要求书和书面描述中使用术语“基于”和其他类似短语的使用并不预期排除带来该结果的任何其他条件。说明书中的任何语言都不应被解释为指示任何未要求保护的元素对于所要求保护的本发明的实施是必不可少的。

Claims (20)

1.一种计算机实现的方法,包括:
由多线程并行处理器执行线程组,以根据指令序列处理输入;
由所述线程组中的第一线程生成第一值;以及
将所述第一值写入共享存储器的第一位置,同时将存储在所述第一位置的第一标志从第一状态更新为第二状态,其中当所述指令序列的执行开始时,所述第一标志被初始化为所述第二状态。
2.根据权利要求1所述的计算机实现的方法,还包括:
由第三线程确定所述第一标志已从所述第一状态更改为所述第二状态;
在更新存储在所述共享存储器的第二位置中的由所述线程组中的第二线程写入的第二标志之前,由所述第三线程从所述第一位置读取所述第一值;以及
由所述第三线程处理所述第一值以产生输出。
3.根据权利要求2所述的计算机实现的方法,其中确定所述第一标志已从所述第一状态更改为所述第二状态包括由所述第三线程从所述第一位置同时读取所述第一标志和所述第一值。
4.根据权利要求3所述的计算机实现的方法,其中确定所述第一标志已从所述第一状态更改为所述第二状态还包括将所述第一标志与有效状态进行比较。
5.根据权利要求1所述的计算机实现的方法,其中所述第一值和所述第一标志被编码为单个16位、32位、64位或128位字之一。
6.根据权利要求1所述的计算机实现的方法,其中所述第一标志被存储在所述第一位置内的替换所述第一值的位的位置。
7.根据权利要求6所述的计算机实现的方法,其中所述位置对应于所述第一值的最低有效位。
8.根据权利要求1所述的计算机实现的方法,其中至少一个附加值与所述第一标志相关联,并且所述方法还包括当所述第一值被写入第一存储器位置时,将所述至少一个附加值同时写入所述第一存储器位置。
9.根据权利要求1所述的计算机实现的方法,其中所述指令序列的执行包括使用神经网络执行一个或更多个操作。
10.根据权利要求1所述的计算机实现的方法,还包括由所述第三线程将所述输出写入第三位置,同时将存储在所述共享存储器中的所述第三位置的第三标志从所述第一状态更新为所述第二状态。
11.根据权利要求10所述的计算机实现的方法,还包括:
由第四线程确定所述第三标志已从所述第一状态更改为所述第二状态;
由所述第四个线程处理所述输出以产生第四值;以及
将存储在所述第一位置的所述第一标志从所述第二状态更新为所述第一状态,同时将所述第四值写入所述第一位置。
12.一种系统,包括:
多核心并行处理器,其被耦合到共享存储器并且被配置为:
执行线程组以根据指令序列处理输入;
由所述线程组中的第一线程生成第一值;以及
将所述第一值写入所述共享存储器中的第一位置,同时将存储在所述第一位置的第一标志从第一状态更新为第二状态,其中当所述指令序列的执行开始时,所述第一标志被初始化为所述第二状态。
13.根据权利要求12所述的系统,其中所述多核心并行处理器进一步被配置为:
由第三线程确定所述第一标志已从所述第一状态更改为所述第二状态;
在更新存储在所述共享存储器的第二位置中的由所述线程组中的第二线程写入的第二标志之前,由所述第三线程从所述第一位置读取所述第一值;以及
由所述第三线程处理所述第一值以产生输出。
14.根据权利要求13所述的系统,其中确定所述第一标志已从所述第一状态更改为所述第二状态包括由所述第三线程从所述第一位置同时读取所述第一标志和所述第一值。
15.根据权利要求14所述的系统,其中确定所述第一标志已从所述第一状态更改为所述第二状态还包括将所述第一标志与有效状态进行比较。
16.根据权利要求13所述的系统,其中所述多核心并行处理器进一步被配置为由所述第三线程将所述输出写入第三位置,同时将存储在所述共享存储器中的所述第三位置的第三标志从所述第一状态更新为所述第二状态。
17.根据权利要求13所述的系统,所述多核心并行处理器进一步被配置为:
由第四线程确定所述第三标志已从所述第一状态更改为所述第二状态;
由所述第四线程处理所述输出以产生第四值;以及
将存储在所述第一位置的所述第一标志从所述第二状态更新为所述第一状态,同时将所述第四值写入所述第一位置。
18.根据权利要求12所述的系统,其中所述第一值和所述第一标志被编码为单个16位、32位、64位或128位字之一。
19.根据权利要求12所述的系统,其中所述第一标志被存储在所述第一位置内的替换所述第一值的位的位置。
20.一种非暂态计算机可读介质,其存储计算机指令,当由一个或更多个处理器执行所述指令时,使所述一个或更多个处理器执行以下步骤:
执行线程组以根据指令序列处理输入;
由所述线程组中的第一线程生成第一值;以及
将所述第一值写入共享存储器的第一位置,同时将存储在所述第一位置的第一标志从第一状态更新为第二状态,其中当所述指令序列的执行开始时,所述第一标志被初始化为所述第二状态。
CN202180012138.1A 2020-03-13 2021-03-12 无障碍和无围栏共享存储器同步 Pending CN115039076A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/818,845 2020-03-13
US16/818,845 US11620169B2 (en) 2020-03-13 2020-03-13 Barrierless and fenceless shared memory synchronization with write flag toggling
PCT/US2021/022113 WO2021183892A1 (en) 2020-03-13 2021-03-12 Barrierless and fenceless shared memory synchronization

Publications (1)

Publication Number Publication Date
CN115039076A true CN115039076A (zh) 2022-09-09

Family

ID=75478158

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180012138.1A Pending CN115039076A (zh) 2020-03-13 2021-03-12 无障碍和无围栏共享存储器同步

Country Status (4)

Country Link
US (1) US11620169B2 (zh)
CN (1) CN115039076A (zh)
DE (1) DE112021000303T5 (zh)
WO (1) WO2021183892A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220197719A1 (en) * 2020-12-21 2022-06-23 Intel Corporation Thread synchronization mechanism
US11874767B2 (en) * 2021-12-15 2024-01-16 Hewlett Packard Enterprise Development Lp Memory partitions for processing entities

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5408670A (en) * 1992-12-18 1995-04-18 Xerox Corporation Performing arithmetic in parallel on composite operands with packed multi-bit components
US6092175A (en) * 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
US20040019777A1 (en) * 2002-06-14 2004-01-29 Wygant Laurance F. Sharing data using a configuration register
US7415594B2 (en) * 2002-06-26 2008-08-19 Coherent Logix, Incorporated Processing system with interspersed stall propagating processors and communication elements
US7017015B2 (en) * 2002-12-20 2006-03-21 Rockwell Automation Technologies, Inc. Method and system for coordinating the access of data by two computer processes
US9081501B2 (en) 2010-01-08 2015-07-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
US10203995B2 (en) * 2013-11-22 2019-02-12 Excalibur Ip, Llc Method or system for access to shared resource
US10055129B2 (en) 2015-02-23 2018-08-21 Oracle International Corporation Read concurrency using hardware transactional lock elision
US20190138242A1 (en) * 2017-11-08 2019-05-09 Raytheon Company Lock-free asynchronous buffer

Also Published As

Publication number Publication date
US11620169B2 (en) 2023-04-04
WO2021183892A1 (en) 2021-09-16
DE112021000303T5 (de) 2022-12-01
US20210286619A1 (en) 2021-09-16

Similar Documents

Publication Publication Date Title
US11715251B2 (en) Neural network model trained using generated synthetic images
US10909033B1 (en) Techniques for efficiently partitioning memory
US10614613B2 (en) Reducing noise during rendering by performing parallel path space filtering utilizing hashing
US11106261B2 (en) Optimal operating point estimator for hardware operating under a shared power/thermal constraint
US11043028B2 (en) Reducing level of detail of a polygon mesh to decrease a complexity of rendered geometry within a scene
US20200151571A1 (en) Transposed sparse matrix multiply by dense matrix for neural network training
US11961001B2 (en) Parallel forward and backward propagation
US11341369B2 (en) Distributed batch normalization using partial populations
US10725837B1 (en) Persistent scratchpad memory for data exchange between programs
US11379420B2 (en) Decompression techniques for processing compressed data suitable for artificial neural networks
EP3678037A1 (en) Neural network generator
US10684824B2 (en) Stochastic rounding of numerical values
CN116736624A (zh) 在光学接近度校正流中对演进掩模形状的并行掩模规则检查
CN115202922A (zh) 用于压缩数据保护的打包的纠错码(ecc)
CN115039076A (zh) 无障碍和无围栏共享存储器同步
US11372548B2 (en) Techniques for accessing and utilizing compressed data and its state information
CN113822975A (zh) 用于对图像进行有效采样的技术
US20210232366A1 (en) Dynamic directional rounding
US20230394647A1 (en) Determining contour edges for an image
CN116246062A (zh) 使用图像/文本对执行语义分割训练

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination