一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于SIMD的SM3并行数据加密运算方法及系统与流程

2021-12-15 01:06:00 来源:中国专利 TAG:

一种基于simd的sm3并行数据加密运算方法及系统
技术领域
1.本公开涉及数据加密处理技术领域,特别涉及一种基于simd的sm3并行数据加密运算方法及系统。


背景技术:

2.本部分的陈述仅仅是提供了与本公开相关的背景技术,并不必然构成现有技术。
3.杂凑函数(或称hash函数、散列函数)是杂凑算法的基础,它是一种单向密码体制,即它是一个从明文到密文的不可逆映射,只有加密过程,不能解密。同时,杂凑函数可以将任意长度的输入经过变换以后得到固定长度的输出。杂凑函数的这种单向性特征和输出数据长度固定的特征使得它可以生成消息的“数字指纹”(或称消息摘要、杂凑值、hash值或散列值),因此在数据完整性认证、数字签名等领域有广泛的应用。
4.发明人发现,杂凑函数的单路实现,由三个for循环进行实现,所操作的数据具有依赖性,如图1所示,在第二次扩展中,可以很明显的看到w[i]依赖于w[i

16]、w[i

9]、w[i

6]、w[i

3],i=16至68,在进行多路并行操作时无法利用循环进行消息扩展。


技术实现要素:

[0005]
为了解决现有技术的不足,本公开提供了一种基于simd的sm3并行数据加密运算方法及系统,使数据在保持数据具有哈希依赖的情况下实现了多路并行运算,既保证了运算结果的正确性,又提高了性能。
[0006]
为了实现上述目的,本公开采用如下技术方案:
[0007]
本公开第一方面提供了一种基于simd的sm3并行数据加密运算方法。
[0008]
一种基于simd的sm3并行数据加密运算方法,包括以下过程:
[0009]
获取多条待处理数据;
[0010]
如果各条待处理数据等长,对待处理的数据进行分组,每组的长度相同,分组执行cf函数运算;
[0011]
在完成多轮cf函数运算后,对最后的分组进行判断,如果数据长度如果小于或等于第一阈值,则将代表数据长度的比特串放入当前分组的末尾,进行最后一轮cf函数运算;如果数据长度大于第一阈值,则先对当前分组进行cf函数运算,将代表长度的比特串放入下一分组再进行cf函数运算,直至得到最终的运算结果。
[0012]
进一步的,获取多条待处理数据;
[0013]
如果各条待处理数据不等长,获取最长数据的长度;
[0014]
初始化每条数据的哈希值;
[0015]
对数据进行分组,将分组后的数据放入消息分块;
[0016]
判断每个消息分块是否被填满,如果未被填满且结果集中没有此条数据的哈希值,则执行单路cf函数运算,运算完成后将哈希值放入结果集中;
[0017]
如果消息分块被填满,则执行并行cf函数运算,结束后执行下一轮运算。
[0018]
进一步的,当待处理数据为八条时,cf函数运算,至少包括:
[0019]
定义共计十六个个无符号32位整型数组,定义132个__m256i类型临时变量;
[0020]
对每个分组进行第一步消息扩展,并对在前的多组数据进行装载,将其放入对应的_m256i类型临时变量中;
[0021]
利用_mm256_xor_si256指令并行进行第二步和第三步的消息扩展,同时完成八条数据的消息扩展。
[0022]
更进一步的,定义八个可容纳八个元素的无符号32位整型的临时数组,用于存放a、b、c、d、e、f、g和h字寄存器;
[0023]
定义八个__m256i类型临时变量da、db、dc、dd、de、df、dg和dh,用于进行字寄存器的并行运算;
[0024]
将八条数据的hash值放入临时数组并进行寄存器的装载;
[0025]
对八个字寄存器执行轮函数运算;
[0026]
将轮函数运算后的字寄存器da、db、dc、dd、de、df、dg和dh进行组装,分别放入定义的八个符号32位整型的临时数组中;
[0027]
将存有运算结果的八个临时数组与八条数据的哈希值进行异或,得到本轮运算的结果。
[0028]
更进一步的,进行寄存器的装载后,先对轮函数运算所需的tt值进行预处理,再对ff函数及gg函数进行拆分,分为前16轮及后48轮两组。
[0029]
更进一步的,对八个字寄存器执行轮函数运算,分前16轮及后48轮执行,运算中的参数皆为__m256i类型,使用simd操作代替异或或者加法操作。
[0030]
更进一步的,第一步消息扩展产生16组(共128条)数据,再使用132个_m256i向量进行消息扩展第二步和第三步的运算,同时将八组数据扩展为1056条。
[0031]
本公开第二方面提供了一种基于simd的sm3并行数据加密运算系统。
[0032]
一种基于simd的sm3并行数据加密运算系统,包括:
[0033]
数据获取模块,被配置为:获取多条待处理数据;
[0034]
数据分组模块,被配置为:如果各条待处理数据等长,对待处理的数据进行分组,每组的长度相同,分组执行cf函数运算;
[0035]
cf函数运算模块,被配置为:在完成多轮cf函数运算后,对最后的分组进行判断,如果数据长度如果小于或等于第一阈值,则将代表数据长度的比特串放入当前分组的末尾,进行最后一轮cf函数运算;如果数据长度大于第一阈值,则先对当前分组进行cf函数运算,将代表长度的比特串放入下一分组再进行cf函数运算,直至得到最终的运算结果。
[0036]
本公开第三方面提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开第一方面所述的基于simd的sm3并行数据加密运算方法中的步骤。
[0037]
本公开第四方面提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开第一方面所述的基于simd的sm3并行数据加密运算方法中的步骤。
[0038]
与现有技术相比,本公开的有益效果是:
[0039]
1、本公开所述的方法、系统、介质或电子设备,定义16个可容纳8个元素的数组来
存储第一步消息扩展所产生的16*8条数据,再使用68 64个__m256i向量进行消息扩展第二、三步的运算,同时将8条数据扩展为8*132条,使数据在保持数据具有hash依赖的情况下实现多路并行运算,既保证了运算结果的正确性,又提高了性能。
[0040]
2、本公开所述的方法、系统、介质或电子设备,对8条数据全部采取向量化进行并行运算,在使用simd进行加速时,并行数据可分为等长与不等长,在8条数据等长情况下,数据吞吐率达到最高,最快可达单路实现的3

4倍。而对于各数据长度相差不大的不等长数据,也可以将吞吐率提高到单路实现的2倍以上。
附图说明
[0041]
构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。
[0042]
图1为背景技术中提供的杂凑函数的单路实现方式示意图。
[0043]
图2为本公开实施例1提供的基于simd的sm3并行数据加密运算的流程示意图。
具体实施方式
[0044]
下面结合附图与实施例对本公开作进一步说明。
[0045]
应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。
[0046]
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0047]
在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
[0048]
实施例1:
[0049]
如图1所示,本公开实施例1提供了一种基于simd的sm3并行数据加密运算方法,包括以下过程:
[0050]
获取多条待处理数据;
[0051]
如果各条待处理数据等长,对待处理的数据进行分组,每组的长度相同,分组执行cf函数运算;
[0052]
在完成多轮cf函数运算后,对最后的分组进行判断,如果数据长度如果小于或等于第一阈值,则将代表数据长度的比特串放入当前分组的末尾,进行最后一轮cf函数运算;如果数据长度大于第一阈值,则先对当前分组进行cf函数运算,将代表长度的比特串放入下一分组再进行cf函数运算,直至得到最终的运算结果
[0053]
具体的,包括以下过程:
[0054]
s1:提前定义运算所需要的临时变量。
[0055]
s1.1:u32i为32位无符号整型变量。
[0056]
s1.2:_fsm3_align为强制字节对齐函数,用于内存中数据的字节对齐。
[0057]
定义messageblock_1、messageblock_2、messageblock_3、messageblock_4、
messageblock_5、messageblock_6、messageblock_7、messageblock_8为静态无符号字符型数组,每个长度为64字节,同时对其进行强制字节对齐操作
[0058]
定义hash_1、hash_2、hash_3、hash_4、hash_5、hash_6、hash_7、hash_8为静态无符号整型数组,每个长度为32字节,可容纳8个元素,且初始值为0,同时对其进行强制字节对齐操作。
[0059]
s2:获取输入的8条数据及其长度,并初始化8组数据的hash值,其初始值为:
[0060]
{0x7380166f,0x4914b2b9,0x172442d7,0xda8a0600,0xa96f30bc,0x163138aa,0xe38dee4d,0xb0fb0e4e}
[0061]
s3:对传入数据分别进行分组,并传入数据,每组长为64字节。
[0062]
从消息源0中提取64字节数据放入消息分组messageblock_1中;
[0063]
从消息源1中提取64字节数据放入消息分组messageblock_2中;
[0064]
从消息源2中提取64字节数据放入消息分组messageblock_3中;
[0065]
从消息源3中提取64字节数据放入消息分组messageblock_4中;
[0066]
从消息源4中提取64字节数据放入消息分组messageblock_5中;
[0067]
从消息源5中提取64字节数据放入消息分组messageblock_6中;
[0068]
从消息源6中提取64字节数据放入消息分组messageblock_7中;
[0069]
从消息源7中提取64字节数据放入消息分组messageblock_8中。
[0070]
s4:对分组数据执行cf函数,分别传入每个填充好的分组及其对应的hash值,以下s6
···
s15步为cf函数的具体执行过程。
[0071]
s5:定义w0[8]

w15[8]共计16个32位无符号整型数组,定义w0g

w67g及w_0g

w_63g共计132个__m256i类型临时变量。
[0072]
s6:手动对每个分组进行第一步消息扩展,并对0

15组数据进行装载,将其放入上一步所定义的对应的_m256i类型临时变量中。
[0073]
将messageblock_1的前4字节数据放入w0数组的第0位;
[0074]
将messageblock_1的第4至第7字节数据放入w1数组的第0位;
[0075]
将messageblock_1的第8至第11字节数据放入w2数组的第0位;
[0076]
将messageblock_1的第12至第15字节数据放入w3数组的第0位;
[0077]
···
[0078]
将messageblock_1的第60至第64字节数据放入w15数组的第0位;
[0079]
将messageblock_2的前4字节数据放入w0数组的第1位;
[0080]
···
[0081]
将messageblock_2的第60至第64字节数据放入w15数组的第1位;
[0082]
···
[0083]
将messageblock_8的第56至第59字节数据放入w14数组的第7位;
[0084]
将messageblock_8的第60至第64字节数据放入w15数组的第7位;
[0085]
将w0数组强制转换为__m256i类型并装载至w0g寄存器中;
[0086]
将w1数组强制转换为__m256i类型并装载至w1g寄存器中;
[0087]
···
[0088]
将w15数组强制转换为__m256i类型并装载至w15g寄存器中。
[0089]
s7:利用_mm256_xor_si256指令并行进行第二、三步的消息扩展,同时完成8条数据的消息扩展。
[0090]
将w0g与w7g相异或的值与w13g循环左移15位的值相异或,之后放入p1函数中进行运算,所得的值与w3g循环左移7位的值进行异或,再将得数与w10g进行异或,最终得出w16g的值;
[0091]
将w1g与w8g相异或的值与w14g循环左移15位的值相异或,之后放入p1函数中进行运算,所得的值与w4g循环左移7位的值进行异或,再将得数与w11g进行异或,最终得出w17g的值;
[0092]
···
[0093]
将w51g与w58g相异或的值与w64g循环左移15位的值相异或,之后放入p1函数中进行运算,所得的值与w54g循环左移7位的值进行异或,再将得数与w61g进行异或,最终得出w64g的值;
[0094]
将w0g与w4g相异或,得出w_0g的值;
[0095]
将w1g与w5g相异或,得出w_1g的值;
[0096]
···
[0097]
将w62g与w66g相异或,得出w_62g的值;
[0098]
将w63g与w67g相异或,得出w_63g的值;
[0099]
s8:定义savea、saveb、savec、saved、savee、savef、saveg、saveh为无符号32位整型的临时数组,每个可容纳8个元素,同时对其进行强制字节对齐操作,用于存放a、b、c、d、e、f、g、h字寄存器。
[0100]
s9:定义8个__m256i类型临时变量da,db,dc,dd,de,df,dg,dh,用于进行字寄存器的并行运算,定义_m256i类型的ss1、ss2、tt2临时变量,用于后续的轮函数运算。
[0101]
s10:将8条数据的hash值放入临时数组并进行寄存器的装载。
[0102]
将数组hash_1至hash_8的第0个元素(共8个)按顺序放入数组savea中;
[0103]
将数组hash_1至hash_8的第1个元素(共8个)按顺序放入数组saveb中;
[0104]
将数组hash_1至hash_8的第2个元素(共8个)按顺序放入数组savec中;
[0105]
将数组hash_1至hash_8的第3个元素(共8个)按顺序放入数组saved中;
[0106]
将数组hash_1至hash_8的第4个元素(共8个)按顺序放入数组savee中;
[0107]
将数组hash_1至hash_8的第5个元素(共8个)按顺序放入数组savef中;
[0108]
将数组hash_1至hash_8的第6个元素(共8个)按顺序放入数组saveg中;
[0109]
将数组hash_1至hash_8的第7个元素(共8个)按顺序放入数组saveh中;
[0110]
将数组savea、saveb、savec、saved、savee、savef、saveg、saveh强制转换位__m256i类型并分别装载入da、db、dc、dd、de、df、dg、dh寄存器中。
[0111]
s11:对轮函数运算所需的tt值进行预处理,减少程序运行中不必要的计算。其内容为:
[0112]
const unsigned int tt[64]={0x79cc4519,0xf3988a32,0xe7311465,0xce6228cb,0x9cc45197,0x3988a32f,0x7311465e,0xe6228cbc,0xcc451979,0x988a32f3,0x311465e7,0x6228cbce,0xc451979c,0x88a32f39,0x11465e73,0x228cbce6,0x9d8a7a87,0x3b14f50f,0x7629ea1e,0xec53d43c,0xd8a7a879,0xb14f50f3,0x629ea1e7,0xc53d43ce,
0x8a7a879d,0x14f50f3b,0x29ea1e76,0x53d43cec,0xa7a879d8,0x4f50f3b1,0x9ea1e762,0x3d43cec5,0x7a879d8a,0xf50f3b14,0xea1e7629,0xd43cec53,0xa879d8a7,0x50f3b14f,0xa1e7629e,0x43cec53d,0x879d8a7a,0xf3b14f5,0x1e7629ea,0x3cec53d4,0x79d8a7a8,0xf3b14f50,0xe7629ea1,0xcec53d43,0x9d8a7a87,0x3b14f50f,0x7629ea1e,0xec53d43c,0xd8a7a879,0xb14f50f3,0x629ea1e7,0xc53d43ce,0x8a7a879d,0x14f50f3b,0x29ea1e76,0x53d43cec,0xa7a879d8,0x4f50f3b1,0x9ea1e762,0x3d43cec5};
[0113]
s12:对ff及gg函数进行拆分,分为前16轮及后48轮两组,避免运算中的if判断。
[0114]
s12.1:ff函数拆分为ffj1与ffj2
[0115]
将寄存器x的值与寄存器y的值相异或,再与寄存器z的值相异或,得出ffj1的值;
[0116]
将寄存器x与寄存器y相与的值,和寄存器x与寄存器z相与的值,将寄存器y与寄存器z相与的值,进行或操作,得出ffj2的值。
[0117]
s12.2:gg函数拆分为ggj1与ggj2
[0118]
函数ggj1,参数为x、y、z,返回值为__m256i;
[0119]
将寄存器x的值与寄存器y的值相异或,再与寄存器z的值相异或,得出ggj1的值;
[0120]
函数ggj2,参数为x、y、z,返回值为__m256i;
[0121]
将寄存器x与寄存器y想与的值,和寄存器x按位取反与寄存器z相与的值,进行或操作,得出ggj2的值。
[0122]
s13:对8个字寄存器执行轮函数运算,分前16轮及后48轮执行,其运算中的参数皆为__m256i类型,使用_mm256_xor_si256、_mm256_add_epi32及_mm256_set1_epi32等simd操作代替普通的异或、加法等运算。
[0123]
s13.1:前16轮运算为
[0124]
轮函数1(参数为a,b,c,d,e,f,g,h,i,w,w1,movelefttemp)返回值为__m256i;
[0125]
movelefttemp的值为寄存器a循环左移12位;
[0126]
dss1的值为tempmoveleft加寄存器e加sm3_tj的第[i]个元素的值,循环左移7位;
[0127]
dds2的值为dss1的值异或tempmoveleft的值;
[0128]
d的值为寄存器a、b、c放入ffj1函数运算后与寄存器d、dss2、w1相加;
[0129]
dtt2的值为寄存器e、f、g放入gjj1函数运算后与寄存器h、dss1、w相加;
[0130]
b的值为寄存器b循环左移9位;
[0131]
f的值为寄存器f循环左移19位;
[0132]
h的值为tt2放入函数p0计算得出的值。
[0133]
s13.2:后48轮运算为
[0134]
轮函数2参数为(a,b,c,d,e,f,g,h,i,w,w1,movelefttemp)返回值为__m256i;
[0135]
movelefttemp的值为寄存器a循环左移12位;
[0136]
dss1的值为movelefttemp加寄存器e加sm3_tj的第[i]个元素的值,并循环左移7位;
[0137]
dss2的值为dss1异或movelefttemp;
[0138]
d的值为寄存器a、b、c放入ffj2函数运算后与寄存器d、dss2、w1相加;
[0139]
dtt2的值为寄存器e、f、g放入gjj2函数运算后与寄存器h、dss1、w1相加;
[0140]
b的值为寄存器b循环左移9位;
[0141]
f的值为寄存器f循环左移19位;
[0142]
h的值为dtt2放入p0函数计算得出的值。
[0143]
s13.3:其中p0为:
[0144]
函数p0,参数为x,返回值为__m256i;
[0145]
p0的值为寄存器x与寄存器x循环左移9位后的值相异或,再与寄存器x循环左移17位后的值相异或;
[0146]
p0(x)_mm256_xor_si256(_mm256_xor_si256(x,moveleft(x,9)),moveleft(x,17))。
[0147]
s13.4:其中p1为:
[0148]
函数p1,参数为x,返回值为__m256i;
[0149]
p1的值为寄存器x与寄存器x循环左移15位后的值相异或,再与寄存器x循环左移23位后的值相异或。
[0150]
p1(x)_mm256_xor_si256(_mm256_xor_si256(x,moveleft(x,15)),moveleft(x,23))
[0151]
s14:将运算后的字寄存器da、db、dc、dd、de、df、dg和dh进行组装,放入s8中所定义的8个数组中。
[0152]
s15:将存有运算结果的8个数组与8条数据的hash值进行异或,计算出本轮运算的结果。
[0153]
数组hash_1至hash_8的第0个元素分别于savea的第0至第7元素异或;
[0154]
数组hash_1至hash_8的第1个元素分别于saveb的第0至第7元素异或;
[0155]
数组hash_1至hash_8的第2个元素分别于savec的第0至第7元素异或;
[0156]
数组hash_1至hash_8的第3个元素分别于saved的第0至第7元素异或;
[0157]
数组hash_1至hash_8的第4个元素分别于savee的第0至第7元素异或;
[0158]
数组hash_1至hash_8的第5个元素分别于savef的第0至第7元素异或;
[0159]
数组hash_1至hash_8的第6个元素分别于saveg的第0至第7元素异或;
[0160]
数组hash_1至hash_8的第7个元素分别于saveh的第0至第7元素异或。
[0161]
s16:在完成若干轮6

16步的cf函数运算后,对最后的分组进行判断,其数据长度如果小于等于55字节,则将代表数据长度的比特串放入当前分组的末尾,进行最后一轮cf函数运算。如果数据长度大于55字节,则先对当前分组进行cf函数运算,将代表长度的比特串放入下一分组再进行cf函数运算。
[0162]
s17:运算完成后返回并输出运算结果。
[0163]
在各条数据不等长时,包括以下过程:
[0164]
(1)输入数据,并获取最长数据的长度maxlength。
[0165]
(2)初始化每条数据的hash值。
[0166]
(3)对数据进行分组,每组64字节,共maxlength/64组。
[0167]
(4)将数据放入消息分块。
[0168]
(5)判断每个消息分块是否被填满,如果未被填满且结果集中没有此条数据的hash值,则对齐执行单路cf函数,运算完成后将hash值放入结果集中,如果分组被填满,则执行并行cf函数,结束后执行下一轮运算。
[0169]
实施例2:
[0170]
本公开实施例2提供了一种基于simd的sm3并行数据加密运算系统,包括:
[0171]
数据获取模块,被配置为:获取多条待处理数据;
[0172]
数据分组模块,被配置为:如果各条待处理数据等长,对待处理的数据进行分组,每组的长度相同,分组执行cf函数运算;
[0173]
cf函数运算模块,被配置为:在完成多轮cf函数运算后,对最后的分组进行判断,如果数据长度如果小于或等于第一阈值,则将代表数据长度的比特串放入当前分组的末尾,进行最后一轮cf函数运算;如果数据长度大于第一阈值,则先对当前分组进行cf函数运算,将代表长度的比特串放入下一分组再进行cf函数运算,直至得到最终的运算结果。
[0174]
所述系统的工作方法与实施例1提供的基于simd的sm3并行数据加密运算方法相同,这里不再赘述。
[0175]
实施例3:
[0176]
本公开实施例3提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开实施例1所述的基于simd的sm3并行数据加密运算方法中的步骤。
[0177]
实施例4:
[0178]
本公开实施例4提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开实施例1所述的基于simd的sm3并行数据加密运算方法中的步骤。
[0179]
本领域内的技术人员应明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
[0180]
本公开是参照根据本公开实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0181]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0182]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0183]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁
碟、光盘、只读存储记忆体(read

only memory,rom)或随机存储记忆体(random accessmemory,ram)等。
[0184]
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献