CN114942748A - 一种异构编程模型并行方法 - Google Patents

一种异构编程模型并行方法 Download PDF

Info

Publication number
CN114942748A
CN114942748A CN202111157427.9A CN202111157427A CN114942748A CN 114942748 A CN114942748 A CN 114942748A CN 202111157427 A CN202111157427 A CN 202111157427A CN 114942748 A CN114942748 A CN 114942748A
Authority
CN
China
Prior art keywords
function
core
attribute
slave
variable
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
CN202111157427.9A
Other languages
English (en)
Inventor
刘旭
王洪磊
余洪坤
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.)
Taichu Wuxi Electronic Technology Co ltd
Original Assignee
Taichu Wuxi Electronic Technology Co ltd
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 Taichu Wuxi Electronic Technology Co ltd filed Critical Taichu Wuxi Electronic Technology Co ltd
Priority to CN202111157427.9A priority Critical patent/CN114942748A/zh
Publication of CN114942748A publication Critical patent/CN114942748A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/161Computing infrastructure, e.g. computer clusters, blade chassis or hardware partitioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • 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

Abstract

本发明所述的一种异构编程模型并行方法,适用于SWAI芯片,其中,该方法涉及主机端属性函数、设备端属性函数、核函数,主机端属性函数修饰变量时,该变量在CPU Memory里;主机端属性函数修饰函数时,该函数是CPU执行的函数;设备端属性函数修饰变量时,该变量在SWAI Memory里;设备端属性函数修饰函数时,该函数是CPU执行的函数;核函数是通用属性函数,在设备端执行,从主机端调用,返回类型是void,核函数的参数是不可变参数,包括:该程序需要用到的核组数量,该程序用到的从核数量。是基于CPU和SWAI芯片的异构编程模型,使用户可方便的使用SWAI芯片对AI应用进行加速。

Description

一种异构编程模型并行方法
技术领域
本发明涉及一种异构系统的编程模型,特别涉及一种异构编程模型并行方法。
背景技术
异构系统是由功能和性能相异的处理器,基于一定的互连结构连接起来构成的计算系统,通常是由通用微处理器和专用加速处理器构成,比较典型的异构系统有CPU(通用处理器)加GPU(指图形处理器)。
异构系统的编译系统和编译流程与同构系统(例如:CPU服务器集群)有很大差异,由于异构系统中不同的处理器具有不同的性能优化模型,很难以通用策略利用各个处理器,典型的异构编译系统包括NVDIA CUDA、AMD HIP、OpenCL、OpenAcc等。其中,CUDA是专门针对NVDIA GPU推出的计算平台,用户通过编写CUDA代码并使用CUDA编译系统进行编译。
CUDA计算平台支持混合编译,其编译流程更为复杂,CUDA编译器中,先利用NVCC编译器将异构混合编程代码.cu文件,预处理拆分成CPU端即主机端的预处理生成文件Host.ii以及GPU端即设备端的预处理生成文件Device.ii。Device.ii再经过GPU编译器最终生成了Device.fatbin文件(全称是Fat Binary文件),fatbin文件里面包含了GPU的二进制代码。同时,cudafe++编译器将fatbin文件与Host.ii结合到一起生成二进制文件.o。如果用户代码是多个.cu文件,那么会多次重复上述过程,生成多个.o文件,最终,将多个.o文件链接生成为a.out文件。
为了隐藏底层细节,使得用户能够在异构系统上编程,CUDA异构编程是一种使用NVIDIA GPU的编程方式,其中CUDA的runtime接口使用最为广泛,如图1所示。
从图2所示的GPU示意图上来看,一块标准的GPU主要包括通用计算单元、控制器和寄存器,GPU具有高并行结构(highly parallel structure)、拥有更多的ALU(ArithmeticLogic Unit,逻辑运算单元)用于数据处理,这样的结构适合对密集型数据进行并行处理所以GPU在处理图形数据和复杂算法方面拥有比CPU更高的效率。
在GPU快速发展的基础上构建的上述现有异构编程模型给用户提供了更好的编程体验,使得用户可以通过模型提供的接口,使用异构系统,并发挥充分发挥系统的性能。
然而,SWAI芯片是用于AI计算领域的专用芯片,其主要的使用模式是CPU通过PCIE与SWAI芯片进行通信,CPU将不同的任务分发到SWAI芯片的各个运算核组上或运算核心上,采用现有异构编程模型无法挥充分发挥系统的性能,因而,亟待改进和完善。
发明内容
本发明所述的一种异构编程模型并行方法,是基于CPU和SWAI芯片的异构编程模型(简称SDAA编程模型)向用户提供的接口,使得用户不需要关注底层硬件之间的通信与相互协同的过程,可方便的使用SWAI芯片对AI应用进行加速。
本发明所述的一种异构编程模型并行方法,适用于SWAI芯片,SWAI芯片是AI领域的专用芯片,包括一个主核及4个核组,其中,主核负责调度,4个核组的每个核组包括32个从核,每个从核都有一个脉动阵列运算单元;其中,
该方法涉及主机端属性函数、设备端属性函数、核函数,
主机端属性函数修饰变量时,该变量在CPU Memory里;主机端属性函数修饰函数时,该函数是CPU执行的函数;
设备端属性函数修饰变量时,该变量在SWAI Memory里;设备端属性函数修饰函数时,该函数是CPU执行的函数;
核函数是通用属性函数,在设备端执行,从主机端调用,返回类型是void,核函数的参数是不可变参数,包括:该程序需要用到的核组数量,该程序用到的从核数量。
于一实施例中,设备端属性函数和/或核函数的可调用参数包括:从核局部快速存储的变量、单个核组内各从核共享空间存储的变量、每个从核私有的内存空间存储的变量,提供上述多种类参数,是为了适应SWAI芯片特有的内存结构,充分发挥系统的性能。
于一实施例中,该方法还包括核组拆分:当核函数调用的核组数量为n,从核数量为m,设备端的可调用核组数量为k,当2n<=k时,核函数调用的核组数被拆分为2n个核组,每个核组的从核数量为m/2个。该种拆分方式,可以减少或避免资源导致排队阻塞情况时常发生。
于一实施例中,SDAA编程模型采用类似CUDA编程的C++扩展语法,使得CUDA程序员可以很快地上手编写本编程模型的的代码。
本发明的有益效果包括:SDAA异构编程模型解决了以下问题:
1)使得用户可以充分利用SWAI芯片4个核组的128个从核;
2)减少了用户的编程成本,简化编程的流程。
3)对SWAI芯片使用的一套类似CUDA的编程语法,包括但不限于主机端、设备端及通用的属性修饰,使得CUDA程序员可以很快地上手编写本编程模型的的代码。
附图说明
图1为CUDA异构编程模型示意图
图2为GPU及CPU的结构示意图
图3为SWAI芯片的结构示意图
图4为SDAA异构编程模型示意图
图5为SWAI芯片变量类型示意图
具体实施方式
为了进一步清楚描述本发明,现结合附图及实施例进一步说明。
实施例1
如图3、图4所示,本发明所述的一种异构编程模型并行方法,适用于SWAI芯片,SWAI芯片是AI领域的专用芯片,包括一个主核及4个核组,其中,主核负责调度,4个核组的每个核组包括32个从核(一共128个从核,如图3所示),每个从核都有一个脉动阵列运算单元,如图4所示。
为了使CUDA程序员可以很快地上手使用本接口,SDAA编程模型提供了一套类似CUDA编程的C++扩展语法,采用了如下的技术方案:
1)采用提供了__host__、__device__的属性。
比方说对于函数有如下的定义方式:
__host__void foo(){}
__device__void foo(){}
__host__属性修饰的如果是变量,那是指该变量在CPU Memory里。如果__host__修饰的是函数,那是指该函数是CPU执行的函数。
__device__属性修饰的如果是变量,那是指该变量在SWAI Memory里。如果__device__修饰的是函数,那是指该函数是CPU执行的函数。
2)同时,SDAA编程模型支持__global__属性函数定义,这个函数在device上执行,从host中调用,返回类型必须是void,不支持可变参数。通常称之为kernel函数。
_global_定义的kernel函数是异步的,CPU不会等待kernel函数执行完,就会执行下一步。
下面给出一个简单示例:
Figure BDA0003289163370000041
Figure BDA0003289163370000051
这里slave_test<<<int coreGroupNumber,int slaveCoreNumer>>>是对标准C++语言的一个扩展。<<<>>>中第一项coreGroupNumber是该程序需要用到1个核组,第二项slaveCoreNumer是该程序用到8个从核。
如果slave_test<<<int coreGroupNumber,int slaveCoreNumer>>>核函数需要用到3个核组的计算资源,而目前SWAI芯片当前时间节点上可用的资源只有2个核组的计算资源。在多用户同时使用同一张加速卡时,这种情况会发生。目前资源不够用,用户程序会阻塞,等待有足够的计算资源时,用户程序才会继续运行。因此,由于这种阻塞等待经常发生,通常建议用户在核函数slave_test中使用一个核组的计算资源。比方说一个用户在核组1上运行slave_test1核函数,在核组2上运行slave_test2核函数。另一个用户的slave_test3核函数如果使用了三个核组的计算资源,那么可能造成两个用户相互等待。
核函数运行在哪几个核组上,是SWAI芯片上的操作系统在程序运行时进行自动调度的,核函数运行的核组号是随机的。
若用户在程序中只在使用部分核组的计算资源,其他核组是空闲状态。这种情况下其他用户是可以使用空闲核组的计算资源。
本编程模型的设计也充分考虑了多用户同时使用SWAI芯片的情景。
于一实施例中,该方法还包括核组拆分:当核函数调用的核组数量为n,从核数量为m,设备端的可调用核组数量为k,当2n<=k时,核函数调用的核组数被拆分为2n个核组,每个核组的从核数量为m/2个。该种拆分方式,可以减少或避免资源导致排队阻塞情况时常发生。
多用户下,各个用户可能没有资源导致排队阻塞情况时常发生,本专利在编译器中使用代码自动拆分。
当前用户调用用了SWAI芯片的1(n)个核组32(m)个从核,而当前剩余的资源是2(k)个核组,其中每个核组只有16个从核可以使用,在编译器中使用代码自动拆分后,对1(n)个核组32(m)从核的调用被拆分为2个核组,其中每个核组使用16个从核。
用户可以根据自己的需要选择是否打开这种拆分模式。如果资源有很多空闲,那么这种代码拆分模式就没有必要,该拆分会增加编译时间。如果资源紧张,那么这种根据现有资源,自动拆分用户代码,而不改变用户代码运行结果的编译器行为能有效的减少用户程序阻塞等待,可以更加充分的利用SWAI芯片的资源。
如图5所示是SWAI芯片特有的内存结构,为了适应SWAI芯片特有的内存结构,充分发挥系统的性能,设备端属性函数和/或核函数的可调用参数包括:从核局部快速存储的变量、单个核组内各从核共享空间存储的变量、每个从核私有的内存空间存储的变量,具体为:
__local__是指每个从核局部快速存储的变量。
__shared__是指单个核组内、32个从核共享的局部快速存储的变量。
__thread_private是指每个从核私有的内存空间,对应图中的SWAI Memory存储的变量。
__device__是指各个核组和各个从核共享的内存空间,对应图中的SWAI Memory存储的变量。
四种类型修饰符支持所有的数据类型比方说int、float、double、long等,同时也支持数组和结构体这样的数据结构。
如下为调用上述各存储变量的示例:
Figure BDA0003289163370000061
Figure BDA0003289163370000071
实施例2
本发明所述的一种异构编程模型并行方法,适用于SWAI芯片,SWAI芯片是AI领域的专用芯片,芯片结构与上述实施例1一致,如图3、图4所示。
为了使CUDA程序员可以很快地上手使用本接口,SDAA编程模型提供了一套类似CUDA编程的C++扩展语法,采用了如下的技术方案:
1)采用提供了__host__、__device__的属性。
比方说对于函数有如下的定义方式:
__host__void foo(){}
__device__void foo(){}
__host__属性修饰的如果是变量,那是指该变量在CPU Memory里。如果__host__修饰的是函数,那是指该函数是CPU执行的函数。
__device__属性修饰的如果是变量,那是指该变量在SWAI Memory里。如果__device__修饰的是函数,那是指该函数是CPU执行的函数。
2)同时,SDAA编程模型支持__global__属性函数定义,这个函数在device上执行,从host中调用,返回类型必须是void,不支持可变参数。通常称之为kernel函数。
_global_定义的kernel函数是异步的,CPU不会等待kernel函数执行完,就会执行下一步。
下面给出一个简单示例:
Figure BDA0003289163370000081
kernel函数提供简化的使用方式,在slave_test<<<int coreGroupNumber>>>中只使用核组数量这一项,代表默认使用这些核组的所有从核,上述示例中的<<<1>>>指使用了32个从核,如果修改为<<<4>>>指使用了全部128个从核。

Claims (4)

1.一种异构编程模型并行方法,适用于SWAI芯片,其特征在于,SWAI芯片是AI领域的专用芯片,包括一个主核及4个核组,其中,主核负责调度,4个核组的每个核组包括32个从核,每个从核都有一个脉动阵列运算单元;
该方法涉及主机端属性函数、设备端属性函数、核函数,
主机端属性函数修饰变量时,该变量在CPU Memory里;主机端属性函数修饰函数时,该函数是CPU执行的函数;
设备端属性函数修饰变量时,该变量在SWAI Memory里;设备端属性函数修饰函数时,该函数是CPU执行的函数;
核函数是通用属性函数,在设备端执行,从主机端调用,返回类型是void,核函数的参数是不可变参数,包括:该程序需要用到的核组数量,该程序用到的从核数量。
2.如权利要求1所述的异构编程模型并行方法,其特征在于,所述设备端属性函数和/或核函数的可调用参数包括:从核局部快速存储的变量、单个核组内各从核共享空间存储的变量、每个从核私有的内存空间存储的变量。
3.如权利要求1所述的异构编程模型并行方法,其特征在于,还包括核组拆分:当核函数调用的核组数量为n,从核数量为m,设备端的可调用核组数量为k,当2n<=k时,核函数调用的核组数被拆分为2n个核组,每个核组的从核数量为m/2个。
4.如权利要求1所述的异构编程模型并行方法,其特征在于,SDAA编程模型采用类似CUDA编程的C++扩展语法,使得CUDA程序员可以很快地上手编写本编程模型的的代码。
CN202111157427.9A 2021-09-30 2021-09-30 一种异构编程模型并行方法 Pending CN114942748A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111157427.9A CN114942748A (zh) 2021-09-30 2021-09-30 一种异构编程模型并行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111157427.9A CN114942748A (zh) 2021-09-30 2021-09-30 一种异构编程模型并行方法

Publications (1)

Publication Number Publication Date
CN114942748A true CN114942748A (zh) 2022-08-26

Family

ID=82906115

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111157427.9A Pending CN114942748A (zh) 2021-09-30 2021-09-30 一种异构编程模型并行方法

Country Status (1)

Country Link
CN (1) CN114942748A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116360798A (zh) * 2023-06-02 2023-06-30 太初(无锡)电子科技有限公司 一种针对异构芯片的异构可执行文件的反汇编方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170262567A1 (en) * 2013-11-15 2017-09-14 Scientific Concepts International Corporation Code partitioning for the array of devices
CN112631662A (zh) * 2019-09-24 2021-04-09 无锡江南计算技术研究所 众核异构架构下的多类型目标代码的透明加载方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170262567A1 (en) * 2013-11-15 2017-09-14 Scientific Concepts International Corporation Code partitioning for the array of devices
CN112631662A (zh) * 2019-09-24 2021-04-09 无锡江南计算技术研究所 众核异构架构下的多类型目标代码的透明加载方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
ALBERTLIDESIGN: "CUDA笔记(一)-简书", pages 1 - 11, Retrieved from the Internet <URL:https://www.jianshu.com/p/0fdc9f3b1a51> *
PUTDOOR: "ResourceExhaustedError(多方面解决GPU显存不足)", pages 1 - 3, Retrieved from the Internet <URL:https://blog.csdn.net/weixin_43320501/article/details/98878857> *
田子宸: "CUDA一些小知识整理 - 知乎", pages 1 - 29, Retrieved from the Internet <URL:https://zhuanlan.zhihu.com/p/69132476/> *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116360798A (zh) * 2023-06-02 2023-06-30 太初(无锡)电子科技有限公司 一种针对异构芯片的异构可执行文件的反汇编方法
CN116360798B (zh) * 2023-06-02 2023-08-18 太初(无锡)电子科技有限公司 一种针对异构芯片的异构可执行文件的反汇编方法

Similar Documents

Publication Publication Date Title
Aldinucci et al. Fastflow: High‐Level and Efficient Streaming on Multicore
US8949807B2 (en) Saving and loading graphical processing unit (GPU) arrays providing high computational capabilities in a computing environment
CN106663075B (zh) 执行基于图的程序规范
US8935682B2 (en) Graphical processing unit (GPU) arrays providing high computational capabilities in a computing environment
KR102375350B1 (ko) 그래프 기반 프로그램 명세의 컴파일링
KR102364553B1 (ko) 태스크의 호출 관리
KR102600852B1 (ko) 이종 cpu/gpu 시스템에서 데이터 흐름 신호 처리 애플리케이션 가속화
Grasso et al. LibWater: heterogeneous distributed computing made easy
EP2950211A1 (en) Parallelism extraction method and method for making program
US20130081066A1 (en) Application programming interfaces for data parallel computing on multiple processors
Strengert et al. CUDASA: Compute Unified Device and Systems Architecture.
CN106605209B (zh) 控制数据处理任务
CN111090464B (zh) 一种数据流处理方法及相关设备
Robson et al. Runtime coordinated heterogeneous tasks in Charm++
Harding et al. Distributed genetic programming on GPUs using CUDA
CN107943592B (zh) 一种面向gpu集群环境的避免gpu资源争用的方法
Baalbergen Design and implementation of parallel make
CN114942748A (zh) 一种异构编程模型并行方法
CN102004662A (zh) 嵌入式可裁剪式虚拟机
KR20110100070A (ko) 재구성 가능한 프로세서 코어를 사용하는 멀티코어 시스템의 시뮬레이터 및 시뮬레이션 방법
Michell et al. Tasklettes–a fine grained parallelism for Ada on multicores
Paudel et al. Using the cowichan problems to investigate the programmability of x10 programming system
Wesolowski An application programming interface for general purpose graphics processing units in an asynchronous runtime system
Aldinucci et al. FastFlow: high-level and efficient streaming on multi-core.(A FastFlow short tutorial)
Roh et al. Generation and quantitative evaluation of dataflow clusters

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
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 214000 Floor 19 and Floor 20, No. 581 Jianzhu West Road, Wuxi City, Jiangsu Province

Applicant after: Taichu (Wuxi) Electronic Technology Co.,Ltd.

Address before: 214000, floor 7, yanchuang building, No. 1, YinBai Road, Binhu District, Wuxi City, Jiangsu Province

Applicant before: Taichu (Wuxi) Electronic Technology Co.,Ltd.