用c++编程求浮点寄存器的个数
find number of floating point register programmaticaly in c++
我正在研究并行算法优化(稀疏矩阵)和寄存器阻塞。我想找到机器中可用的寄存器的数量和类型(特别是浮点寄存器和其他寄存器),以便根据可用的寄存器调整我的代码,并使其独立于平台。在c++中有什么方法可以做到这一点吗?
谢谢。mjr
一般来说,编译器确实知道这类东西(以及如何最好地使用它),所以我有点惊讶于你认为你可以智胜编译器——除非我有很高的领域知识,并开始编写汇编代码,否则我很少智胜编译器。
由于编写汇编代码是非常不可移植的,我认为这不算是使用寄存器数量等知识优化代码的解决方案。很难知道编译器是如何使用寄存器的。如果以int x = y + z;
为例,它需要多少个寄存器?这取决于编译器-它可以不使用、一个、两个、三个、四个、五个或六个,而不会低于最佳寄存器使用率-这完全取决于编译器决定如何处理事情、机器体系结构、变量存储的位置/方式等。如果我们将int
更改为double
,同样的原理也适用于浮点寄存器的数量。没有明显的方法来判断这个语句中使用了多少寄存器(尽管我怀疑不超过三个——然而,它可能是零或一,这取决于编译器决定做什么)。
如果你知道处理器体系结构以及编译器如何处理某些类型的代码,那么可能会做一些巧妙的技巧——但这也假设编译器在下一个版本中不会改变其行为。但如果你知道它是什么处理器体系结构,那么你也知道各种寄存器的数量。。。
恐怕没有简单的可移植解决方案。
有许多因素可以影响给定计算机的最佳块大小。发现良好配置的一种方法是自动运行一系列基准测试,并在运行时使用结果来调优代码。
另一种方法是根据一些基准测试的结果自动调整源代码。这就是自动调谐线性代数软件(ATLAS)所做的。
- 本质:使用__128寄存器
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 使用英特尔 PIN 修改寄存器
- AVX 指令中寄存器和指针之间的客观差异
- 如何确定我的处理器有多少个 AVX 寄存器?
- 除非使用某些寄存器,否则函数挂钩会崩溃
- 寄存器上的管道计算
- 其中关于内存和寄存器的左值和右值
- 有没有办法强制C++编译器将变量存储在寄存器中?
- "变量":函数中函数作用域不允许初始化的自动或寄存器变量'naked'
- Atmel Studio:返回一个包含数组的寄存器
- 使用 googletest 测试嵌入式C++代码时处理外设寄存器的重复符号
- 移位寄存器74HC595输出电流
- 超过255的Modbus寄存器无法访问SimpleModbus
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- xmm 寄存器中的__m128何时?
- 是否可以在 GCC 中使用带有 C++17 的显式寄存器变量?
- 处理器寄存器的大小是多少,有多少个处理器寄存器?
- 使用 Windows 寄存器查找下一个"Daylight Saving Time"