用c++编程求浮点寄存器的个数

find number of floating point register programmaticaly in c++

本文关键字:寄存器 c++ 编程      更新时间:2023-10-16

我正在研究并行算法优化(稀疏矩阵)和寄存器阻塞。我想找到机器中可用的寄存器的数量和类型(特别是浮点寄存器和其他寄存器),以便根据可用的寄存器调整我的代码,并使其独立于平台。在c++中有什么方法可以做到这一点吗?

谢谢。mjr

一般来说,编译器确实知道这类东西(以及如何最好地使用它),所以我有点惊讶于你认为你可以智胜编译器——除非我有很高的领域知识,并开始编写汇编代码,否则我很少智胜编译器。

由于编写汇编代码是非常不可移植的,我认为这不算是使用寄存器数量等知识优化代码的解决方案。很难知道编译器是如何使用寄存器的。如果以int x = y + z;为例,它需要多少个寄存器?这取决于编译器-它可以不使用、一个、两个、三个、四个、五个或六个,而不会低于最佳寄存器使用率-这完全取决于编译器决定如何处理事情、机器体系结构、变量存储的位置/方式等。如果我们将int更改为double,同样的原理也适用于浮点寄存器的数量。没有明显的方法来判断这个语句中使用了多少寄存器(尽管我怀疑不超过三个——然而,它可能是零或一,这取决于编译器决定做什么)。

如果你知道处理器体系结构以及编译器如何处理某些类型的代码,那么可能会做一些巧妙的技巧——但这也假设编译器在下一个版本中不会改变其行为。但如果你知道它是什么处理器体系结构,那么你也知道各种寄存器的数量。。。

恐怕没有简单的可移植解决方案。

有许多因素可以影响给定计算机的最佳块大小。发现良好配置的一种方法是自动运行一系列基准测试,并在运行时使用结果来调优代码。

另一种方法是根据一些基准测试的结果自动调整源代码。这就是自动调谐线性代数软件(ATLAS)所做的。