CN106062814B - 由图形处理器改进的成组存储器存取效率 - Google Patents

由图形处理器改进的成组存储器存取效率 Download PDF

Info

Publication number
CN106062814B
CN106062814B CN201580013091.5A CN201580013091A CN106062814B CN 106062814 B CN106062814 B CN 106062814B CN 201580013091 A CN201580013091 A CN 201580013091A CN 106062814 B CN106062814 B CN 106062814B
Authority
CN
China
Prior art keywords
elements
array
read
memory device
array structure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201580013091.5A
Other languages
English (en)
Other versions
CN106062814A (zh
Inventor
S.帕尔
M.孙达雷桑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN106062814A publication Critical patent/CN106062814A/zh
Application granted granted Critical
Publication of CN106062814B publication Critical patent/CN106062814B/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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0607Interleaved addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0846Cache with multiple tag or data arrays being simultaneously accessible
    • G06F12/0851Cache with interleaved addressing
    • 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]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Multi Processors (AREA)
  • Image Processing (AREA)

Abstract

将结构阵列(AOS)转换成阵列结构(SOA)改进了从AOS到SOA的传送效率。可使用类似技术有效地从SOA转换成AOS。执行转换的控制器将分区大小计算为第一存储器装置中的组的数量与AOS中结构的结构大小之间的最高公因子,并基于分区大小而不是结构大小传送数据。控制器可从多个不同结构读取分区大小数量的元素以确保对于每次传送都使用全数据传送带宽。

Description

由图形处理器改进的成组存储器存取效率
技术领域
本发明的实施例一般涉及存储器结构,并且更具体地说,涉及改进存储器总线带宽利用以获取存储器结构。
版权声明/许可
此专利文档的公开部分可含有受到版权保护的资料。版权拥有人不反对任何人复制该专利文档或专利公开,因为它出现在专利和商标局专利文件或记录中,但以其它方式无论什么都保留所有版权权利。版权声明应用于下面所描述的所有数据,并且在所附的附图中,以及应用于下面描述的任何软件:版权© 2014,英特尔公司,保留所有权利。
背景技术
大多数电子系统包含某种类型的处理器。处理器可用不同架构制作,并且架构可影响处理器在执行某些处理任务时如何有效。例如,通用处理器倾向于具有一个或小量处理核,并且对于串行处理任务最有效。其它类型处理器可具有许多处理单元,并且在并行处理许多较小任务时更有效。
结构阵列(AOS)是供软件使用的方便数据格式,软件可方便地存储在存储器中以便串行运行。然而,阵列结构(SOA)是更方便用于有效并行运行的数据格式。从而,两个不同格式各自更好地适合于不同处理器架构。在许多计算系统中,存在从AOS转换到SOA和/或从SOA转换到AOS的理由。传统上,AOS与SOA之间的转换基于底层数据结构的大小。从而,转换中的总线利用或传送带宽利用取决于底层结构大小,其导致系统资源(总线带宽)上的性能降级或功率损耗,系统资源倾向于受约束,甚至在AOS到SOA转换中没有引入无效的情况下。
附图说明
如下描述包含具有作为实现本发明实施例的示例给出的图示的附图的论述。附图应该作为示例而非作为限制进行理解。如本文所使用的,对一个或多个“实施例”的提及要理解为描述包含在本发明至少一个实现中的具体特征、结构和/或特性。从而,在本文中出现的诸如“在一个实施例中”或“在备选实施例中”的短语描述了本发明的各种实施例和实现,并且不一定全都指的是同一实施例。然而,它们也不一定是相互排他的。
图1是执行结构阵列到阵列结构转换的系统实施例的框图。
图2是用于在共享成组存储器中从结构阵列转换到阵列结构的系统架构的实施例的框图。
图3A-3H表示在转换操作期间存储器组内容的实施例。
图4是用于从结构阵列转换到阵列结构的伪代码的实施例的表示。
图5是用于从结构阵列转换到阵列结构的过程实施例的流程图。
图6是可实现AOS到SOA转换的计算系统的实施例的框图。
图7是可实现AOS到SOA转换的移动装置的实施例的框图。
下面描述某些细节和实现,包含附图的描述,附图可描绘一些或所有下面描述的实施例,以及论述本文呈现的发明概念的其它潜在实施例或实现。
具体实施方式
如本文所描述的,控制器将结构阵列(AOS)转换到阵列结构(SOA)或将SOA转换到AOS。而不是基于结构大小从一个格式转换到另一格式,控制器计算分区大小和其它值以确保在AOS与SOA之间传送总线带宽的全使用。传送总线可以是耦合AOS和SOA结构的寄存器或缓冲器。从而,控制器可以确定如何确保获取将在每个操作循环中都充满总线或传送机制的宽度的若干元素。此类方法相对于基于结构大小传送并且通常未充满整个传送总线带宽的传统方法改进了传送效率。除了带宽利用上的效率改进,使用分区允许系统比用传统方法更早地开始生成SOA输出,因为系统一次仅读取一个分区,而不是整个结构。
更具体地说,控制器可一次获取多个不同结构的计算部分,而不是获取整个结构。控制器执行计算以确定对于每个传送操作获取的部分的正确大小和部分的数量。传送操作可运行为SIMD(单指令多数据)操作,其对数据集代替单个数据元素执行公共或单个指令。在一个实施例中,执行AOS与SOA之间转换的系统包含对特定数量的元素执行SIMD的传送机制。元素(单个指令可对其操作)数量通常被称为SIMD宽度,并且一般可理解为传送带宽。
关于计算,控制器可执行一个或多个如下计算。在一个实施例中,控制器计算最高公因子,并使用最高公因子作为分区大小来确定在获取操作中读取每个结构的多少元素。在一个实施例中,控制器计算若干分区,称为从中读取分区大小的元素的若干结构。基于这些计算,控制器可将单个结构的读取扩散到几个不同传送操作上。然而,此类方法改进了总体带宽利用,从而改进了性能和功耗。在一个实施例中,控制器还计算与在传送中偏移数据来以期望格式恰当地对准(align)数据相关的值。
为了简化的目的,如下示例指的是从AOS到SOA的转换。本领域技术人员将理解到,所描述的技术还可适用于从SOA到AOS的转换。对于AOS到SOA描述的某些计算还可对于SOA到AOS执行。更确切地说,用于SOA到AOS的控制器还可计算要读取的分区大小和分区的数量。将理解到,给定不同数据格式,要从中读取的位置将是不同的。从而,控制器可计算不同偏移以读取数据。
图1是执行结构阵列到阵列结构转换的系统的实施例的框图。系统100包含AOS被转换到SOA的处理系统。在一个实施例中,系统100包含CPU(中央处理单元)110和GPU(图形处理单元)120。CPU表示具有相对小数量N(例如1、2、4、8、16)的处理核112的处理器架构,它们被设计用于串行处理。CPU 110是系统100的主机处理器,并运行主机操作系统。
GPU表示具有相对高数量M(例如数百)的运行单元(EU)122的处理器架构,运行单元被设计用于并行运行小任务。虽然N和M的值可以改变,但一般而言,M会比N的量级大至少一阶或更多量。将理解到,存在可执行SIMD处理的其它架构,其中以串行格式存储用于串行处理的数据被转换成并行格式用于并行处理。从而,本领域技术人员将理解到,不是执行AOS与SOA之间转换用于SIMD处理的系统的每个实施例都将包含主机处理器和GPU。
在一个实施例中,CPU 110包含本地高速缓存114,其表示一个或多个片上层或级高速缓存(例如L1和L2高速缓存)。本地高速缓存114为要由CPU 110运行的代码和数据提供高速缓存。在一个实施例中,系统100包含共享高速缓存140,其可以是比本地高速缓存114(例如L3高速缓存)更高层的高速缓存。将理解到,共享高速缓存140可以是某一级高速缓存的一部分。从而,例如,系统100可包含在与共享高速缓存140相同层的但对CPU 110特定代替在CPU 110与GPU 120之间共享的其它高速缓存元件(未明确示出)。在一个实施例中,GPU120包含SOA缓冲器124,其表示对GPU 120本地的缓冲器或高速缓存以便以SOA格式存储数据。将理解到,SOA缓冲器124不一定表示对GPU 120本地的所有高速缓存。
在一个实施例中,共享高速缓存140是共享查找存储器(SLM),其是成组存储器结构。成组存储器结构允许数据在不同组中存储和存取,或者独立控制存储元件或位置阵列。成组存储器可允许无冲突地同时存取不同组。不成组的存储器装置必须串行存取。并行存取存储器装置可允许一次读取和写入多个元素,并且从而提供更宽的存储器数据总线。
如所图示的,共享高速缓存140包含多个AOS组142。AOS组142表示存储AOS数据的共享高速缓存140中的存储位置。AOS组142表示高速缓存的可寻址位置,并且从而可由提供地址的存取命令直接存取。AOS数据可由本地高速缓存114从AOS组142存取以便由CPU 110操作。共享高速缓存140还可包含TB(转置缓冲器)组144。TB组144表示与从共享高速缓存140中读取数据或将数据写入到共享高速缓存140中关联的缓冲器或寄存器。在一个实施例中,TB组144不是共享高速缓存140的可寻址位置,尽管在另一实施例中它们可能是。TB组144以SOA格式存储数据,以便传送到诸如处理SOA数据的GPU 120的装置。虽然显示为同一共享高速缓存140的部分,但在一个实施例中,AOS组142和TB组144可以是不同存储器装置的一部分,或者可被视为它们的一部分。从而,AOS组142中的数据可被称为第一存储器装置中的数据,并且TB组144中的数据可被称为第二存储器装置中的数据。
系统100包含总线控制器130,其表示处理系统的主机总线控制器。控制器130是或者包含控制跨存储器总线(未明确示出)或可传送SOA和AOS数据的其它总线的数据传送的逻辑。从而,控制器130可被视为控制在CPU 110与GPU 120之间或在AOS组142与TB组144之间的数据传送。在一个实施例中,控制器130基于由CPU 110和/或由GPU 120运行的代码或操作运行传送操作。控制器130可以是系统100的存储器控制器(MC)的一部分。
在一个实施例中,控制器130包含纵横(crossbar)132。纵横132表示允许将元素从组的第一集合中的任一组中的任何位置传送到组的第二集合中的任一组中的任何位置的传送机制。在一个实施例中,第一组和第二组可以是同一存储器装置的一部分,和/或可以是相同组。为了AOS到SOA转换的目的,纵横132实现运行可在单个循环或单个操作中从AOS组142读取数据并将它传送到TB组144的SIMD操作。纵横132还实现SOA到AOS转换的反向操作。
在一个实施例中,控制器130包含移位器134。移位器134表示基于所提供的偏移在组之间移位数据的逻辑。在一个实施例中,移位器134可被视为旋转器,其沿不同组的固定元素位置旋转数据。在一个实施例中,控制器130执行某些计算以在AOS格式与SOA格式之间传送数据。在一个实施例中,移位器134将存储在TB组144中的SOA数据旋转成对准的SOA数据以存储在SOA缓冲器124中。
在一个实施例中,共享高速缓存140具有许多组存储器(例如16组)。虽然在系统100中显示了AOS组142和TB组144,但将理解,共享高速缓存140可简单地说是具有多组存储器的存储器装置,并且某些区域存储按照AOS格式化的数据。其它数据可以与存储在组中的数据的AOS格式不同的格式存储在组中,或经由传送机制(寄存器、输出缓冲器、驱动器以及其它组件)从存储器传送。在一个实施例中,TB组144具有16的最大深度,但可以是任何深度,看到该深度是实现特定细节。在一个实施例中,可通过对地址数据执行取模运算以发现组号来读取AOS数据,其中操作的结果表示组中的地址或元素。
图2是用于在共享成组存储器中从结构阵列转换到阵列结构的系统架构的实施例的框图。在一个实施例中,系统200可以是图1系统100的一个示例。系统200的架构表示AOS到SOA转换的架构数据流。AOS 210表示以AOS格式存储的数据,具有跨N个组串行存储的数据结构。纵横220具有M的操作宽度,其是允许M个元素在单个操作循环中从AOS 210移动到TB(转置缓冲器)230的传送带宽。在一个实施例中,M等于N。TB 230也被显示为将数据存储在N个组中。TB 230以SOA格式存储从AOS 210读取的数据,如通过操作纵横220所转换的。
AOS 210存储多个结构。每个结构的大小都被假定为相同。实际上,近似相同大小(或者相同数量元素)的数据可被存储在相等大小的结构中。将理解到,系统200应该在每个操作中传送M个数据元素以便最大化带宽利用。在一个实施例中,控制器(例如总线控制器和/或主机处理器)计算AOS 210中的结构的结构大小与N(AOS中的组的数量)之间的最高公因子。最高公因子实际上可以是某些系统配置的结构的结构大小。在此类配置中,AOS到SOA转换会看上去与读取整个结构以传送的传统方法相同。然而,当最高公因子不同于结构大小时,所描述的AOS到SOA转换比传统方法更有效。代替传送整个结构,控制器可使用分区大小对于每次传送读取多个结构的部分。控制器基于所计算的最高公因子设置分区大小值(例如分区大小=最高公因子)。
将理解到,如果系统未在每个操作中都读取整个结构,则系统需要跟踪对于每个操作要读取每个结构的什么部分。在一个实施例中,系统计算偏移值,其可被称为移位值,其可等于N除以分区大小。在一个实施例中,控制器或处理器在开始任何传送操作之前计算这些值中的每个值。在一个实施例中,控制器可根据需要计算值。在一个实施例中,M=N,或者传送带宽等于组的数量。在一个实施例中,M具有不同于N的值,在此情况下,可基于组的数量确定最高公因子。
在一个实施例中,控制器可指令纵横220从偏移值数量的结构中读取分区大小值数量的元素。再次,如果M=N,则纵横220读取N个元素。如果M不同于N,则纵横220读取等于min(M,N)的数量的元素。在任一情况下,该点都最大化传送带宽。纵横220然后在单个操作循环(例如SIMD操作)中将读取的元素传送到TB 230。写入到TB 230的数据将被转换成SOA格式,代替处于如从AOS 210所读取的AOS格式。控制器将继续读取纵横220,并在将整个AOS数据传送到TB 230所必需的若干操作循环中传送元素。在一个实施例中,读取和传送连续执行。在一个实施例中,系统200可能需要中断读取和传送以允许TB 230将数据传送出,以给来自AOS 210的更多数据让地方。
将理解到,最佳传送利用发生在M=N时以及在TB 230中的组的数量等于AOS 210中的组的数量时。然而,与描述的那些类似的技术可适用于TB 230中的组的数量不同于AOS210中的组的数量的系统,和/或当纵横220在单个循环中可传送的元素的数量不同于在AOS210和/或TB 230中的组的数量时。在此类实现中,将结构分区成部分并读出那些部分仍能提供传送效率改进。
图3A-3H表示在转换操作期间存储器组内容的实施例。如下描述了用于AOS到SOA转换的操作。在一个实施例中,AOS包含存储AOS数据的若干组,并且TB包含与AOS相等的组的数量。纵横或传送机制可将数据从AOS的任何组移动到TB的任何组。如所示的,当从AOS写入到TB时,转换引入移位,以避免通过尝试在同一操作中向同一组的元素写入会生成的冲突。系统可包含移位器以将数据旋转到其恰当的对准。
图3A表示结构阵列的内容。每个条目或元素是结构的组分。结构组分由一对通过点分开的数字来标识。第一个数字是结构偏移,而第二个数字是结构内部的组分偏移。从而,结构大小是6个元素。如所图示的,组大小是16,并且从而AOS是16个元素宽。每个结构在附图中都通过起始点和结束点以及邻近结构的不同阴影描绘了。将理解到,在AOS中结构被串行组织,其中每组一个元素,直到结构绕回到第一组的最后一组为止。从而,结构0被存储在组0-5的第一行,结构1被存储在组6-11的第一行,并且结构2被存储在组12-15的第一行和组0-1的第二行。所图示的AOS含有16个结构,并且从而占用6个整行。
在一个实施例中,假定传送带宽等于组的数量(16)。从而,系统具有每个操作循环传送高达16个元素的容量。在传统方法中,系统控制器可执行整除以确定完整结构和传送带宽的数量(16)除以结构大小(6)给出了结果2(16/6=2)。传统方法从而会每个操作循环读取并传送两个整个结构。如本文所描述的,系统控制器可确定组的数量(16)与结构大小(6)之间的最高公因子(HCF),结果为2(16=2*2*2*2; 6=2*3; HCF=2)。系统控制器还可确定传送带宽除以HCF给出了结果8(16/2=8),这意味着,在每个操作循环内应该从8(传送带宽除以HCF)个不同结构中读取2个元素(HCF或分区大小),对于每个循环读取的总共16个元素。将理解到,此类方法将每次产生一个约整数,对于每个传送操作都充满带宽。
对于论述假定,变量num_banks表示TB(和AOS)中的组的数量,并且simd_size表示传送带宽或纵横的宽度。还假定,变量struct_size表示AOS中的结构大小,并且partition_size表示在单个操作中从每个结构中读取的元素的数量。从而,所示出的示例可被表示为num_banks=16,simd_size=16,struct_size=6并且partition_size=Highest_Common_Factor (num_banks,struct_size)=2。
图3B图示了基于以上计算的操作0。如所示的,两个元素各从8个不同结构读取。即,在操作0中,纵横读取元素[0.0]、[0.1]、[1.0]、[1.1]、… [7.0]、[7.1]。纵横可将元素传送到TB,其中结构的所有“第一”元素都在TB的顶一行,并且所有“第二”元素都在TB的第二行。从而,系统分别将元素[0.0]、[1.0]、…[7.0]放在组0-7的第一行,并将元素[0.1]、[1.1]、…[7.1]放在组8-15的第二行。将理解到,在单个操作中,仅可从单个组读取或向单个组写入。从而,系统从所有16个AOS组读取内容,每组一个元素。类似地,系统向TB的所有16个组写入,每组一个元素。
图3C图示了系统从AOS读取元素[8.0]、[9.0]、…[F.0]和[8.1]、 [9.1]、…[F.l]并将它们传送到TB的操作1。更确切地说,纵横分别将元素[8.0]、[9.0]、…[F.0]放在组8-15的第一行,并将元素[8.1]、[9.1]、…[F.1]放在组0-7的第二行。图3D图示了系统读取并传送元素[0.2]、[0.3]、[1.2]、[1.3]、… [7.2]、[7.3]的操作2。图3E图示了系统读取并传送元素[8.2]、[8.3]、[9.2]、[9.3]、… [F.2]、[F.3]的操作3。图3F图示了系统读取并传送元素[0.4]、[0.5]、[1.4]、[1.5]、… [7.4]、[7.5]的操作4。图3G图示了系统读取并传送元素[8.4]、[8.5]、[9.4]、[9.5]、…[F.4]、[F.5]的操作5。系统以与操作0和1类似的方式执行操作2、3、4和5。
图3H表示操作5之后的TB内容。将观察到,TB内容的每隔一行都旋转或移位8个组。在一个实施例中,系统包含移位器以将数据移位或旋转到其恰当的对准(如在SOA内容中所示的),其反应TB内容,但旋转成对准相同结构的元素。从而,系统可将公共结构的元素对准到公共组。例如,组0保持结构0的所有元素:[0.0]、[0.1]、[0.2]、[0.3]、[0.4]和[0.5]。组1保持结构1的所有元素,等等。表述“公共组中的公共结构”指的是在单个组中具有单个结构,并且不一定意味着组0必须保持结构0,或者组7必须保持结构7。移位操作例如可能已经移位了第一行、第三行和第五行,以对准公共组中的公共结构的元素。在此类实现中,组0会保持结构8,并且组9将保持结构0。
图4是用于从结构阵列转换到阵列结构的伪代码的实施例的表示。代码400示出了实现转换或转换器的伪代码的一个示例,其可以是实现按照图3A-3H的转换的代码的一个示例。从而,代码400描述了AOS到SOA转换器。本领域技术人员将理解如何修改代码400用于SOA到AOS转换。代码400可由系统控制器或主机总线控制器运行。在一个实施例中,主机处理器运行代码400,其使主机处理器生成使主机总线控制器运行实现代码的特定操作的命令。
在一个实施例中,代码作为输入接收值num_banks、struct_size、simd_size和start_offset,行402。在一个实施例中,其中一个或多个值被作为变元传递到代码400的函数调用。在一个实施例中,基于关于将运行代码的系统的现有知识,一个或多个值被硬编码成代码400。在一个实施例中,代码400访问来自存储在代码外部的信息的值(例如,查询或调用来自系统代码中另一地方的值)。Num_banks表示AOS中的组的数量。在一个实施例中,TB中的组的数量与AOS中的组的数量相同。Start_offset表示标识代码400将开始读取结构的AOS的地址或位置的数字。Start_offset可以是到代码将开始运行的地址位置的指针。
在一个实施例中,控制器计算值partition_size,等于num_banks和struct_size的HCF,行404。控制器还可计算值num_partitions,等于struct_size除以partition_size,行406。值partition_size是在单个操作中将读取的结构的部分。值num_partitions是在单个操作中将读取多少部分。将理解到,将从不同结构读取每个num_partitions。当struct_size是num_banks的因子时,传统转换方法仅能提供全传送带宽利用。然而,如本文对结构分区所描述的,转换可为任何结构大小提供全传送带宽,只要simd_size是(num_banks/partition_size)的倍数。
行408标识可从AOS存储器加载TB的代码400的操作。在一个实施例中,操作可被运行为循环嵌套。外循环运行num_partitions次,每个分区一次,直到读取整个结构为止,行410。在图3A-3H的示例中,图3B和3C图示了传送第一分区(每个结构的前两个元素),图3D和3E图示了传送第二分区(每个结构的第二两个元素),并且图3F和3G图示了传送最后分区(每个结构的最后两个元素)。
中循环运行simd_size次,对于要转换的每个结构运行一次,行412。虽然在示例中仅示出AOS含有16个结构,但将理解到,AOS可含有要转换的任何数量的结构。图示16个结构的原因是要显示,一组操作将转换等于传送机制的宽度的若干结构,其理想上与SOA中的组的数量大小相同。从AOS到SOA的转换的目标是在单个组中具有单个结构。从而,读取的结构的数量等于simd_size,或者一次可传送的组的宽度或数量。从而,中循环运行simd_size次,以读取结构的全带宽。
内循环运行partition_size次,对于在单个操作中要从每个结构读取的每个元素运行一次,行414。在内循环内,代码400计算aos_loc,其表示AOS从中读取的位置或地址,行416。AOS位置被计算为固定值start_offset加上变量值。如上面所说明的,start_offset是从AOS读取的初始位置。变量值在插入语内,并且是结构变量(i)乘以struct_size加上分区变量(p)乘以partition_size加上元素或组分变量(j)。在内循环中继续,在一个实施例中,代码400计算移位值,等于num_banks除以partition_size,行418。移位值是为了将结构元素与来自同一结构的其它元素对准(将同一结构的元素对准到同一组)而移位的量。
在一个实施例中,代码400可使用由aos_loc标识的位置以及向TB传送或写入数据的移位值。规定位置的TB(行420)接收在规定位置的AOS的内容,行422。TB的元素标识符由第一加括弧的TB值(其是p*partition_size +j)的解来确定。TB的组由第二加括弧的TB值(其是quantity (i+j*shift) mod num_banks)的解来确定。AOS组内的位置由第一加括弧的AOS值(其是aos_loc除以num banks)的解来确定。AOS元素的组由第二加括弧的AOS值(其是aos_loc mod num_banks)的解来确定。内循环结束于行424。中循环结束于行426。外循环结束于行428。
在一个实施例中,第一组嵌套循环向TB读AOS数据,并且第二组嵌套循环将数据从TB传送到SOA,包含对数据移位。行430指示提供执行反向移位(以撤销在写TB时引起的移位)并将TB内容作为SOA内容保存的示例的代码400的部分。
外循环运行num_partitions次,每个分区一次,直到读取整个结构为止,行432。中循环运行partition_size次,对于要读取的结构的每个元素运行一次,行434。中循环运行simd_size次,对于要读取和保存的每个结构运行一次,行436。在内循环内,在一个实施例中,代码400计算移位值,等于num_banks除以partition_size,行438。将理解到,可在循环之前计算移位值,类似于num_partitions,并且在循环中使用。内循环中的移位值可使在读取AOS内容时引入的移位反向。
在一个实施例中,SOA数据被标识为组和元素值,以被指配了根据TB的组和元素值标识的移位数据。SOA组由变量i标识。组内的位置通过计算p*partition_size加上j来标识,行440。TB组由quantity(i+j*shift)mod num_banks标识。组内的位置通过p*partition_size加上j来标识,行442。内循环结束于行444。中循环结束于行446。外循环结束于行448。
将理解到,代码400具有与AOS到SOA转换的传统方法类似的特征,但其中分区大小起类似于传统解决方案的结构大小的作用。由于该解决方案有效地“重新确定大小(resizes)”了结构,因此外循环允许迭代通过所有分区以捕获整个结构。在行420,TB是数据的目标,并且使读取的数据移位。在行442,TB是源,并且移位使在行420引入到数据中的移位反向。
图5是用于从结构阵列转换到阵列结构的过程实施例的流程图。过程500提供了数据从AOS到SOA的转换。在一个实施例中,系统确定存储AOS数据和存储SOA数据可用的组的数量,502。通常,AOS组的数量将等于SOA组的数量。组的数量在某些配置中可被设置为固定值。在其它实现中,系统可从系统配置信息中获得组的数量。在一个实施例中,系统确定结构大小504。结构大小可以是存储数据的公共容器(container)大小。
在一个实施例中,系统确定操作宽度或SIMD带宽,506。操作宽度指示在一个操作循环中可从AOS向SOA传送多少元素。常见的是,操作宽度等于组的数量。系统计算在组的数量或SIMD带宽大小与结构大小之间的最高公因子,508。将理解到,如果SIMD的大小与组的数量不相同,则系统基于组的数量而不是SIMD带宽来计算最高公因子。系统将分区大小变量值设置成计算的最高公因子,510。代替一次读取整个结构,系统在转换中将一次读取部分结构。系统可计算在每个操作循环中要传送的分区的数量,512。要传送的分区的数量是充满SIMD带宽将花费的数量。
将理解到,AOS到SOA转换将一次对若干结构进行操作,以传送等于将被生成的SOA数据的组的数量的若干结构。用此类方法,每组在转换操作之后都将含有整个结构。可能存在比SOA组的数量更多的AOS数据,在此情况下可对其它AOS数据运行另一转换。在一个实施例中,系统保持指示转换操作的初始地址的指针。
从而,系统对于所有选择的AOS数据执行操作循环,514。在一个实施例中,系统将通过SOA数据的组的数量进行迭代,516。对于SOA数据的组的数量的每次迭代,系统可对于分区大小的元素(其是之前计算的分区大小)进行迭代,518。对于分区大小数量的元素的每次迭代,系统读取AOS元素,520。系统可计算偏移以对准元素并避免操作冲突,522。此类冲突例如可以是试图在单个操作循环中在一个组中读取或写入多个元素。系统可使用计算的偏移向TB写入AOS数据的元素,524。系统然后迭代到下一分区元素,并且继续,直到已经达到分区大小的整个长度。
系统然后可确定是否已经读取了足够分区来充满操作宽度,526。如果操作宽度未充满,528否分支,则系统将继续其到随后分区的迭代,518。如果操作宽度充满了,528是分支,则系统可确定是否已经读取了选择的AOS数据的所有结构,530。如果尚未读取所有AOS数据,532否分支,则系统可继续迭代,直到已经读取了所有结构,516。当已经读取了所有选择的AOS结构时,532是分支,在一个实施例中,系统可使来自TB的元素移位以将结构元素对准到相同组,534。系统然后可将来自TB的移位数据写入到SOA中,536。
图6是可实现AOS与SOA之间转换的计算系统的实施例的框图。系统600表示按照本文描述的任何实施例的计算装置,并且可以是膝上型计算机、桌上型计算机、服务器、游戏或娱乐控制系统、扫描仪、复印机、打印机、路由或交换装置或其它电子装置。系统600包含处理器620,其提供系统600的处理、操作管理和指令运行。处理器620可包含任何类型的微处理器、中央处理单元(CPU)、处理核或其它处理硬件以提供系统600的处理。处理器620控制系统600的总体操作,并且可以是或包含一个或多个可编程通用或专用微处理器、数字信号处理器(DSP)、可编程控制器、专用集成电路(ASIC)、可编程逻辑器件(PLD)等或此类装置的组合。
存储器子系统630表示系统600的主存储器,并且提供要由处理器620运行的代码或者在运行例程时要使用的数据值的暂时存储。存储器子系统630可包含一个或多个存储器装置,诸如只读存储器(ROM)、闪存、一种或多种随机存取存储器(RAM)或其它存储器装置或此类装置的组合。存储器子系统630除了其它以外还存储和托管操作系统(OS)636,以提供软件平台以便在系统600中运行指令。此外,从存储器子系统630存储和运行其它指令638以提供系统600的逻辑和处理。OS 636和指令638由处理器620运行。存储器子系统630包含存储装置632,在其中它存储数据、指令、程序或其它项目。在一个实施例中,存储器子系统包含存储器控制器634,其是生成命令并向存储器装置632发布命令的存储器控制器。将理解到,存储器控制器634可能是处理器620的物理部分。
处理器620和存储器子系统630耦合到总线/总线系统610。总线610是表示任一个或多个单独物理总线、通信线/接口和/或通过适当桥、适配器和/或控制器连接的点对点连接的抽象。因此,总线610例如可包含系统总线、外围组件互连(PCI)总线、超传输或工业标准架构(ISA)总线、小计算机系统接口(SCSI)总线、通用串行总线(USB)或电气与电子工程师协会(IEEE)标准1394总线(通常称为“火线”)中的一个或多个。总线610的总线也可对应于网络接口650中的接口。
系统600还包含一个或多个输入/输出(I/O)接口640、网络接口650、一个或多个内部大容量存储装置660以及耦合到总线610的外围接口670。I/O接口640可包含一个或多个接口组件,通过其用户与系统600交互(例如视频、音频和/或字母数字接口)。在一个实施例中,I/O接口640包含一个或多个组件(诸如物理连接器和驱动器)以与显示由处理器620运行并计算的数据和/或存储在存储器子系统630中的数据的数字显示器装置对接。网络接口650给系统600提供了通过一个或多个网络与远程装置(例如服务器、其它计算装置)通信的能力。网络接口650可包含以太网适配器、无线互连组件、USB(通用串行总线)或其它基于有线或无线标准的接口或专有接口。
存储装置660可以是或包含用于以非易失性方式存储大量数据的任何常规介质,诸如一个或多个基于磁、固态或光的盘或组合。存储装置660以永久状态保持代码或指令和数据662(即,该值被保留,不管是否对系统600中断电力)。存储装置660一般可被视为“存储器”,尽管存储器630是向处理器620提供指令的运行或操作存储器。鉴于存储装置660是非易失性的,存储器630可包含易失性存储器(即,如果对系统600中断电力,则数据的值或状态是不确定的)。
外围接口670可包含上面未明确提到的任何硬件接口。外围一般指的是相关地连接到系统600的装置。相关连接是系统600提供在其上运行操作并且用户与其交互的软件和/或硬件平台的连接。
在一个实施例中,处理器620包含能以一种或多种数据格式存储数据的一个或多个存储器装置。数据可从AOS转换到SOA或从SOA转换到AOS,如本文所描述的。如本文所描述的,主机总线控制器和/或处理器620执行计算和转换操作以对数据结构分区,并传送部分或分区中的结构数据,代替整个结构中的。对于传送带宽是结构大小的倍数的实现,部分大小可等于结构大小。否则,系统在单个操作循环中传送来自多个不同结构的元素。在一个实施例中,此类转换可发生在是存储器子系统630一部分的至少一个存储器装置。
图7是可实现AOS与SOA之间转换的移动装置的实施例的框图。装置700表示移动计算装置,诸如计算平板、移动电话或智能电话、无线启用的e阅读器、可穿戴计算装置或其它移动装置。将理解到,一般示出了某些组件,并且在装置700中并未示出此类装置的全部组件。
装置700包含处理器710,其执行装置700的初级处理操作。处理器710可包含一个或多个物理器件,诸如微处理器、应用处理器、微控制器、可编程逻辑器件或其它处理部件。由处理器710执行的处理操作包含运行应用和/或装置功能的操作平台或操作系统的运行。处理操作包含与和人类用户或其它装置的I/O(输入/输出)相关的操作、与功率管理相关的操作和/或与将装置700连接到另一装置相关的操作。处理操作还可包含与音频I/O和/或显示器I/O相关的操作。
在一个实施例中,装置700包含音频子系统720,其表示与向计算装置提供音频功能关联的硬件(例如音频硬件和音频电路)和软件(例如驱动、编解码器)组件。音频功能可包含扬声器和/或耳机输出,以及麦克风输入。用于此类功能的装置可被集成到装置700中,或连接到装置700。在一个实施例中,用户通过提供由处理器710接收和处理的音频命令与装置700交互。
显示器子系统730表示为用户提供视觉和/或触觉显示以与计算装置交互的硬件(例如显示器装置)和软件(例如驱动)组件。显示器子系统730包含显示器接口732,其包含用于向用户提供显示的具体屏幕或硬件装置。在一个实施例中,显示器接口732包含与处理器710分开的逻辑,以执行与显示器相关的至少一些处理。在一个实施例中,显示器子系统730包含向用户提供输出和输入两者的触摸屏装置。在一个实施例中,显示器子系统730包含一个或多个组件(诸如物理连接器和驱动器)以与显示由处理器710运行并计算的数据和/或存储在存储器子系统760中的数据的数字显示器装置对接。
I/O控制器740表示与和用户交互相关的硬件装置和软件组件。I/O控制器740可操作以管理是音频子系统720和/或显示器子系统730的一部分的硬件。此外,I/O控制器740图示了连接到装置700的附加装置的连接点,通过其用户可能与系统交互。例如,可附连到装置700的装置可包含麦克风装置、扬声器或立体声系统、视频系统或其它显示器装置、键盘或键区装置或用于与特定应用一起使用的其它I/O装置(诸如读卡器或其它装置)。
如上面所提到的,I/O控制器740可与音频子系统720和/或显示器子系统730交互。例如,通过麦克风或其它音频装置的输入可为装置700的一个或多个应用或功能提供输入或命令。此外,代替显示输出或除了显示输出,可提供音频输出。在另一示例中,如果显示器子系统包含触摸屏,则显示器装置还充当输入装置,其可至少部分由I/O控制器740管理。可能在装置700上还存在附加按钮或开关以提供由I/O控制器740管理的I/O功能。
在一个实施例中,I/O控制器740管理诸如加速计、相机、光传感器或其它环境传感器、陀螺仪、全球定位系统(GPS)或可包含在装置700中的其它硬件的装置。输入可以是直接用户交互的一部分,以及向系统提供环境输入以影响其操作(诸如对于噪声过滤、对于亮度检测调整显示器、对于相机施加闪光或其它特征)。在一个实施例中,装置700包含管理电池功率使用、电池的充电以及与节电操作相关的特征的功率管理750。
存储器子系统760包含用于将信息存储在装置700中的一个或多个存储器装置762。存储器子系统760可包含非易失性(如果到存储器件的电力被中断则状态不改变)和/或易失性(如果到存储器装置的电力被中断则状态不确定)存储器装置。存储器760可存储应用数据、用户数据、音乐、照片、文档或其它数据,以及与系统700的应用和功能运行相关的系统数据(不管是长期的还是暂时的)。在一个实施例中,存储器子系统760包含存储器控制器764(其也可被视为系统700的控制的一部分,并且可潜在地被视为处理器710的一部分)。存储器控制器764包含调度器以生成命令并向存储器件762发布命令。
连接性770包含硬件装置(例如无线和/或有线连接器和通信硬件)和软件组件(例如驱动、协议栈),以使装置700能够与外部装置通信。外部装置可以是单独装置,诸如其它计算装置、无线接入点或基站以及诸如耳麦、打印机或其它装置的外设。
连接性770可包含多个不同类型连接性。概括地说,装置700图示为具有蜂窝连接性772和无线连接性774。蜂窝连接性772一般指的是由无线载波提供的蜂窝网络连接性,诸如经由GSM(全球移动通信系统)或变形或衍生、CDMA(码分多址)或变形或衍生、TDM(时分复用)或变形或衍生、LTE(长期演进-也称为“4G”)或其它蜂窝服务标准提供的连接性。无线连接性774指的是非蜂窝的无线连接性,并且可包含个域网(诸如蓝牙)、局域网(诸如WiFi)和/或广域网(诸如WiMax)或其它无线通信。无线通信指的是通过非固态介质通过使用调制的电磁辐射传送数据。有线通信通过固体通信介质发生。
外围连接780包含硬件接口和连接器以及软件组件(例如驱动、协议栈)以进行外围连接。将理解到,装置700可能是到其它计算装置的外围装置(“到”782),以及具有连接到它的外围装置(“从”784)两者。装置700通常具有“坞(docking)”连接器以连接到其它计算装置,诸如为了管理(例如下载和/或上载、改变、同步)装置700上内容的目的。此外,坞连接器可允许装置700连接到某些外设,这些外设允许装置700控制例如到试听系统或其它系统的内容输出。
除了专有坞连接器或其它专有连接硬件,装置700可经由公共连接器或基于标准的连接器进行外围连接780。公共类型可包含通用串行总线(USB)连接器(其可包含任何数量的不同硬件接口),显示端口(包含迷你显示端口(MDP))、高清多媒体接口(HDMI)、火线或其它类型。
在一个实施例中,处理器710包含能以一种或多种数据格式存储数据的一个或多个高速缓冲存储器装置。数据可从AOS转换到SOA或从SOA转换到AOS,如本文所描述的。如本文所描述的,主机总线控制器和/或处理器710执行计算和转换操作以对数据结构分区,并传送部分或分区中的结构数据,代替整个结构中的。对于传送带宽是结构大小的倍数的实现,部分大小可等于结构大小。否则,系统在单个操作循环中传送来自多个不同结构的元素。在一个实施例中,此类转换可发生在是存储器子系统760一部分的至少一个存储器装置。
在一个方面,方法包含:计算第一存储器装置中的组的数量与结构阵列中的结构的结构大小之间的最高公因子,其中所述最高公因子不同于所述结构的结构大小;将分区大小值设置成计算的最高公因子;计算等于所述组的数量除以所述分区大小的移位值;在一个操作循环中从等于所述移位值的若干结构中读取等于所述分区大小的若干元素;在所述一个操作循环中将读取的元素传送到具有与所述第一存储器装置相等的组的数量的第二存储器装置中的阵列结构;以及在随后操作循环中继续所述读取和传送,直到所述结构阵列的所有元素都被传送到所述阵列结构。
在一个实施例中,所述第一存储器装置和所述第二存储器装置是单个共享存储器装置的不同部分。在一个实施例中,将读取的元素传送到阵列结构进一步包括:计算等于所述组的数量的基数的取模运算以确定所述阵列结构中的位置,其中传送所述元素到所述阵列结构中的所述位置。在一个实施例中,将读取的元素传送到阵列结构进一步包括:运行单指令多数据(SIMD)操作以传送读取的所述元素。在一个实施例中,将读取的元素传送到所述阵列结构包括将读取的元素从与主机处理器关联的结构阵列传送到与图形处理器关联的阵列结构。在一个实施例中,所述方法进一步包括:移位传送到所述阵列结构的所述数据元素以将公共结构的元素对准到公共组的控制器。
在一方面,设备包含:具有若干组的第一存储器装置,用于按结构阵列格式存储数据元素;具有若干组的第二存储器装置,用于按阵列结构格式存储数据元素;以及控制器装置,用于将所述数据元素从所述第一存储器装置传送到所述第二存储器装置,包含所述控制器装置配置成执行如下操作:计算所述第一存储器装置中的组的数量与所述结构阵列中的结构的结构大小之间的最高公因子,其中所述最高公因子不同于所述结构的结构大小;将分区大小值设置成计算的最高公因子;计算等于所述组的数量除以所述分区大小的移位值;在一个操作循环中从等于所述移位值的若干结构中读取等于所述分区大小的若干元素;在所述一个操作循环中将读取的所述元素传送到所述第二存储器装置中的所述阵列结构;以及在随后操作循环中继续所述读取和传送,直到所述结构阵列的所有元素都被传送到所述阵列结构。
在一个实施例中,第一存储器装置和所述第二存储器装置是单个共享存储器装置的不同部分。在一个实施例中,所述控制器要将读取的所述元素传送到阵列结构包含计算等于所述组的数量的基数的取模运算以确定所述阵列结构中的位置,其中传送所述元素到所述阵列结构中的所述位置。在一个实施例中,控制器要将读取的所述元素传送到阵列结构包含运行单指令多数据(SIMD)操作以传送读取的所述元素。在一个实施例中,控制器要将读取的所述元素传送到所述阵列结构包含将读取的元素从与主机处理器关联的结构阵列传送到与图形处理器关联的阵列结构。在一个实施例中,进一步包括控制器移位传送到所述阵列结构的所述数据元素以将公共结构的元素对准到公共组。
在一个方面,电子装置包含:主机处理器装置;耦合到所述主机处理器装置的电路,所述电路包含:具有若干组的第一存储器装置,用于按结构阵列格式存储数据元素;具有若干组的第二存储器装置,用于按阵列结构格式存储数据元素;以及控制器装置,用于将所述数据元素从所述第一存储器装置传送到所述第二存储器装置,包含所述控制器装置配置成执行如下操作:计算所述第一存储器装置中的组的数量与所述结构阵列中结构的结构大小之间的最高公因子,其中所述最高公因子不同于所述结构的结构大小;将分区大小值设置成计算的最高公因子;计算等于所述组的数量除以所述分区大小的移位值;在一个操作循环中从等于所述移位值的若干结构中读取等于所述分区大小的若干元素;在所述一个操作循环中将读取的所述元素传送到所述第二存储器装置中的所述阵列结构;以及在随后操作循环中继续所述读取和传送,直到所述结构阵列的所有元素都被传送到所述阵列结构;以及数字显示器接口,用于耦合到显示器装置以显示由所述主机处理器计算的数据。
在一个实施例中,第一存储器装置和第二存储器装置是单个共享存储器装置的不同部分。在一个实施例中,所述控制器将读取的所述元素传送到阵列结构包含计算等于所述组的数量的基数的取模运算以确定所述阵列结构中的位置,其中传送所述元素到所述阵列结构中的所述位置。在一个实施例中,控制器要将读取的所述元素传送到阵列结构包含运行单指令多数据(SIMD)操作以传送读取的所述元素。在一个实施例中,控制器要将读取的所述元素传送到所述阵列结构包含将读取的元素从与主机处理器关联的结构阵列传送到与图形处理器关联的阵列结构。在一个实施例中,进一步包括控制器以移位传送到阵列结构的数据元素以将公共结构的元素对准到公共组。
在一方面,一种制品包括计算机可读存储介质,其上存储有内容,内容当被运行时执行操作,包含:计算第一存储器装置中的组的数量与结构阵列中的结构的结构大小之间的最高公因子,其中所述最高公因子不同于所述结构的结构大小;将分区大小值设置成计算的最高公因子;计算等于所述组的数量除以所述分区大小的移位值;在一个操作循环中从等于所述移位值的若干结构中读取等于所述分区大小的若干元素;在所述一个操作循环中将读取的元素传送到具有与所述第一存储器装置相等的组的数量的第二存储器装置中的阵列结构;以及在随后操作循环中继续所述读取和传送,直到所述结构阵列的所有元素都被传送到所述阵列结构。
在一个实施例中,第一存储器装置和第二存储器装置是单个共享存储器装置的不同部分。在一个实施例中,用于将读取的元素传送到阵列结构的内容进一步包括用于计算等于所述组的数量的基数的取模运算以确定所述阵列结构中的位置(其中传送所述元素到所述阵列结构中的所述位置)的内容。在一个实施例中,用于将读取的元素传送到阵列结构的内容进一步包括用于运行单指令多数据(SIMD)操作以传送读取的所述元素的内容。在一个实施例中,用于将读取的元素传送到所述阵列结构的内容包括用于将读取的元素从与主机处理器关联的结构阵列传送到与图形处理器关联的阵列结构的内容。在一个实施例中,进一步包括用于移位传送到所述阵列结构的所述数据元素以将公共结构的元素对准到公共组的内容。
在一方面,设备可包含:用于第一存储器装置中的组的数量与计算结构阵列中的结构的结构大小之间的最高公因子的部件,其中所述最高公因子不同于所述结构的结构大小;用于将分区大小值设置成计算的最高公因子的部件;用于计算等于所述组的数量除以所述分区大小的移位值的部件;用于在一个操作循环中从等于所述移位值的若干结构中读取等于所述分区大小的若干元素的部件;用于在一个操作循环中将读取的元素传送到具有与所述第一存储器装置相等的组的数量的第二存储器装置中的阵列结构的部件;以及用于在随后操作循环中继续所述读取和传送,直到所述结构阵列的所有元素都被传送到所述阵列结构的部件。
在一个实施例中,第一存储器装置和所述第二存储器装置是单个共享存储器装置的不同部分。在一个实施例中,用于将读取的元素传送到阵列结构的部件进一步包括用于计算等于所述组的数量的基数的取模运算以确定所述阵列结构中的位置(其中传送所述元素到所述阵列结构中的所述位置)的部件。在一个实施例中,用于将读取的元素传送到阵列结构的部件进一步包括用于运行单指令多数据(SIMD)操作以传送读取的所述元素的部件。在一个实施例中,用于将读取的元素传送到所述阵列结构的部件包括用于将读取的元素从与主机处理器关联的结构阵列传送到与图形处理器关联的阵列结构的部件。在一个实施例中,进一步包括用于移位传送到所述阵列结构的所述数据元素以将公共结构的元素对准到公共组的部件。
本文所图示的流程图提供了各种过程动作顺序的示例。流程图可指示要由软件或固件例程运行的操作以及物理操作。在一个实施例中,流程图可图示有限状态机(FSM)的状态,其可用硬件和/或软件实现。尽管按具体顺序或次序示出了,但是除非另外规定,否则可以修改动作的次序。从而,所图示的实施例应该仅作为示例理解,并且过程可按不同次序执行,并且一些动作可并行执行。此外,在各种实施例中可省略一个或多个动作;从而,并不是在每个实施例中都需要所有动作。其它过程流程是可能的。
在本文描述各种操作或功能的意义上,它们可描述或者定义为软件代码、指令、配置和/或数据。内容可以是直接可运行的(“对象”或“可运行”形式)源代码或差分代码(“Δ”或“补丁”代码)。本文描述的实施例的软件内容可经由其上存储有内容的制品或经由操作通信接口以经由通信接口发送数据的方法提供。机器可读存储介质可使机器执行所描述的功能或操作,并且包含存储以由机器(例如计算装置、电子系统等)可存取形式的信息的任何机制,诸如可记录/不可记录媒体(例如只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储媒体、光存储媒体、闪存装置等)。通信接口包含与任何硬连线、无线、光学等介质对接以与另一装置(诸如存储器总线接口、处理器总线接口、因特网连接、盘控制器等)通信的任何机制。通信接口可被配置提供提供配置参数和/或发送信号以准备通信接口来提供描述软件内容的数据信号。通信接口可经由发送到通信接口的一个或多个命令或信号存取。
本文描述的各种组件可以是用于执行所描述的操作或功能的部件。本文描述的每个部件都包含软件、硬件或这些的组合。组件可实现为软件模块、硬件模块、专用硬件(例如应用特定硬件、专用集成电路(ASIC)、数字信号处理器(DSP)等)、嵌入式控制器、硬连线电路等。
除了本文所描述的内容,可对所公开的本发明的实施例和实现进行各种修改,而不脱离它们的范围。因此,本文的图示和示例应该被视为说明性的,而非约束性意义。本发明的范围应该仅参考如下权利要求书进行度量。

Claims (19)

1.一种用于存取成组存储器的方法,包括:
计算第一存储器装置中的组的数量与结构阵列中结构的结构大小之间的最高公因子,其中所述最高公因子不同于所述结构的结构大小;
将分区大小值设置成计算的最高公因子;
计算等于所述组的数量除以所述分区大小的移位值;
在一个操作循环中,从等于所述移位值的若干结构中读取等于所述分区大小的若干元素;
在所述一个操作循环中,将读取的所述元素传送到第二存储器装置中的阵列结构,所述第二存储器装置具有与所述第一存储器装置相等的组的数量;以及
在随后操作循环中继续所述读取和传送,直到所述结构阵列的所有元素都被传送到所述阵列结构。
2.如权利要求1所述的方法,其中所述第一存储器装置和所述第二存储器装置是单个共享存储器装置的不同部分。
3.如权利要求1所述的方法,其中将读取的所述元素传送到阵列结构进一步包括:
计算等于所述组的数量的基数的取模运算以确定在所述阵列结构中的位置,其中传送所述元素到所述阵列结构中的所述位置。
4.如权利要求1所述的方法,其中将读取的所述元素传送到阵列结构进一步包括:
运行单指令多数据(SIMD)操作以传送读取的所述元素。
5.如权利要求1所述的方法,其中将读取的所述元素传送到所述阵列结构包括:将读取的元素从与主机处理器关联的结构阵列传送到与图形处理器关联的阵列结构。
6.如权利要求1所述的方法,进一步包括:
将传送到所述阵列结构的数据元素移位以将公共结构的元素对准到公共组。
7.一种用于存取成组存储器的设备,包括:
具有若干组的第一存储器装置,用于按结构阵列格式存储数据元素;
具有若干组的第二存储器装置,用于按阵列结构格式存储数据元素;以及
控制器装置,用于将来自所述第一存储器装置的数据元素传送到所述第二存储器装置,包含所述控制器装置配置成执行如下操作:
计算所述第一存储器装置中的所述组的数量与所述结构阵列中结构的结构大小之间的最高公因子,其中所述最高公因子不同于所述结构的结构大小;
将分区大小值设置成计算的最高公因子;
计算等于所述组的数量除以所述分区大小的移位值;
在一个操作循环中,从等于所述移位值的若干结构中读取等于所述分区大小的若干元素;
在所述一个操作循环中,将读取的所述元素传送到所述第二存储器装置中的所述阵列结构;以及
在随后操作循环中继续所述读取和传送,直到所述结构阵列的所有元素都被传送到所述阵列结构。
8.如权利要求7所述的设备,其中所述第一存储器装置和所述第二存储器装置是单个共享存储器装置的不同部分。
9.如权利要求7所述的设备,其中所述控制器要将读取的所述元素传送到阵列结构包含:计算等于所述组的数量的基数的取模运算以确定所述阵列结构中的位置,其中传送所述元素到所述阵列结构中的所述位置。
10.如权利要求7所述的设备,其中所述控制器要将读取的所述元素传送到阵列结构包含:运行单指令多数据(SIMD)操作以传送读取的所述元素。
11.如权利要求7所述的设备,其中所述控制器要将读取的所述元素传送到所述阵列结构包含:将读取的元素从与主机处理器关联的结构阵列传送到与图形处理器关联的阵列结构。
12.如权利要求7所述的设备,进一步包括所述控制器将传送到所述阵列结构的所述数据元素移位以将公共结构的元素对准到公共组。
13.一种用于存取成组存储器的设备,包括:
用于计算第一存储器装置中的组的数量与结构阵列中结构的结构大小之间的最高公因子的部件,其中所述最高公因子不同于所述结构的结构大小;
用于将分区大小值设置成计算的最高公因子的部件;
用于计算等于所述组的数量除以所述分区大小的移位值的部件;
用于在一个操作循环中从等于所述移位值的若干结构中读取等于所述分区大小的若干元素的部件;
用于在所述一个操作循环中将读取的所述元素传送到第二存储器装置中的阵列结构的部件,所述第二存储器装置具有与所述第一存储器装置相等的组的数量;以及
用于在随后操作循环中继续所述读取和传送直到所述结构阵列的所有元素都被传送到所述阵列结构的部件。
14.如权利要求13所述的设备,其中所述第一存储器装置和所述第二存储器装置是单个共享存储器装置的不同部分。
15.如权利要求13所述的设备,其中用于将读取的所述元素传送到阵列结构的部件进一步包括用于执行如下操作的部件:
计算等于所述组的数量的基数的取模运算以确定在所述阵列结构中的位置,其中传送所述元素到所述阵列结构中的所述位置。
16.如权利要求13所述的设备,其中用于将读取的所述元素传送到阵列结构的部件进一步包括用于执行如下操作的部件:
运行单指令多数据(SIMD)操作以传送读取的所述元素。
17.如权利要求13所述的设备,其中用于将读取的所述元素传送到所述阵列结构的部件包括用于将读取的元素从与主机处理器关联的结构阵列传送到与图形处理器关联的阵列结构的部件。
18.如权利要求13所述的设备,进一步包括用于执行如下操作的部件:
将传送到所述阵列结构的数据元素移位以将公共结构的元素对准到公共组。
19.一种已在其上存储有指令的计算机可读介质,所述指令在被执行时引起处理器执行如权利要求1-6中任一项所述的方法。
CN201580013091.5A 2014-04-09 2015-04-08 由图形处理器改进的成组存储器存取效率 Active CN106062814B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/249154 2014-04-09
US14/249,154 US9632801B2 (en) 2014-04-09 2014-04-09 Banked memory access efficiency by a graphics processor
PCT/US2015/025004 WO2015157468A1 (en) 2014-04-09 2015-04-08 Improved banked memory access efficiency by a graphics processor

Publications (2)

Publication Number Publication Date
CN106062814A CN106062814A (zh) 2016-10-26
CN106062814B true CN106062814B (zh) 2020-06-16

Family

ID=54265481

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580013091.5A Active CN106062814B (zh) 2014-04-09 2015-04-08 由图形处理器改进的成组存储器存取效率

Country Status (5)

Country Link
US (1) US9632801B2 (zh)
EP (1) EP3129953B1 (zh)
KR (1) KR101855379B1 (zh)
CN (1) CN106062814B (zh)
WO (1) WO2015157468A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
KR20210001546A (ko) * 2019-06-28 2021-01-06 에스케이하이닉스 주식회사 슬립모드에서 메모리 시스템의 내부데이터를 전송하는 장치 및 방법
CN113762518A (zh) * 2020-06-02 2021-12-07 中科寒武纪科技股份有限公司 数据处理方法、装置、计算机设备和存储介质
WO2024085960A1 (en) * 2022-10-20 2024-04-25 Microsoft Technology Licensing, Llc Transposing matrices based on a multi-level crossbar

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5479624A (en) * 1992-10-14 1995-12-26 Lee Research, Inc. High-performance interleaved memory system comprising a prime number of memory modules
CN1669279A (zh) * 2002-05-29 2005-09-14 英特尔公司 提高分组应用的存储器存取效率
WO2013187862A1 (en) * 2012-06-11 2013-12-19 Intel Corporation A FAST MECHANISM FOR ACCESSING 2n±1 INTERLEAVED MEMORY SYSTEM

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5379393A (en) * 1992-05-14 1995-01-03 The Board Of Governors For Higher Education, State Of Rhode Island And Providence Plantations Cache memory system for vector processing
DE19827238B4 (de) * 1998-06-18 2004-09-30 Nec Corp. Verfahren zum Betrieb eines Vektorrechners
US6665768B1 (en) * 2000-10-12 2003-12-16 Chipwrights Design, Inc. Table look-up operation for SIMD processors with interleaved memory systems
US6862027B2 (en) 2003-06-30 2005-03-01 Microsoft Corp. System and method for parallel execution of data generation tasks
US7257695B2 (en) 2004-12-28 2007-08-14 Intel Corporation Register file regions for a processing system
US7840001B2 (en) * 2005-11-04 2010-11-23 Arm Limited Data processing apparatus
US8072463B1 (en) * 2006-10-04 2011-12-06 Nvidia Corporation Graphics system with virtual memory pages and non-power of two number of memory elements
US8732437B2 (en) * 2010-01-26 2014-05-20 Oracle America, Inc. Low-overhead misalignment and reformatting support for SIMD
US8751771B2 (en) * 2010-09-29 2014-06-10 Nvidia Corporation Efficient implementation of arrays of structures on SIMT and SIMD architectures
US20130339649A1 (en) * 2012-06-15 2013-12-19 Intel Corporation Single instruction multiple data (simd) reconfigurable vector register file and permutation unit
US9244840B2 (en) * 2012-12-12 2016-01-26 International Business Machines Corporation Cache swizzle with inline transposition
US20140297921A1 (en) * 2013-03-26 2014-10-02 Skymedi Corporation Method of Partitioning Physical Block and Memory System Thereof
US9513908B2 (en) 2013-05-03 2016-12-06 Samsung Electronics Co., Ltd. Streaming memory transpose operations
US20150243259A1 (en) 2014-02-26 2015-08-27 National Tsing Hua University Method and apparatus for transferring data in a computer

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5479624A (en) * 1992-10-14 1995-12-26 Lee Research, Inc. High-performance interleaved memory system comprising a prime number of memory modules
CN1669279A (zh) * 2002-05-29 2005-09-14 英特尔公司 提高分组应用的存储器存取效率
WO2013187862A1 (en) * 2012-06-11 2013-12-19 Intel Corporation A FAST MECHANISM FOR ACCESSING 2n±1 INTERLEAVED MEMORY SYSTEM

Also Published As

Publication number Publication date
WO2015157468A1 (en) 2015-10-15
US9632801B2 (en) 2017-04-25
KR101855379B1 (ko) 2018-05-09
CN106062814A (zh) 2016-10-26
KR20160118337A (ko) 2016-10-11
EP3129953A4 (en) 2017-12-06
US20150294435A1 (en) 2015-10-15
EP3129953A1 (en) 2017-02-15
EP3129953B1 (en) 2020-11-25

Similar Documents

Publication Publication Date Title
CN107077441B (zh) 用于提供使用rdma和主动消息的异构i/o的方法和装置
JP6373487B2 (ja) 方法、プログラム、装置、メモリデバイス、電子デバイス、およびコンピュータ可読記録媒体
US20150012723A1 (en) Processor using mini-cores
JP6078173B2 (ja) アイドル状態の構成要素の電力を落とすことによるディスプレイパイプラインにおける電力節約方法及び機器
CN106415517B (zh) Usb 3.1重定时器存在检测和索引的方法与装置
US8819345B2 (en) Method, apparatus, and computer program product for inter-core communication in multi-core processors
CN106062814B (zh) 由图形处理器改进的成组存储器存取效率
CN109478177A (zh) 双数据率命令总线
US10025732B2 (en) Preserving deterministic early valid across a clock domain crossing
JP6998991B2 (ja) 情報処理用方法及び装置
CN113900974B (zh) 一种存储装置、数据存储方法及相关设备
CN107451070B (zh) 一种数据的处理方法和服务器
US20150242996A1 (en) Image processing apparatus and image processing method
CN116583823A (zh) 使用长向量仲裁的异步管线合并
CN114385237A (zh) 低时延寄存器错误校正
CN116569157A (zh) 通过同步接口的经延迟通信
CN116685943A (zh) 可编程原子单元中的自调度线程
TWI816814B (zh) 在以向量處理器為基礎之裝置中提供處理元件之可重組態融合的裝置、方法以及非暫時性電腦可讀媒體
TW201533658A (zh) 轉移資料的設備及在電腦中轉移資料的方法
US10175903B2 (en) N plane to 2N plane interface in a solid state drive (SSD) architecture
CN113867681B (zh) 数据处理方法及装置、数据处理设备和存储介质
US20150006850A1 (en) Processor with heterogeneous clustered architecture
CN116635824A (zh) 桶式处理器中的线程调度控制及存储器分割
CN114385239A (zh) 桶式处理器中的线程执行控制
CN117992125A (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