相关疑难解决方法(0)

为什么无符号类型在arm cpu中效率更高?

我正在阅读手册并提出这个建议,但没有提到原因.

为什么无符号类型更快?

arm

10
推荐指数
1
解决办法
1454
查看次数

当A是无符号vs有符号时,为什么A/<constant-int>更快?

我一直在阅读优化C++ wikibook.在更快的操作章节中,其中一条建议如下:

整数除以常数

将整数(已知为正或零)除以常量时,将整数转换为无符号.

如果s是有符号整数,则u是无符号整数,C是常数整数表达式(正或负),操作s/C比u/C慢,s%C慢于u%C.当C是2的幂时,最重要的是,但在所有情况下,在分割期间必须考虑符号.

然而,从有符号到无符号的转换是免费的,因为它只是对相同位的重新解释.因此,如果s是有符号整数,您知道它是正数或零,则可以使用以下(等效)表达式加速其除法:(无符号)s/C和(无符号)s%C.

我用gcc测试了这个语句,u / C表达式似乎始终优于s / c

下面还提供了以下示例:

#include <iostream>
#include <chrono>
#include <cstdlib>
#include <vector>
#include <numeric>

using namespace std;

int main(int argc, char *argv[])
{

    constexpr int vsize = 1e6;
    std::vector<int> x(vsize);
    std::iota(std::begin(x), std::end(x), 0); //0 is the starting number

    constexpr int a = 5;

  auto start_signed = std::chrono::system_clock::now();
  int sum_signed = 0;
    for ([[gnu::unused]] auto  i : x)
    {
        // signed is by default
        int v …
Run Code Online (Sandbox Code Playgroud)

c++ optimization

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

标签 统计

arm ×1

c++ ×1

optimization ×1