相关疑难解决方法(0)

是否有任何架构将相同的寄存器空间用于标量整数和浮点运算?

我见过的大多数支持本机标量硬件FP的体系结构都将它们推到了一个与主寄存器组分开的完全独立的寄存器空间中。

我见过的大多数支持本机标量硬件FP的体系结构都将它们推到了一个与主寄存器组分开的完全独立的寄存器空间中。

  • X86的遗产的x87 FPU使用部分地分离浮点“堆机”(读:基本上是固定大小的8项环形缓冲器)与寄存器st(0)通过st(7)索引的每个项目。这可能是最流行的区别。它只能通过加载/存储到内存或将比较结果发送到EFLAGS与其他寄存器进行交互。(286 fnstsw ax和i686 fcomi)。
  • 启用FPU的ARM具有一个单独的FP寄存器空间,其工作空间与其整数空间相似。主要区别是专用于浮点的单独指令集,但即使是惯用语也大多对齐。
  • MIPS介于两者之间,因为浮点在技​​术上是通过协处理器完成的(至少是可见的),并且在使用方面有一些略有不同的规则(例如使用两个浮点寄存器而不是单个扩展寄存器的双精度),但是它们在其他方面却相当有效与ARM类似。
  • X86的更新的SSE标量指令使用相似的助记符和惯用法与矢量指令相似地工作。它可以自由加载和存储标准的寄存器和存储器,并且可以使用64位内存引用作为操作数为许多标量运算喜欢addsd xmm1, m64subsd xmm1, m64,但你只能加载和存储,通过寄存器movq xmm1, r/m64movq r/m64, xmm1和朋友。这与ARM64 NEON相似,尽管它与ARM的标准标量指令集略有不同。

相反,许多矢量化指令甚至都不会为这种区别而烦恼,只是在标量和矢量之间作了区分。对于x86,ARM和MIPS,全部三个:

  • 它们将标量和向量寄存器空间分开。
  • 它们将相同的寄存器空间重新用于矢量化的整数和浮点运算。
  • 他们仍然可以访问整数堆栈(如果适用)。
  • 标量运算只是从相关的寄存器空间(或在x86 FP常量的情况下为内存)中提取其标量。

但是我想知道:是否有CPU体系结构将相同的寄存器空间重用于整数和浮点运算?

如果不是这样(由于兼容性之外的原因),是什么会阻止硬件设计人员选择走这条路?

cpu-architecture cpu-registers

5
推荐指数
2
解决办法
501
查看次数

浮点数与定点数:Intel I5 CPU上的速度

我有一个C/C++程序,它涉及密集的32位浮点矩阵数学计算,如加法,减法,乘法,除法等.

我可以通过将32位浮点数转换为16位定点数来加速我的程序吗?我可以获得多少速度增益?

目前我正在研究Intel I5 CPU.我正在使用Openblas来执行矩阵计算.我应该如何重新实现openblas函数(如cblas_dgemm)来执行定点计算?

我知道SSE(简单SIMD扩展)一次运行4x32 = 8x16 = 128位数据,即4个32位浮点类型或8个16位定点类型.我想在从32位浮点转换为16位定点后,我的程序会快两倍.

performance sse simd matrix openblas

4
推荐指数
1
解决办法
2237
查看次数