<分区>
我正在研究并行算法优化(稀疏矩阵)和寄存器阻塞。我想找到机器中可用的寄存器(特别是浮点寄存器,然后是其他寄存器)的数量和类型,以便根据可用寄存器调整我的代码并使其与平台无关。有什么办法可以在 C++ 中做到这一点吗?
谢谢。 早安
<分区>
我正在研究并行算法优化(稀疏矩阵)和寄存器阻塞。我想找到机器中可用的寄存器(特别是浮点寄存器,然后是其他寄存器)的数量和类型,以便根据可用寄存器调整我的代码并使其与平台无关。有什么办法可以在 C++ 中做到这一点吗?
谢谢。 早安
最佳答案
一般来说,编译器确实知道这类东西(以及如何最好地使用它),所以我有点惊讶你认为你可以超越编译器 - 除非我有非常高的领域知识,并开始编写汇编程序代码,我很少比编译器聪明。
由于编写汇编代码是高度不可移植的,我认为这不算是使用有关多少寄存器等知识来优化代码的解决方案。很难知道编译器如何使用寄存器。如果你有 int x = y + z;
作为一个简单的例子,它需要多少个寄存器?取决于编译器——它可以不使用、一、二、三、四、五或六,而不会低于最佳寄存器使用——这完全取决于编译器决定如何处理事物、机器架构、变量在哪里/如何如果我们将 int
更改为 double
,则相同的原则适用于浮点寄存器的数量。没有明显的方法可以判断此语句中使用了多少个寄存器(尽管我怀疑不超过三个 - 但是,它可能是零或一个,具体取决于编译器决定做什么)。
如果您了解处理器体系结构以及编译器如何处理某些类型的代码,则可能会采取一些巧妙的技巧 - 但前提是编译器不会在下一个版本中更改其行为。但是如果你知道它是什么处理器架构,那么你也就知道了各种寄存器的数量……
关于c++ - 在 C++ 中以编程方式查找浮点寄存器的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171143/