CN114816531A - 使用窄加法数据通道实现大位宽加操作数取数加操作的方法 - Google Patents
使用窄加法数据通道实现大位宽加操作数取数加操作的方法 Download PDFInfo
- Publication number
- CN114816531A CN114816531A CN202210404054.9A CN202210404054A CN114816531A CN 114816531 A CN114816531 A CN 114816531A CN 202210404054 A CN202210404054 A CN 202210404054A CN 114816531 A CN114816531 A CN 114816531A
- Authority
- CN
- China
- Prior art keywords
- addition
- addition operation
- areas
- access
- data channel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 18
- 230000004931 aggregating effect Effects 0.000 claims abstract description 4
- 230000002776 aggregation Effects 0.000 claims description 4
- 238000004220 aggregation Methods 0.000 claims description 4
- 238000007792 addition Methods 0.000 description 48
- 230000000903 blocking effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 102220107837 rs2268147 Human genes 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent 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]
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本发明公开了一种使用窄加法数据通道实现大位宽加操作数取数加操作的方法,基于SIMT架构,每个线程使用独立的存储地址和寄存器操作数,硬件对于相同目标地址实现并行取数加操作;具体包括:S1、将加操作数分解为m个能够在窄加法数据通道中传输的部分加数,m个部分加数将加操作数拆分为m个区域;S2、变量指向的存储地址与m个区域进行取数加操作;S3、m个区域的值聚合,获得大位宽加操作数取数加操作的值。本发明提出的解决方案,具有占用较小的片上面积,使用少量的硬件资源,功耗低,同时保证了数据的完整性的优点。
Description
技术领域
本发明涉及数据存储领域,具体是一种使用窄加法数据通道实现大位宽加操作数取数加操作的方法。
背景技术
SIMT并行处理
SMIT是指单指令多线程程序执行方式,在这种方式下,多个线程在不同的数据上执行相同的指令,并允许线程之间有适当的分歧控制。出于性能考虑,SIMT应当尽量减少线程之间的分歧。
原子加法指令
原子加法(atomic add)指令广泛用于计算机并发程序中,是并行计算的一条重要指令。当需要对一个存储地址中的数据执行加法操作时,首先需要从该存储地址中将数据读取出来,加上相应的数值,并将结果写回原来的存储地址。原子加法要求上述的取数、相加、写回操作必须是完整的不可分割的。在并行计算中,由于多个线程可能会同时访问一个相同的存储地址,因此需要原子操作保证数据的完整性。
在SIMT计算模式下,原子加法的操作语义是串行的,即当多个线程在执行完成原子加法操作之后,其结果应当和这些线程按顺序依次执行加法操作的结果相一致。
原子加法指令可以在使用共享变量的程序中实现无等待、无锁定、无阻塞的并行执行。例如,当多个线程需要向某个队列添加数据时,可以使用一个共享变量表示队列的起始地址,每个线程对这个共享变量使用原子加法指令来获取各自的队列起始地址。由于原子加法在执行时无需等待,因此线程在执行时具有高度的并行性,同时保证了数据的完整性。
并行原子加法
原子加法指令有两种实现方式,当采用串行实现方式时,各个线程按顺序依次取数、相加并写回。这种实现方式保证了原子加法的语义正确,但性能较差,不适合大并发数据的情形。原子加法也可以采用并行实现方式,但传统的并行实现需要大量的硬件资源,占用较大的片上面积,且功耗较高。
发明内容
本发明针对背景技术中存在的问题,提出一种新型的并行原子加法实现方法。
技术方案:
一种使用窄加法数据通道实现大位宽加操作数取数加操作的方法,基于SIMT架构,每个线程使用独立的存储地址和寄存器操作数,硬件对于相同目标地址实现并行取数加操作;
使用窄加法数据通道实现大位宽加操作数取数加操作的方法包括以下步骤:
S1、将加操作数分解为m个能够在窄加法数据通道中传输的部分加数,m个部分加数将加操作数拆分为m个区域;
S2、变量指向的存储地址与m个区域进行取数加操作;
S3、m个区域的值聚合,获得大位宽加操作数取数加操作的值。
优选的,S1中,m个区域等分。
优选的,S2中,m个区域从右至左排序,变量指向的存储地址与第i个区域进行取数加操作时,包括以下步骤:
S2-1、将第i个区域右移(i-1)n位;n=加操作数总位宽/m;
S2-2、变量指向的存储地址与i个区域相加。
优选的,S3中,m个区域的值聚合包括以下步骤:
S3-1、将第i个区域的值左移(i-1)n位;
S3-2、各区域的值相加。
本发明的有益效果
本发明针对大位宽加操作数取数加问题,提出了一种使用窄加法数据通道实现的方案,与传统取数加指令的实现方式不同,本发明提出了一种使用窄加法数据通道实现的方案,只需要占用较小的片上面积,使用少量的硬件资源即可实现窄数据通道的取数加指令,功耗低;同时利用软件方式实现值聚合,以达到和传统取数加指令完全一致的效果,保证了数据的完整性。
具体实施方式
下面结合实施例对本发明作进一步说明,但本发明的保护范围不限于此:
AIGPU支持SIMT的并行取数加指令,其中每个线程可以使用独立的存储地址和寄存器操作数。硬件对于相同目标地址实现并行取数加操作。
使用窄加法数据通道实现大位宽加操作数取数加操作的方法包括以下步骤:
S1、将加操作数分解(优选的:等分)为m个能够在窄加法数据通道中传输的部分加数,m个部分加数将加操作数拆分为m个区域;这里将加操作数分解成较小的部分加数,硬件也因此是需要支持很小的数据通道,可以减少硬件资源。一种实现是将加操作数限制为4比特,只需使用寄存器的操作数的最低4位(lsb[3:0])。高位都忽略了。每个线程只能加0-7之间的一个数。加法的数据通道只是4位宽,存储数据是32比特。
S2、变量指向的存储地址与m个区域进行取数加操作;m个区域从右至左排序,变量指向的存储地址与第i个区域进行取数加操作时,包括以下步骤:
S2-1、将第i个区域右移(i-1)n位;n=加操作数总位宽/m;
S2-2、变量指向的存储地址与i个区域相加。
S3、m个区域的值聚合,获得大位宽加操作数取数加操作的值。m个区域的值聚合包括以下步骤:
S3-1、将第i个区域的值左移(i-1)n位;
S3-2、各区域的值相加。
下面的例子中,要实现的32位取数加把R0的值加到Rx指向的存储地址中的值,结果返回到R1寄存器中。
如果所有的线程中R0值都小于16,则只需使用指令fetch_ad_add R1,Rx,R0
否则,假定R0是完整的32比特,执行如下指令:
οFetch_and_add R2,Rx,R0;//atomic fetch and add R0[3:0]使用R0的低4位
οShift_right R0,R0,4;//将R0右移4位,使用原有R0[7:4]
οAdd Rx,N;//使用新地址
οFetch_and_add R3,Rx,R0;//使用原有R0[7:4]
οShift_right R0,R0,4;//将R0右移4位,使用原有R0[11:8]
οAdd Rx,N;//使用新地址
οFetch_and_add R4,Rx,R0;//使用原有R0[11:8]
οShift_right R0,R0,4;//将R0右移4位,使用原有R0[15:12]
οAdd Rx,N;//使用新地址
οFetch_and_add R5,Rx,R0;//使用原有R0[15:12]
οShift_right R0,R0,4;//将R0右移4位,使用原有R0[19:16]
οAdd Rx,N;//使用新地址
οFetch_and_add R6,Rx,R0;//使用原有R0[19:16]
οShift_right R0,R0,4;//将R0右移4位,使用原有R0[23:20]
οAdd Rx,N;//使用新地址
οFetch_and_add R7,Rx,R0;//使用原有R0[23:20]
οShift_right R0,R0,4;//将R0右移4位,使用原有R0[使用原有R0[27:24]]
οAdd Rx,N;//使用新地址
οFetch_and_add R8,Rx,R0;//使用原有R0[27:24]
οShift_right R0,R0,4;//将R0右移4位,使用原有R0[31:28]
οAdd Rx,N;//使用新地址
οFetch_and_add R9,Rx,R0;//使用原有R0[31:28]
οShift_left R3,R3,4//左移4位
οShift_left R4,R4,8//左移再4位
οShift_left R5,R5,12//左移再4位
οShift_left R6,R6,16//左移再4位
οShift_left R6,R7,20//左移再4位
οShift_left R6,R8,24//左移再4位
οShift_left R6,R9,28//左移再4位
οAdd R2,R3,…R9=>R1//聚合所有值
上面的一系列指令将32位的和返回到R1寄存器中。目标地址分成8个区域,每个区域按顺序左移4位。对于多数应用而言,没有必要将这8个区的值聚合成一个。如果需要32位值,可以重复执行上述中的{右移、新地址生成、取数加}序列8次,然后执行左移7次,最终将8个区域的值聚合成一个。最终结果返回到原来的R0寄存器中。
在许多应用中,存储区域很小且包装紧凑。例如,一个应用中每个线程需要生成不定大小的结果数据并添加到一个单一的队列后面。所有的线程使用一个存储目标地址,取数加指令会为每个线程返回添加数据的起始地址。因为线程的数据量不同,产生的起始地址也不同。
取数加指令的结果必须是确定性的,即对于那些使用相同存储地址的线程,逻辑上与这些线程按顺序执行取数加操作的结果一致,在SIMIT中这一执行顺序与线程编号的顺序一致。例如,线程0、8、9、12的线程目标地址都是&x,其结果应该与按照执行顺序0、8、9、12按序执行取数加得到的一致。这里只关心执行结果,而不限制实际的并行实现顺序。这个例子的执行结果如下:
·Y0=x
·Y8=x+r0
·Y9=x+r0+r8
·Y12=x+r0+r8+r9
·New x=x+r0+r8+r9+r12
本文中所描述的具体实施例仅仅是对本发明精神做举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
Claims (4)
1.一种使用窄加法数据通道实现大位宽加操作数取数加操作的方法,其特征在于基于SIMT架构,每个线程使用独立的存储地址和寄存器操作数,硬件对于相同目标地址实现并行取数加操作;
使用窄加法数据通道实现大位宽加操作数取数加操作的方法包括以下步骤:
S1、将加操作数分解为m个能够在窄加法数据通道中传输的部分加数,m个部分加数将加操作数拆分为m个区域;
S2、变量指向的存储地址与m个区域进行取数加操作;
S3、m个区域的值聚合,获得大位宽加操作数取数加操作的值。
2.根据权利要求1所述的方法,其特征在于S1中,m个区域等分。
3.根据权利要求2所述的方法,其特征在于S2中,m个区域从右至左排序,变量指向的存储地址与第i个区域进行取数加操作时,包括以下步骤:
S2-1、将第i个区域右移(i-1)n位;n=加操作数总位宽/m;
S2-2、变量指向的存储地址与i个区域相加。
4.根据权利要求3所述的方法,其特征在于S3中,m个区域的值聚合包括以下步骤:
S3-1、将第i个区域的值左移(i-1)n位;
S3-2、各区域的值相加。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210404054.9A CN114816531B (zh) | 2022-04-18 | 2022-04-18 | 使用窄加法数据通道实现大位宽加操作数取数加操作的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210404054.9A CN114816531B (zh) | 2022-04-18 | 2022-04-18 | 使用窄加法数据通道实现大位宽加操作数取数加操作的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114816531A true CN114816531A (zh) | 2022-07-29 |
CN114816531B CN114816531B (zh) | 2023-05-02 |
Family
ID=82537299
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210404054.9A Active CN114816531B (zh) | 2022-04-18 | 2022-04-18 | 使用窄加法数据通道实现大位宽加操作数取数加操作的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114816531B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030123748A1 (en) * | 2001-10-29 | 2003-07-03 | Intel Corporation | Fast full search motion estimation with SIMD merge instruction |
CN1696894A (zh) * | 2004-05-10 | 2005-11-16 | 华为技术有限公司 | 大数模乘计算乘法器 |
CN105988771A (zh) * | 2015-03-04 | 2016-10-05 | 上海复旦微电子集团股份有限公司 | 模逆运算器 |
US20170315805A1 (en) * | 2014-12-19 | 2017-11-02 | Arm Limited | Atomic add with carry instruction |
CN109388427A (zh) * | 2017-08-11 | 2019-02-26 | 龙芯中科技术有限公司 | 向量处理方法、向量处理单元和微处理器 |
CN111258644A (zh) * | 2018-11-30 | 2020-06-09 | 上海寒武纪信息科技有限公司 | 数据处理方法、处理器、数据处理装置及存储介质 |
CN113590195A (zh) * | 2021-07-22 | 2021-11-02 | 中国人民解放军国防科技大学 | 支持浮点格式乘加的存算一体化dram计算部件设计 |
CN114237550A (zh) * | 2021-11-10 | 2022-03-25 | 电子科技大学 | 一种基于Wallace树的多输入移位求和累加器 |
-
2022
- 2022-04-18 CN CN202210404054.9A patent/CN114816531B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030123748A1 (en) * | 2001-10-29 | 2003-07-03 | Intel Corporation | Fast full search motion estimation with SIMD merge instruction |
CN1696894A (zh) * | 2004-05-10 | 2005-11-16 | 华为技术有限公司 | 大数模乘计算乘法器 |
US20170315805A1 (en) * | 2014-12-19 | 2017-11-02 | Arm Limited | Atomic add with carry instruction |
CN105988771A (zh) * | 2015-03-04 | 2016-10-05 | 上海复旦微电子集团股份有限公司 | 模逆运算器 |
CN109388427A (zh) * | 2017-08-11 | 2019-02-26 | 龙芯中科技术有限公司 | 向量处理方法、向量处理单元和微处理器 |
CN111258644A (zh) * | 2018-11-30 | 2020-06-09 | 上海寒武纪信息科技有限公司 | 数据处理方法、处理器、数据处理装置及存储介质 |
CN113590195A (zh) * | 2021-07-22 | 2021-11-02 | 中国人民解放军国防科技大学 | 支持浮点格式乘加的存算一体化dram计算部件设计 |
CN114237550A (zh) * | 2021-11-10 | 2022-03-25 | 电子科技大学 | 一种基于Wallace树的多输入移位求和累加器 |
Non-Patent Citations (2)
Title |
---|
JAEYONG CHUNG 等: ""Bit-Width Optimization by Divide-and-Conquer for Fixed-Point Digital Signal Processing Systems"", 《IEEE TRANSACTIONS ON COMPUTERS》 * |
李东晓: "一种支持SIMD指令的流水化可拆分乘加器结构", 《计算机工程》 * |
Also Published As
Publication number | Publication date |
---|---|
CN114816531B (zh) | 2023-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Eggers et al. | Simultaneous multithreading: A platform for next-generation processors | |
KR101120398B1 (ko) | 스레드 최적화된 멀티프로세서 구조 | |
US9830156B2 (en) | Temporal SIMT execution optimization through elimination of redundant operations | |
US8145885B2 (en) | Apparatus for randomizing instruction thread interleaving in a multi-thread processor | |
Xiang et al. | Exploiting uniform vector instructions for GPGPU performance, energy efficiency, and opportunistic reliability enhancement | |
Atoofian | Reducing shift penalty in domain wall memory through register locality | |
Park et al. | Libra: Tailoring simd execution using heterogeneous hardware and dynamic configurability | |
Kalathingal et al. | Dynamic inter-thread vectorization architecture: extracting DLP from TLP | |
Cui et al. | Auto-tuning dense matrix multiplication for GPGPU with cache | |
US11853754B2 (en) | Mask operation method for explicit independent mask register in GPU | |
US7383420B2 (en) | Processor and method of indirect register read and write operations | |
Jeon et al. | Hi-End: Hierarchical, endurance-aware STT-MRAM-based register file for energy-efficient GPUs | |
Bakunas-Milanowski et al. | Efficient algorithms for stream compaction on GPUs | |
Abdelfattah et al. | Optimizing memory-bound SYMV kernel on GPU hardware accelerators | |
CN114816531B (zh) | 使用窄加法数据通道实现大位宽加操作数取数加操作的方法 | |
WO2022161013A1 (zh) | 处理器装置及其指令执行方法、计算设备 | |
CN114510271B (zh) | 用于在单指令多线程计算系统中加载数据的方法和装置 | |
WO2022199131A1 (zh) | 处理器装置及其指令执行方法 | |
Jeong et al. | TEA-RC: Thread Context-Aware Register Cache for GPUs | |
US11977782B2 (en) | Approach for enabling concurrent execution of host memory commands and near-memory processing commands | |
Lashgar et al. | A case study in reverse engineering gpgpus: Outstanding memory handling resources | |
US20240004653A1 (en) | Approach for managing near-memory processing commands from multiple processor threads to prevent interference at near-memory processing elements | |
US20230359558A1 (en) | Approach for skipping near-memory processing commands | |
Jeong et al. | Conflict-aware compiler for hierarchical register file on GPUs | |
Wang et al. | NTTFusion: Efficient Number Theoretic Transform Acceleration on GPUs |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |