1.说明
在研究RISC-V的指令集的时候,其指令是模块化的,这就为其指令的扩展提供了更多的可能性。下面仅代表我对RISC V的P扩展指令的一些理解。
按照指令集的设计,其扩展分为基础指令和扩展指令部分。基础指令是必须实现的,扩展指令则可根据需求进行定制。
根据The RISC-V Instruction Set Manual版本为20191213的pdf来看,对P扩展的介绍并不多。
其描述也只有一段话,目前官方并未做出更多的描述,不过在GitHub上对P扩展有了更加详细的表述。
也就是P指令的扩展实际的作用是增加了RISC-V CPU IP产品的DSP算法处理能力。
通过对RISC-V指令的P扩展,可以以更低的功耗和更加高的性能运行这些DSP的应用程序。
2.P扩展与V扩展的差别
通过上述的理解来看,P扩展的官方描述Packed-SIMD Instructions,那么和V扩展代表的向量指令集有什么差异呢。
V扩展,向量计算会更加趋向于高效的处理音频和视频,以更低的功耗,更快的处理速度,更加简单的方式去处理图像、视频、音频等,大大提高处理器的性能。比较典型的应用比如流媒体,MPEG4和H264的编解码,语音识别和手写识别,FFT处理,复杂的计算等等。
P扩展,数字信号处理(DSP),更多的去处理一些特殊领域的计算,比如嵌入式中的MP3解码,伺服电机,嵌入式实时控制等。
虽然两种都是为了加速计算,用多媒体指令集来实现CPU处理吃力的计算功能,但是在应用领域也是有一些区别。
3.P扩展指令的实例简单解析
简单解释一下这里如何通过指令加速计算。
在文档的8-bit Addition & Subtraction Instructions中描述如下:
No.MnemonicInstructionOperation
1ADD8 rt, ra, rb8-bit Additionrt.B[x] = ra.B[x] + rb.B[x]; (RV32: x=3..0, RV64: x=7..0)
该指令是一份简单8位的加法,实际上调用该指令的时候,需要传递两个输入源,和输出结果。
因为是ADD8,所以以8bit相加,结果也是8bit。在C语言中定义为unsigned char。
比如定义一个unsigned char数组a1={1,2,3,4}。另外一个数组a1={2,3,4,5}。
那么把这两个数组通过ADD8指令相加,则得到ret={2,5,7,9}。
实现这个过程,如果用普通的计算方法计算,需要CPU的4个时钟才能完成这个过程,而如果采用RISC-V的P扩展指令进行计算,则只需要一个时钟周期便可完成。这样可以加速计算,降低功能,同时降低CPU的使用率。
编辑:lyn
全部0条评论
快来发表一下你的评论吧 !