CN114398011B - 数据存储方法、设备和介质 - Google Patents
数据存储方法、设备和介质 Download PDFInfo
- Publication number
- CN114398011B CN114398011B CN202210049776.7A CN202210049776A CN114398011B CN 114398011 B CN114398011 B CN 114398011B CN 202210049776 A CN202210049776 A CN 202210049776A CN 114398011 B CN114398011 B CN 114398011B
- Authority
- CN
- China
- Prior art keywords
- variable
- executed
- sram
- stack
- compiled
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请涉及数据处理技术领域,特别涉及一种数据存储方法、设备和介质。该方法应用于电子设备,电子设备上安装有编译器,电子设备包括加速器,并且加速器包括多个处理模块,各处理模块包括自用的存储单元;并且方法包括:编译器获取待编译指令,待编译指令包括第一待编译变量;编译器对待编译指令进行编译得到待执行指令;并且编译器确定与第一待编译变量对应的存储单元为第一处理模块的第一存储单元,并确定待执行指令在被第一处理模块执行的过程中,第一待执行变量在第一存储单元中将被存储的第一存储空间。本申请实施例提供的方法,可以减少用户在编程时的工作量,提高编程的易用性、正确性和效率。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种数据存储方法、设备和介质。
背景技术
随着计算机学的发展,电子设备需要处理的数据量越来越多,处理器不再能够满足数据处理需求,因此加速器被设计出来,用于处理图像数据、音频数据、视频数据。不同于传统的处理器,加速器具有多个处理单元,为了提高对数据的处理速率,会在每个处理单元设置专用的存储器(例如专用的静态随机存取存储器(Static Random-Access Memory,SRAM))来暂存需要单独进行访问处理的数据。具体地,处理单元(Processing Elements,简称PE)将直接读取其专用的SRAM上的数据,并将处理结果暂时存储在专用的SRAM上。当加速器的处理单元完成所有的待处理数据后,会调用直接存储器访问(Direct Memory Access,简称DMA)将最终的处理结果存储回加速器的双倍速率同步动态随机存储器(Double DataRate SDRAM,简称DDR,其中SDRAM全称为Synchronous Dynamic Random Access Memory)。
但是由于这些加速设备的处理单元不是标准的中央处理器(Central ProcessingUnit,简称CPU)和图形处理器(Graphics Processing Unit简称GPU),现有技术中,对于加速器的管理,都会在C或者OpenCL语言等高级语言的基础上进行相应扩充,提供编程方式。具体地,程序员向编译器编入程序时,需要向编译器提供程序中变量(包括变量名和变量对应的数据)存储的地址空间(下文称变量地址),编译器根据程序员输入的变量以及变量地址,将变量存储到专用的SRAM上。在此过程中,程序员需要时刻了解专用的SRAM中的存储情况,以确保变量在存储的过程中不会出现SRAM的地址空间已被占用的问题,同时需要花费较多的时间确定SRAM中可被使用的存储空间。此种对SRAM进行编程管理的方法,编程正确性低、效率低、易用性低。
发明内容
为解决上述对于专用SRAM的管理时,编程正确性低、效率低、易用性低的问题,本申请实施例提供了一种数据存储方法、设备和介质。
第一方面,本申请实施例提供了一种数据存储方法,应用于电子设备,电子设备上安装有编译器,电子设备包括加速器,并且加速器包括多个处理模块,各处理模块包括自用的存储单元;
并且方法包括:编译器获取待编译指令,待编译指令包括第一待编译变量;
编译器对待编译指令进行编译得到待执行指令,其中,待执行指令包括第一待执行变量,第一待执行变量为第一待编译变量编译后的变量;
并且编译器确定与第一待编译变量对应的存储单元为第一处理模块的第一存储单元,并确定待执行指令在被第一处理模块执行的过程中,第一待执行变量在第一存储单元中将被存储的第一存储空间。
其中,处理模块即下文实施例中的处理单元,例如图1b中的处理单元102、处理单元103和处理单元104。
可以理解,其中的自用的存储单元可以理解为处理模块的专用存储单元,即只有存储单元所在的处理模块可以实现对其专用存储单元的数据指令的读写和删除。例如,第一存储单元为第一处理模块的专用存储单元,即只有第一处理模块可以实现对第一存储单元的数据指令读写和删除。
其中,第一待执行变量在第一存储单元将被存储的第一存储空间,可以理解为,编译器确定的,第一待执行变量在第一存储单元的存储地址、存储时需要占用的空间等信息。
本申请实施例提供的数据存储方法,在符合高级编程语言标准的基础上,适当地对编程模型进行扩充,使得编译器能够自动完成对待执行指令中待执行变量的存储管理,进而用户在编程对应的数据存储指令时,无需用户关心存储单元的使用情况,可以减少用户工作量,提高编程的易用性、正确性和效率。
在上述第一方面的一种可能的实现中,存储单元为静态随机存取存储器。
可以理解,在一些实施例中,存储单元还可以为其他类型的存储器,不限于上述静态随机存取存储器,例如同步动态随机存储器等,本申请对此不作限制。
在上述第一方面的一种可能的实现中,存储单元包括至少一个堆栈存储区域,并且待执行变量所需的存储空间位于堆栈存储区域中。
在上述第一方面的一种可能的实现中,第一待执行变量在第一存储单元的堆栈存储区域中以堆栈的方式进行存储。
可以理解,堆栈的方式的存储为,第一待执行变量在第一存储单元的堆栈存储区域中的以堆栈的数据存储结构进行存储,且在对应的堆栈存储区域中,数据只能在该区域的一端(栈顶)进行操作。
在上述第一方面的一种可能的实现中,各处理模块自用的存储单元中的堆栈存储区域的区域标识与待编译指令的待编译变量的变量标识存在对应关系;
并且编译器确定与第一待编译变量对应的存储单元为第一处理模块的第一存储单元,包括:
编译器基于第一待编译变量的变量标识,确定与变量标识对应的区域标识属于第一存储单元的堆栈存储区域。
在上述第一方面的一种可能的实现中,加速器还包括存储模块,各处理模块均可访问存储模块。
在上述第一方面的一种可能的实现中,存储模块为双倍速率同步动态随机存储器。
可以理解,在本申请的一些实施例中,存储模块还可以为除了双倍速率同步动态随机存储器之外的其他存储器,例如动态随机存取存储器等,本申请对此不作限制。
在上述第一方面的一种可能的实现中,待编译执行还包括第二待编译变量,待执行指令还包括第二待执行变量,第二待执行变量为第二待编译变量编译后的变量,并且方法还包括:
编译器根据第二待编译变量的变量标识确定待执行指令在被执行的过程中,第二待执行变量将被存储的第二存储空间位于存储模块中。
在上述第一方面的一种可能的实现中,编译器确定待执行指令在被第一处理模块执行的过程中,第一待执行变量在第一存储单元中将被存储的第一存储空间,包括:
编译器计算第一待执行变量的长度,并根据长度确定第一待执行变量将被存储的第一存储空间。
可以理解,其中的长度为第一待执行变量的大小,例如第一待执行变量为int型数据,则其长度为4字节。
在上述第一方面的一种可能的实现中,上述方法还包括:
确定的存储单元所在的处理模块执行对应的待执行指令,并将待执行变量存储至存储空间。
第二方面,本申请实施例提供了一种电子设备,一个或多个处理器;一个或多个存储器;一个或多个存储器存储有一个或多个程序,当一个或者多个程序被一个或多个处理器执行时,使得电子设备执行上述数据存储方法。
第三方面,本申请实施例提供了一种存储介质上存储有指令,指令在计算机上执行时使计算机执行上述数据存储方法。
第四方面,本申请实施例提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现上述数据存储方法。
附图说明
图1a所示为本申请实施例提供的一种数据存储方法的应用场景图;
图1b所示为本申请实施例提供的一种加速器的结构示意图;
图2a所示为一种数据存储方法的应用场景图;
图2b所示为本申请实施例提供的一种堆栈存储区域的结构示意图;
图2c所示为本申请实施例提供的一种堆栈空间的结构示意图;
图2d所示为本申请实施例提供的一种堆栈空间的结构示意图;
图3a所示为本申请实施例提供的DDR存储区域存储变量的过程示意图;
图3b所示为本申请实施例提供的SRAM存储区域存储变量的过程示意图;
图4所示为本申请实施例提供的一种基于专用存储单元的数据存储方法的流程示意图;
图5所示为本申请实施例提供的一种堆栈空间的结构示意图;
图6所示为本申请实施例提供的一种电子设备的结构示意图;
图7所示为本申请实施例提供的一种片上***的结构示意图。
具体实施方式
本申请的说明性实施例包括但不限于一种基于专用存储单元的数据存储方法、电子设备及存储介质。下面将结合附图对本申请的实施例作进一步地详细描述。
在以下的叙述中,为了使读者更好地理解本发明而提出了许多技术细节。但是,本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本发明各权利要求所要求保护的技术方案。
为了更好地理解本申请实施例的方案,下面先对本申请实施例可能涉及的相关术语和概念进行介绍。
SRAM,静态随机存取存储器,利用晶体管来存储信息,一旦掉电,资料就会全部丢失,只要供电,它的资料就会一直存在,不需要动态刷新。SRAM无需刷新、读写速度快,但成本高、容量小,一般用来作为***级芯片(System on Chip,SOC)的内部RAM(英文全称Random Access Memory,中文全称随机访问存储器)使用。
DDR,双倍速率同步动态随机存储器,与***总线速度同步,也就是与***时钟同步,通过不断的刷新来保证数据不会丢失,可以读写任意地址的数据,每个时钟周期可以传输两次数据。DDR集成度高、功耗低、成本低、适合做大容量存储,一般作为高速缓存或微控制单元(Microcontroller Unit,MCU)的内部RAM。
下面结合图1a和图1b对本申请实施例的应用场景和涉及的电子设备进行介绍。
如图1a所示,为本申请实施例提供的基于专用存储单元的数据存储方法的一种应用场景。
该场景包括具有加速器100、处理器200和编译器300的电子设备10。其中,加速器100和处理器200为电子设备10的硬件结构,加速器100用于协助处理器200进行数据处理。编译器300为电子设备10的软件结构,编译器300用于对接收到的程序进行编译。
具体地,当程序输入电子设备10时,处理器200接收到程序,会将程序给到编译器300进行编译,然后电子设备10***会将编译后的、处理器200需要处理的程序分给处理器200,将编译后的、加速器100需要处理的程序分给加速器100的DDR单元中。
此外,可以理解,处理器200可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processing unit,GPU),图像信号处理器(imagesignal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signalprocessor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。
其中,加速器100可以包括CPU、GPU、应用处理器(application processor,AP)、调制解调处理器、图像信号处理器(image signal processor,ISP)、数字信号处理器(digital signal processor,DSP)、神经网络处理器(neural-network processing unit,NPU)等。
可以理解,处理器200和加速器100虽然均有可能包括同类型的处理器,例如GPU、AP等,但是两者包括的同类型的处理器具有不同的运行环境以及编程模型,即加速器100具有处理器200的部分数据处理功能,而并非处理器200的全部功能,适用于处理器200的部分方法,在加速器100上并不适用。
可以理解,本申请实施例中的基于专用存储单元的数据存储方法适用于加速器100。图1b根据本申请一些实施例示出了一种加速器的结构示意图。
具体地,如图1b所示,加速器100包括DDR单元101和多个处理单元。多个处理单元和DDR单元101为加速器100内部的器件。多个处理单元包括处理单元102、处理单元103、处理单元104等。每个处理单元上设有专用存储单元,例如处理单元102的专用SRAM单元1021、处理单元103的专用SRAM单元1031和处理单元1041的专用SRAM单元1041。其中,处理单元102、处理单元103和处理单元104在接收到程序时,对于程序的处理与执行相同,区别在于采用不用执行主体不同以及专用SRAM不同,下文均以处理单元102和专用SRAM单元1021对本申请实施例进行介绍。
可以理解,程序输入电子设备10后,经编译器300进行编译,处理单元102接收到其可以执行的程序语言,并将编译结果进行存储。其中需要处理单元102进行单独数据处理的,可以存放至处理单元102的专用SRAM单元1021上;需要多个处理单元共同进行数据处理、或对处理结果存储的数据指令,可以存放至处理单元之外的其他存储器中,例如DDR单元101中。
可以理解,编译器300,是一种能够将源代码(通常为高级语言)编译成可以直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的程序软件。
此外,可以理解,多个处理单元可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processing unit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digitalsignal processor,DSP),基带处理器,和/或神经网络处理器(neural-networkprocessing unit,NPU)等。
可以理解,图1b为本申请实施例中加速器的一种结构示例,在其他实施例中,加速器可以包括比图1b所示更多或更少的器件,本不超出本申请的保护范围。
如图2a所示,程序输入电子设备10后,编译器300会对程序进行编译,并将编译后的程序写入DDR单元101。处理单元102在执行编译后的程序时,可以先从DDR单元101中获取编译器300编译后的程序,并将编译后的程序分别写入其专用的存储单元(例如专用SRAM单元1021)和其他的存储单元(例如DDR单元101)中。具体地,在输入程序中,会包括变量,以及程序员设定的变量地址,编译器300在编译程序后,处理单元102会将变量地址对应于专用SRAM单元1021的变量存储于专用SRAM单元1021中对应的地址空间内,将变量地址对应于DDR单元101的变量存储于DDR单元101中对应的地址空间内等。其中,变量可以是程序员设置的、没有固定值的数据,例如v1、v2等,有些变量由于只需要处理单元102进行数据的访问处理,因此需要存储于处理单元102的专用SRAM单元1021中,有些变量由于需要多个处理单元进行数据处理、或表示处理单元最终的数据处理结果,因此需要存储在DDR单元101中。
可见,编译器300只需要对输入的程序进行编译,而变量地址以及存储单元的使用情况是需要程序员进行管控的。这样,程序员在编程实现对加速设备100的存储的管理,特别是专用SRAM单元1021的存储的管理时,需要时刻了解专用SRAM单元1021中的存储情况,即需要知道哪些地址已经被占用,哪些地址空间仍是空的,可以用来存储变量,在为新的变量分配变量地址时,知道哪些空间地址可以被使用,以确保新的变量在存储的过程中不会出现地址空间已被占用的问题,同时需要花费较多的时间确定专用SRAM单元1021中可被使用的存储空间。一旦输入的变量地址被占用,例如,程序员为新的变量S1分配变量地址为专用SRAM单元1021中的0x101,但是专用SRAM单元1021中的0x101已经被旧的变量S0占用,在运行编程好的代码时,就会出现编程错误的信息,需要程序员调试程序,确定错误的程序代码位置,再通过代码显示出专用SRAM单元1021中的存储情况,然后修改变量S1的变量地址。如果变量S1之后还有别的要存储变量,就可能需要修改相应的变量地址。可见,程序员输入变量地址并对变量进行分配的编程方案,编程的程序代码正确性低,由于变量地址分配失误造成编程报错,然后重新修改代码会降低编程效率,同时程序员每次分配变量时,需要了解专用SRAM单元1021的存储情况,编程的易用性低。
如前文所述,在通过编译器300设定专用SRAM单元1021的管理方法时,会通过一个指针变量指向专用SRAM单元1021的地址空间,但此种方法,编程正确性低、效率低、易用性低。为解决该问题,本申请实施例提供了一种基于专用存储单元的数据存储方法。具体地,在本申请实施例中,程序员在向编译器300输入程序代码时,只需在程序代码中输入变量,并对变量所要存储的存储器进行标识,例如,对于要存储到处理单元的专用存储单元(例如处理单元102的专用SRAM单元1021)的变量设置SRAM修饰符,而对存储到其他存储器,如DDR单元的变量设置由于编译器会自动默认存储于DDR单元中,而无需通过特定的标识进行存储位置的区分,因此存储于其他存储器的变量无需进行标识。编译器300在对输入的程序编译后,会根据变量前的标识,例如SRAM修饰符,将SRAM修饰符标识的变量存储到专用SRAM单元,将未用修饰符标识的变量存储到DDR单元。
其中,修饰符,可以作为描述对象的标识。其中的描述对象包括类、方法、变量。修饰符包括访问控制修饰符和非访问控制修饰符。其中,访问控制修饰符可以用于控制对类、方法、变量的访问权限,例如global、local、private等地址空间类的访问控制修饰符。非访问控制修饰符用于实现除了控制访问权限的其他功能,例如static、final、abstract等修饰符。
可以理解,为了使得编译器300能够在专用存储单元(例如专用SRAM单元)中或者DDR单元中自动分配变量的存储空间和存储位置,可以在SRAM单元或DDR单元中设置对应的堆栈存储区域,作为该存储单元的堆栈空间,例如,如图2b所示,在DDR单元101的存储单元中,设置DDR堆栈存储区域201,在专用SRAM单元1021的存储单元中,设置SRAM堆栈存储区域202。进一步地,当采用SRAM修饰符标识需要存储于专用SRAM单元1021的变量时,SRAM堆栈存储区域202中可以存储采用SRAM修饰符标识的变量,未用修饰符标识的变量可以存储于DDR堆栈存储区域201中。
例如,在一些实施例中,堆栈存储区域的数据存储结构可以如图2c所示,该数据存储结构即为存储单元的堆栈空间。堆栈空间中,只能在数据结构的一端(即栈顶)***和删除数据,数据遵循后进先出的原则。可以理解,栈指针SP指向堆栈空间的栈顶。
当有程序的变量需要存储于堆栈存储区域时,可以例如使用pushq指令将变量存储入堆栈存储区域,此时编译器300会计算该程序需要的总的堆栈空间,栈指针SP指向的地址会根据计算结果减少对应的量,然后根据变量相对于SP的偏移将程序的变量依次压入堆栈存储区域。可以理解,在存储数据后,堆栈空间会向下增长。每次增长的空间,为存储的程序对应的栈帧。例如,在变量5之后有新的程序需要存储,新的程序中包括变量6,则处理器会根据编译器划分好的新的程序所需的存储空间和存储位置,将堆栈空间的栈指针SP减小一定量,并将新的程序中的变量6存入堆栈存储区域,如图2d所示。此时,栈指针SP指向堆栈空间的栈顶。
可以理解,当处理单元确认输入的程序执行完成,可以将该程序对应堆栈空间进行释放。例如对于输入的包括变量6的程序,当该程序执行完成后,处理单元102确定该程序中包括变量6,则将变量6对应的堆栈空间进行释放。
可以理解,一些变量可以存储在同一存储单元堆栈存储区域,另一些变量存储存储在不同存储单元的堆栈存储区域。
下面结合图3a至图3b对本申请实施例中基于专用存储单元的数据存储方法进行介绍。在本申请实施例中,以专用存储单元为专用SRAM单元,其他存储器为DDR单元为例进行介绍。图3a所示为本申请实施例中向DDR单元101的堆栈存储区域存储变量的过程示意图,图3b所示为本申请实施例中专用SRAM单元1021的堆栈存储区域存储变量的过程示意图。
在一些实施例中,在编程和管理专用SRAM单元1021时,会先定义SRAM变量的SRAM修饰符,假设SRAM修饰符为_Isram,并将SRAM修饰符_Isram映射到专用SRAM单元1021的一个地址空间,此地址空间作为专用SRAM单元1021的堆栈存储区域,栈底地址为0x900,堆栈存储区域的容量为2MB。然后向编译器输入的函数如下所示:
void fun1(void){
int v1;
int v2;
int v3;
_Isram int va1;
_Isram int va2;
······
}
可以理解,其中变量v1、变量v2和变量v3前没有修饰符,为非SRAM变量,按序压入图3a中的DDR堆栈存储区域,即图3a所示的过程。
具体地,如图3a所示,编译器读取上述函数fun1时,会获取上述函数fun1所有变量,确定变量v1、变量v2和变量v3前未用SRAM修饰符_Isram标识,表明该变量为非SRAM变量。由于编译器默认将未用特定修饰符标识的变量存储于DDR单元101的堆栈存储区域,则此时,编译器会计算上述三个变量总的大小为12字节。然后处理单元102在执行上述函数fun1时,编译器可以先获取DDR堆栈空间的栈指针SP1指向的地址0x800,然后根据编译器300计算的存储空间的大小,调整栈指针SP1指向的地址为0x788。然后处理单元102通过一个访问指针相对于栈指针SP1的偏移,依次将变量v1、变量v2和变量v3压入DDR堆栈存储区域中。具体地,例如访问指针为LP1,由于变量v1的大小为4个字节,故而,访问指针LP1赋值为SP1+8,压入变量v1,之后编译器会调整访问指针LP1指向的地址将变量v2和v3也压入DDR堆栈存储区域中。
其中变量va1和变量va2前有SRAM修饰符_Isram,故为SRAM变量,按序压入图3b中的SRAM堆栈存储区域,即图3b中的过程。
具体地,如图3b所示,编译器确定变量va1和变量va2前使用SRAM修饰符_Isram标识,表明该变量为SRAM变量,并计算到变量va1和变量va2的大小为4个字节。由于预先在编译器的语法结构中增加SRAM修饰符_Isram及其对应的堆栈存储区域,故而,编译器默认将使用SRAM修饰符_Isram标识的变量存储于专用SRAM单元1021的SRAM堆栈存储区域。处理单元101在执行上述函数fun1时,编译器300会获取SRAM堆栈空间的栈指针SP2指向的地址为0x700,处理单元102会调整栈指针SP2指向的地址为0x692。然后编译器300通过一个访问指针相对于栈指针SP1的偏移,依次将变量va1和变量va2依次压入SRAM堆栈空间中。具体地,例如访问指针为LP2,由于变量va1的大小为4个字节,故而,访问指针LP2赋值为SP2+4,压入变量va1,之后处理单元102会调整访问指针LP2指向的将变量va2也压入SRAM堆栈空间中。
可见,函数fun1的变量被存储在两个堆栈存储区域中,两个堆栈存储区域可以用不同的堆栈ID来区分,例如DDR堆栈存储区域的堆栈ID为0,SRAM堆栈存储区域的堆栈ID为1。
可以理解,这些变量,除了存储的堆栈ID不同,都是通过栈帧进行管理。在这个管理过程中,不需要用户来关心专用SRAM单元1021的存储空间分配问题,编译器会自动对计算变量的大小,并为其分配存储空间,即分配变量的栈帧的空间。
其中的栈帧,可以理解为函数的调用记录,记录在堆栈空间,每一个栈帧对应一个调用记录。例如图3a中DDR变量v1对应的栈帧可以理解为变量v1在DDR堆栈空间的调用记录。栈帧大小,对应编译器为变量分配的存储空间。
在一些实施例中,为变量分配的存储空间的大小可以比计算得到变量的大小稍大一些,例如计算变量v1的大小为4字节,为变量v1分配的存储空间的容量为6个字节,即DDR堆栈空间压入变量v1后,访问指针LP1指向地址0x794。本申请对此不作限制。
本申请实施例在符合高级编程语言标准的基础上,适当地对编程模型进行扩充,使得用户可以像使用非DDR变量那样使用SRAM变量,可以减少用户工作量,提高编程的易用性、正确性和效率。同时,能够更充分利用专用SRAM单元1021的存储空间,提高了专用SRAM单元1021的复用率。
如图4所示,为本申请实施例的一种基于专用存储单元的数据存储方法的流程示意图。该方法包括以下步骤:
401:编译器获取专用SRAM单元的地址空间的SRAM修饰符,并将SRAM修饰符映射到专用SRAM单元中指定的地址空间。
可以理解,SRAM修饰符作为专用SRAM单元1021的地址空间的访问控制修饰符,通过SRAM修饰符,可以对专用SRAM单元1021中指定的地址空间进行访问。SRAM修饰符映射的专用SRAM单元中指定的地址空间即为专用SRAM单元的SRAM堆栈存储区域。将SRAM修饰符放在需要被标识的变量之前,标识该变量被存储于专用SRAM单元1021上。其中的变量可以为自动变量或局部变量。
具体地,指定的地址空间作为SRAM堆栈存储区域的栈底,即SRAM堆栈空间的栈底,并定义SRAM堆栈存储区域的空间大小。在将SRAM修饰符标识的变量存储于对应的堆栈存储区域时,堆栈空间会从栈底向低地址方向生长,栈顶地址始终小于栈底地址。可以理解,堆栈空间是有多个栈帧组成的,每次向堆栈存储区域压入的变量会对应一个栈帧,用于记录该变量的调用记录。
在一些实施例中,栈帧不仅存储函数的变量,还存储了函数入参、出参、返回地址和上一个栈帧的栈底指针等信息。
在一些实时例中,401可以被传递到编译器的抽象语法树(abstract syntaxcode,AST)、代码生成器(Code Generator)、中间表示(Intermediate Representation,IR)中。
可以理解,抽象语法树为编译器在保存所有需要解析的数据时需要用到的抽象数据类型,为树形数据结构,这个树描述了编译器的编程语言的语法结构。将401中定义的内容传递到抽象语法树中,作为编译器的语法规则,才能够为编译器的数据解析和语法分析提供支持。
可以理解,中间表示指编译器对于源程序进行扫描后生成的内部表示,代表源程序的语义和语法结构,编译器的各个阶段都在中间表示上进行分析或优化变换。例如,对于前端的输入语言为OpenCL语言,后端的目标平台汇编代码为汇编语言的编译器中,中间表示为将源代码由OpenCL语言转换为汇编语言的过程,可以用一个中间表示来实现。中间表示可以为抽象语法树、反向波兰符号或3地址码等。因此,将401中定义的内容传递到中间表示中,可以实现高级语言中SRAM修饰符及其映射的地址空间,向低级语言的映射,便于后续代码生成器生成代码。
可以理解,代码生成器能够将编译器内的中间表示转换为电子设备能够执行的低级语言,例如能将抽象语法树形式的中间表示转换为电子设备能够识别的汇编语言。代码生成器在生成代码时必须同时跟踪寄存器(以获取可用性)和地址空间(值的位置),因此,将401中定义的内容传递到代码生成器中,代码生成器可以追踪SRAM修饰符标识的变量在专用SRAM单元1021中的存储位置。
在一些实施例中,处理单元(PE)201中会包括多个专用SRAM单元1021,进而,在执行401时,可以定义多个SRAM修饰符,分别映射到不同专用SRAM单元1021中对应的地址空间。例如,当处理单元102中包括两个专用SRAM单元1021(专用SRAM单元1021'和专用SRAM单元1021'')时,可以定义两个SRAM修饰符:_Israma和_Isramb,然后将SRAM修饰符_Israma和_Isramb分别映射到两个专用SRAM单元1021的指定的地址。进而在编程中,对需要存储于专用SRAM单元1021'的变量,在将_Israma放在该变量前面;对需要存储于专用SRAM单元1021''的变量,在将_Isramb放在该变量前面。
402:编译器获取待编译指令,并根据待编译指令中变量的修饰符,将变量划分为SRAM变量和非SRAM变量。
在一些实施例中,获取的待编译指令,可以是用户通过编译器输入的函数,即用户在编程实现对专用SRAM单元1021进行管理的过程,编程好的函数可以被处理单元(PE)201执行,以实现对专用SRAM单元1021的管理。输入的函数中可以包括类、方法、变量等。例如图3a中的DDR变量v1、DDR变量v2和DDR变量v3,以及图3b中的SRAM变量va1和SRAM变量va2。
在一些实施例中,处理单元(PE)201中会包括多个专用SRAM单元1021,并对应于多个专用SRAM单元1021定义了多个SRAM修饰符,则对于获取到的待编译指令,可以根据多个SRAM修饰符,将采用相同的SRAM修饰符标识的变量作为多种SRAM变量中的一种SRAM变量,将未采用SRAM修饰符标识的变量作为非SRAM变量,即待编译指令中的变量被划分为多种SRAM变量和非SRAM变量。
403:编译器编译待编译指令,得到待执行指令,并且在编译的过程中,分配非SRAM变量存储于DDR堆栈存储区域及其所需的非SRAM变量的存储空间,分配SRAM变量存储于SRAM堆栈存储区域及其所需的SRAM变量存储空间。
可以理解,待编译指令为高级语言编写的指令,例如C语言、C++语言等,待执行指令为电子设备可以执行的指令,例如汇编语言的指令等。
可以理解,编译器根据SRAM修饰符与专用SRAM单元1021的地址空间的映射关系,将SRAM变量采用堆栈类型的数据结构,存储于专用SRAM单元1021中,例如图3b中的SRAM堆栈存储区域。将非SRAM变量采用堆栈类型的数据结构,存储于DDR单元101中,例如图3a中的DDR堆栈存储区域。
具体地,403包括:在编程的函数中,定义SRAM变量和非SRAM变量,编译器会确定处理单元102在执行函数时,使用堆栈的方式来管理SRAM变量和非SRAM变量,这些变量的生命周期只会在当前的函数中。编译器300可以计算SRAM变量和非SRAM变量所需的存储空间,进而处理单元102在执行函数时,函数头调整栈指针,例如图3中的栈指针SP1和栈指针SP2,为SRAM变量和非SRAM变量分别分配空间。在函数完成时,会再次调整栈指针,回收SRAM堆栈空间和DDR堆栈空间。
在一些实施例中,不同的堆栈存储区域可以用不同的堆栈ID来区分,进一步地,SRAM修饰符可以对应专用SRAM单元1021中的SRAM堆栈存储区域的堆栈ID,进而编译器在访问到SRAM修饰符时,可以根据SRAM修饰符,将被SRAM修饰符标识的变量存储于对应的堆栈存储区域。未用SRAM修饰符标识的变量,则会默认对应于DDR堆栈存储区域的堆栈ID。例如,DDR堆栈存储区域的堆栈ID为0,SRAM堆栈存储区域的堆栈ID为1。则403中,会将非SRAM变量存储于堆栈ID为0的DDR堆栈存储区域,将SRAM变量存储于堆栈ID为1的SRAM堆栈存储区域。
可以理解,DDR堆栈存储区域和SRAM堆栈存储区域除了堆栈ID不同,以用于SRAM变量和非SRAM变量的存储外,对于其堆栈空间的栈帧的管理都是相同的。
在一些实施例中,403中将变量分配于不同堆栈存储区域的过程,是在将IR转换为更底层中间表示(Machine IR,MIR)的过程中。在高级语言转换为机器可读语言的过程中,例如OpenCL语言转换为汇编语言的过程中,由于转换为汇编时栈已经存在,而在IR时过早,所以上述403会在处于MIR时执行,生成对应的栈帧。具体地,将IR转换为MIR的过程中,根据SRAM修饰符对应的地址空间的栈ID,将SRAM变量分配于SRAM堆栈存储区域,将非SRAM变量分配于DDR堆栈存储区域。
在一些实施例中403具体包括:为SRAM堆栈存储区域的SRAM堆栈空间分配一个专用的栈指针,例如图3b中的SP2。同时,编译器通过其抽象语法树、IR等中的与架构相关的回调函数,在函数头的代码生成的过程中,遍历SRAM堆栈存储区域对应的栈ID,分配SRAM变量,包括计算SRAM变量的大小并为其分配空间,并计算SRAM变量的总大小。在函数结束返回前,会调整SRAM堆栈空间的栈指针,回收专用SRAM堆栈空间。对于非SRAM变量,会遍历DDR堆栈存储区域对应的栈ID,分配非SRAM变量,包括计算非SRAM变量的大小并为其分配空间,并计算非SRAM变量的总大小。在函数结束返回前,会调整DDR堆栈空间的栈指针,回收专用DDR堆栈空间。
在一些实施例中,处理单元(PE)201中会包括多个专用SRAM单元1021,并对应于多个专用SRAM单元1021定义了多个SRAM修饰符,则每个SRAM修饰符会对应一个堆栈ID,不同的堆栈ID对应于不同的SRAM堆栈存储区域。在执行403时,会根据SRAM修饰符对应的堆栈ID,以及未用SRAM修饰符表示的非SRAM变量对应的堆栈ID,将变量分配到多个SRAM堆栈存储区域和DDR堆栈存储区域。
404:处理单元执行待执行指令,并根据编译器的分配结果,完成对非SRAM变量和SRAM变量进行存储。
可以理解,在执行编译后的待执行指令时,处理器会执行其需要执行的编译后的待执行指令,加速器会执行其需要执行的待执行指令。执行待执行指令前,以及执行待执行指令后,会根据402和403中的方法,对SRAM变量和非SRAM变量进行存储管理。本申请实施例中的方法在于对数据存储的管理,并不会改变指令的本身进行改变。其中,执行的编译后的待执行指令,可以理解为执行函数中的方法,对数据进行相应的处理。
405:待执行指令执行结束后,编译器回收DDR堆栈存储区域的DDR堆栈空间和SRAM堆栈存储区域的SRAM堆栈空间。
可以理解,在待执行指令执行完成之后,编译器300会自动完成对堆栈空间的释放,例如在上述函数fun1对应的待执行指令执行完成后,编译器300检测到函数被返回,则会自动释放函数fun1对应的堆栈空间,例如图3a中所示的DDR堆栈空间中的函数fun1部分以及图3b所示的SRAM堆栈空间中的函数fun1部分。
在一些实施例中,本申请实施例中的基于专用存储单元的数据存储方法还可以满足多个函数或指令的并行处理。下面将结合图5进行详细介绍。
如图5所示,为本申请实施例提供的基于专用存储单元的数据存储方法的另一种堆栈空间的结构示意图。
在一些实施例中,图5中的函数fun1和函数fun2为同一个编程程序中定义的多个函数。其中,函数fun2可以是函数fun1的子函数,即在执行函数fun1的过程中会调用函数fun2。函数fun1和函数fun2可以是并列的子函数,即两个函数之间没有调用与被调用的关系,分别执行,互不影响。
图5中,输入的程序为以下函数:
void fun2(void){
int v11;
int v12;
int v13;
_Isram int vb1;
_Isram int vb2;
······
}
void fun1(void){
int v1;
int v2;
int v3;
_Isram int va1;
_Isram int va2;
fun2();
······
}
其中,函数fun2在函数fun1中或函数fun1被调用执行。
可以理解,其中变量v11、变量v12和变量v13为函数fun2的非SRAM变量,在函数fun1的DDR栈帧之后按序压入DDR堆栈存储区域,即图5中的DDR变量v11、DDR变量v12和DDR变量v13。其中变量vb1和变量vb2前有SRAM修饰符_Isram,故为函数fun2的SRAM变量,函数fun1的SRAM栈帧之后按序压入SRAM堆栈存储区域,即图5中的SRAM变量vb1和SRAM变量vb2。可见,函数fun2的变量也被存储在两个堆栈空间中,在入栈时可以用不同的堆栈ID来区分要分配的堆栈存储区域。
可以理解,本申请实施例中的基于专用存储单元的数据存储方法,在进行多个多级函数的调用下,仍然能够实现变量的自动分配,且变量的分配互不影响,在编程阶段实现对专用SRAM单元1021管理时,降低出错的可能,提高正确率。
本申请实施例的基于专用存储单元的数据存储方法,通过预先定义一个用于标识专用SRAM单元1021的地址空间的SRAM修饰符,并定义该SRAM修饰符与SRAM的存储空间的映射关系,进而在对专用SRAM单元1021进行管理时,编译器可以基于变量的修饰符,将用SRAM修饰符标识的SRAM变量和未用SRAM修饰符标识的非SRAM变量分别存放在SRAM堆栈存储区域和DDR堆栈存储区域中,编译器可以实现对专用SRAM单元1021的存储空间的自动分配和自动回收。
本申请实施例在符合高级编程语言标准的基础上,适当的对编程模型进行扩充,使得用户可以像使用非DDR变量那样使用SRAM变量,不需要用户时刻关心专用SRAM单元1021的存储空间分配问题,提高了编程的易用性、正确性,并提高了编程的效率。同时,对专用SRAM单元1021采用堆栈的数据结构进行管理,可以满足多核或者多PE并行执行。
如图6所示,为能够实施本申请实施例所提供的技术方案的一种电子设备的***结构示意框图。
电子设备600可以包括耦合到***控制逻辑603的一个或多个处理器601。对于至少一个实施例,***控制逻辑603经由诸如前端总线(FSB)之类的多分支总线、诸如快速通道互连(QPI)之类的点对点接口、或者类似的连接与处理器601进行通信。处理器601执行控制一般类型的数据处理操作的指令。在一实施例中,***控制逻辑603包括,但不局限于,图形存储器***控制逻辑(GMCH)(未示出)和输入/输出中枢(IOH)(其可以在分开的芯片上)(未示出),其中GMCH包括存储器和图形控制器并与IOH耦合。
电子设备600还可包括耦合到***控制逻辑603的协处理器602和存储器604。或者,存储器和GMCH中的一个或两者可以被集成在处理器内(如本申请中所描述的),存储器604和协处理器602直接耦合到处理器601以及***控制逻辑603,***控制逻辑603与IOH处于单个芯片中。存储器604可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。在一个实施例中,协处理器602是图2a和图2b中的加速器103,诸如例如高吞吐量MIC处理器、网络或通信处理器、图形处理器、GPGPU、或嵌入式处理器等等。具体地,本申请实施例中的基于专用存储单元的数据存储方法应用于图6中的协处理器,可以理解,协处理器602即为图1中的加速器100。
在一个实施例中,电子设备600可以进一步包括网络接口(NIC)1206。网络接口606可以包括收发器,用于为电子设备600提供无线电接口,进而与任何其他合适的设备(如前端模块,天线等)进行通信。在各种实施例中,网络接口606可以与电子设备600的其他组件集成。网络接口606可以实现上述实施例中的通信单元的功能。
电子设备600可以进一步包括输入/输出(I/O)设备605。I/O 605可以包括:用户界面,该设计使得用户能够与电子设备600进行交互;***组件接口的设计使得***组件也能够与电子设备600交互;和/或传感器设计用于确定与电子设备600相关的环境条件和/或位置信息。
值得注意的是,图6仅是示例性的。即虽然图6中示出了电子设备600包括处理器601、***控制逻辑603、存储器604等多个器件,但是,在实际的应用中,使用本申请各方法的***,可以仅包括电子设备600各器件中的一部分器件,例如,可以仅包含处理器601和NIC 606。图6中可选器件的性质用虚线示出。
如图7所示,为根据本申请的一实施例的SOC 700的结构框图。在图7中,相似的部件具有同样的附图标记。另外,虚线框是更先进的SOC的可选特征。在图7中,SOC 700包括:互连单元705,其被耦合至处理器701;***代理单元707;总线控制器单元708;集成存储器控制单元704;一组或一个或多个协处理器702,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元703;直接存储器存取(DMA)单元706。在一个实施例中,协处理器701包括专用处理器,诸如例如网络或通信处理器、GPGPU、高吞吐量MIC处理器、或嵌入式处理器等等。其中的协处理器702可对应于图1a和图1b中的加速器100。
本申请公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本申请的实施例可实现为在可编程***上执行的计算机程序或程序代码,该可编程***包括至少一个处理器、存储***(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码应用于输入指令,以执行本申请描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理***包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何***。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理***通信。包括但不局限于OpenCL、C语言、C++、Java等。而对于C++、Java之类语言,由于其会将存储进行转换,基于对于本申请实施例中的基于专用存储单元的数据存储方法的应用会有些差异,本领域技术人员可以基于具体地高级语言进行变换,均不脱离本申请实施例的范围。
在一些情况下,所公开的实施例可以以硬件、固件、软件或其任何组合来实现。所公开的实施例还可以被实现为由一个或多个暂时或非暂时性机器可读(例如,计算机可读)存储介质承载或存储在其上的指令,其可以由一个或多个处理器读取和执行。例如,指令可以通过网络或通过其他计算机可读介质分发。因此,机器可读介质可以包括用于以机器(例如,计算机)可读的形式存储或传输信息的任何机制,包括但不限于,软盘、光盘、光碟、只读存储器(CD-ROMs)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或用于利用因特网以电、光、声或其他形式的传播信号来传输信息(例如,载波、红外信号数字信号等)的有形的机器可读存储器。因此,机器可读介质包括适合于以机器(例如,计算机)可读的形式存储或传输电子指令或信息的任何类型的机器可读介质。
在附图中,可以以特定布置和/或顺序示出一些结构或方法特征。然而,应该理解,可能不需要这样的特定布置和/或排序。而是,在一些实施例中,这些特征可以以不同于说明性附图中所示的方式和/或顺序来布置。另外,在特定图中包括结构或方法特征并不意味着暗示在所有实施例中都需要这样的特征,并且在一些实施例中,可以不包括这些特征或者可以与其他特征组合。
需要说明的是,本申请各设备实施例中提到的各单元/模块都是逻辑单元/模块,在物理上,一个逻辑单元/模块可以是一个物理单元/模块,也可以是一个物理单元/模块的一部分,还可以以多个物理单元/模块的组合实现,这些逻辑单元/模块本身的物理实现方式并不是最重要的,这些逻辑单元/模块所实现的功能的组合才是解决本申请所提出的技术问题的关键。此外,为了突出本申请的创新部分,本申请上述各设备实施例并没有将与解决本申请所提出的技术问题关系不太密切的单元/模块引入,这并不表明上述设备实施例并不存在其它的单元/模块。
需要说明的是,在本专利的示例和说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
虽然通过参照本申请的某些优选实施例,已经对本申请进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本申请的精神和范围。
Claims (12)
1.一种数据存储方法,应用于电子设备,其特征在于,所述电子设备上安装有编译器,所述电子设备包括加速器,并且所述加速器包括多个处理模块,各所述处理模块包括自用的存储单元;并且所述方法包括:
所述编译器获取待编译指令,所述待编译指令包括第一待编译变量;
所述编译器对所述待编译指令进行编译得到待执行指令,其中,所述待执行指令包括第一待执行变量,所述第一待执行变量为所述第一待编译变量编译后的变量;并且
所述编译器确定与所述第一待编译变量对应的存储单元为第一处理模块的第一存储单元,并确定所述待执行指令在被所述第一处理模块执行的过程中,所述第一待执行变量在所述第一存储单元中将被存储的第一存储空间。
2.根据权利要求1所述的数据存储方法,其特征在于,所述存储单元为静态随机存取存储器。
3.根据权利要求1所述的数据存储方法,其特征在于,所述存储单元包括至少一个堆栈存储区域,并且所述待执行变量所需的存储空间位于所述堆栈存储区域中。
4.根据权利要求3所述的数据存储方法,其特征在于,所述第一待执行变量在所述第一存储单元的堆栈存储区域中以堆栈的方式进行存储。
5.根据权利要求3所述的数据存储方法,其特征在于,各所述处理模块自用的存储单元中的所述堆栈存储区域的区域标识与所述待编译指令的待编译变量的变量标识存在对应关系;
并且所述编译器确定与所述第一待编译变量对应的存储单元为第一处理模块的第一存储单元,包括:
所述编译器基于所述第一待编译变量的变量标识,确定与所述变量标识对应的区域标识属于所述第一存储单元的堆栈存储区域。
6.根据权利要求1所述的数据存储方法,其特征在于,所述加速器还包括存储模块,所述各处理模块均可访问所述存储模块。
7.根据权利要求6所述的数据存储方法,其特征在于,所述存储模块为双倍速率同步动态随机存储器。
8.根据权利要求6所述的数据存储方法,其特征在于,所述待编译执行还包括第二待编译变量,所述待执行指令还包括第二待执行变量,所述第二待执行变量为所述第二待编译变量编译后的变量,并且所述方法还包括:
所述编译器根据所述第二待编译变量的变量标识确定所述待执行指令在被执行的过程中,所述第二待执行变量将被存储的第二存储空间位于所述存储模块中。
9.根据权利要求1所述的数据存储方法,其特征在于,所述编译器确定所述待执行指令在被所述第一处理模块执行的过程中,所述第一待执行变量在所述第一存储单元中将被存储的第一存储空间,包括:
所述编译器计算所述第一待执行变量的长度,并根据所述长度确定所述第一待执行变量将被存储的所述第一存储空间。
10.根据权利要求1所述的数据存储方法,其特征在于,还包括:
所述确定的所述存储单元所在的处理模块执行对应的待执行指令,并将所述待执行变量存储至所述存储空间。
11.一种电子设备,其特征在于,包括:
存储器,用于存储由电子设备的一个或多个处理器执行的指令,以及
处理器,是电子设备的处理器之一,用于控制执行权利要求1至10中任一项所述的数据存储方法。
12.一种计算机可读存储介质,其特征在于,所述存储介质上存储有指令,所述指令在计算机上执行时使所述计算机执行权利要求1至10中任一项所述的数据存储方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210049776.7A CN114398011B (zh) | 2022-01-17 | 2022-01-17 | 数据存储方法、设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210049776.7A CN114398011B (zh) | 2022-01-17 | 2022-01-17 | 数据存储方法、设备和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114398011A CN114398011A (zh) | 2022-04-26 |
CN114398011B true CN114398011B (zh) | 2023-09-22 |
Family
ID=81231823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210049776.7A Active CN114398011B (zh) | 2022-01-17 | 2022-01-17 | 数据存储方法、设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114398011B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106164862A (zh) * | 2014-04-04 | 2016-11-23 | 高通股份有限公司 | 用于编译器优化的存储器参考元数据 |
CN107003837A (zh) * | 2014-12-17 | 2017-08-01 | 英特尔公司 | 用于推测性编译器优化的轻量级受限事务存储器 |
CN110647360A (zh) * | 2019-08-20 | 2020-01-03 | 百度在线网络技术(北京)有限公司 | 协处理器的设备执行代码的处理方法、装置、设备及计算机可读存储介质 |
CN110825435A (zh) * | 2018-08-10 | 2020-02-21 | 北京百度网讯科技有限公司 | 用于处理数据的方法和装置 |
CN111566616A (zh) * | 2017-11-03 | 2020-08-21 | 相干逻辑公司 | 多处理器***的编程流程 |
CN111831287A (zh) * | 2019-04-22 | 2020-10-27 | 伊姆西Ip控股有限责任公司 | 用于确定执行代码段所需的资源的方法、设备和程序产品 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10521206B2 (en) * | 2017-08-29 | 2019-12-31 | Red Hat, Inc. | Supporting compiler variable instrumentation for uninitialized memory references |
US11526433B2 (en) * | 2020-03-12 | 2022-12-13 | International Business Machines Corporation | Data structure allocation into storage class memory during compilation |
-
2022
- 2022-01-17 CN CN202210049776.7A patent/CN114398011B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106164862A (zh) * | 2014-04-04 | 2016-11-23 | 高通股份有限公司 | 用于编译器优化的存储器参考元数据 |
CN107003837A (zh) * | 2014-12-17 | 2017-08-01 | 英特尔公司 | 用于推测性编译器优化的轻量级受限事务存储器 |
CN111566616A (zh) * | 2017-11-03 | 2020-08-21 | 相干逻辑公司 | 多处理器***的编程流程 |
CN110825435A (zh) * | 2018-08-10 | 2020-02-21 | 北京百度网讯科技有限公司 | 用于处理数据的方法和装置 |
CN111831287A (zh) * | 2019-04-22 | 2020-10-27 | 伊姆西Ip控股有限责任公司 | 用于确定执行代码段所需的资源的方法、设备和程序产品 |
CN110647360A (zh) * | 2019-08-20 | 2020-01-03 | 百度在线网络技术(北京)有限公司 | 协处理器的设备执行代码的处理方法、装置、设备及计算机可读存储介质 |
Non-Patent Citations (1)
Title |
---|
基于编译器优化的嵌入式软件缺陷分析方法;董燕;黄晨;左万娟;于倩;;航天控制(05);第66-71页 * |
Also Published As
Publication number | Publication date |
---|---|
CN114398011A (zh) | 2022-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110134492B (zh) | 一种异构内存虚拟机不停机的内存页面迁移*** | |
US7512745B2 (en) | Method for garbage collection in heterogeneous multiprocessor systems | |
CN110059020B (zh) | 扩展内存的访问方法、设备以及*** | |
EP2348406B1 (en) | Endian conversion tool | |
US7805582B2 (en) | Method of managing memory in multiprocessor system on chip | |
US8457943B2 (en) | System and method for simulating a multiprocessor system | |
JP5911997B2 (ja) | 装置、システム及びメモリ管理の方法 | |
US8312227B2 (en) | Method and apparatus for MPI program optimization | |
US20120254497A1 (en) | Method and apparatus to facilitate shared pointers in a heterogeneous platform | |
US8825718B2 (en) | Methods and apparatus for marking objects for garbage collection in an object-based memory system | |
US9086920B2 (en) | Device for managing data buffers in a memory space divided into a plurality of memory elements | |
CN105556503B (zh) | 动态的存储器控制方法及其*** | |
JP2000347876A (ja) | スタック・スロット割当て方法および装置 | |
CN103413569B (zh) | 一读且一写静态随机存储器 | |
US20090276575A1 (en) | Information processing apparatus and compiling method | |
US7562204B1 (en) | Identifying and relocating relocatable kernel memory allocations in kernel non-relocatable memory | |
Daylight et al. | Memory-access-aware data structure transformations for embedded software with dynamic data accesses | |
KR100809293B1 (ko) | 가상 머신에서 스택을 관리하는 장치 및 그 방법 | |
CN114398011B (zh) | 数据存储方法、设备和介质 | |
US20130321436A1 (en) | Method and apparatus for unifying graphics processing unit computation languages | |
CN116149554A (zh) | 一种基于risc-v及其扩展指令的数据存储处理***及其方法 | |
JP6881579B2 (ja) | データロードプログラム、データロード方法およびデータロード装置 | |
CN115185858A (zh) | 地址映射表的处理方法、装置和存储设备 | |
US20050027940A1 (en) | Methods and apparatus for migrating a temporary memory location to a main memory location | |
CN111966397A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |