64位英特尔架构中uint8_t值的比较是否比uint32_t的比较慢?

时间:2016-05-26 19:03:42

标签: c++ 64-bit

64位英特尔架构中uint8_t值的比较比uint32_t的比较慢吗?特别是在Visual Studio C ++中。

2 个答案:

答案 0 :(得分:0)

在我的机器上,它太靠近了:

#include <cstdint>
#include <vector>
#include <random>
#include <iostream>
#include <chrono>
#include <algorithm>
#include <numeric>

template<class T>
std::vector<T> generate_test_data(std::size_t seed)
{
    auto v = std::vector<T>(20000000);
    std::default_random_engine eng(seed);
    std::uniform_int_distribution<T> dist(-127, 127);
    std::generate(std::begin(v), std::end(v),
                  [&eng, &dist] {
                      return dist(eng);
                  });
    return v;
}

auto inc_if_under_zero = [](int count, auto val) {
    return (val < 0) ? count + 1 : count;
};

int main()
{
    std::random_device rd;
    auto seed = rd();
    auto int_data = generate_test_data<std::int32_t>(seed);
    auto byte_data = generate_test_data<std::int8_t>(seed);

    auto t0 = std::chrono::high_resolution_clock::now();

    auto less_zero_32 = std::accumulate(std::begin(int_data),
                                        std::end(int_data),
                                        0,
                                        inc_if_under_zero);
    auto t1 = std::chrono::high_resolution_clock::now();

    auto less_zero_8 = std::accumulate(std::begin(byte_data),
                                       std::end(byte_data),
                                       0,
                                       inc_if_under_zero);

    auto t2 = std::chrono::high_resolution_clock::now();

    auto int_time = std::chrono::duration_cast<std::chrono::microseconds>(t1-t0).count();
    auto byte_time = std::chrono::duration_cast<std::chrono::microseconds>(t2-t1).count();

    std::cout << "totals    : " << less_zero_32 << ", " << less_zero_8 << std::endl;
    std::cout << "int time  : " << int_time << "us" << std::endl;
    std::cout << "byte time : " << byte_time << "us" << std::endl;
}

结果与苹果铿锵,-O3:

totals    : 9962877, 9962877
int time  : 6644us
byte time : 6035us

可能字节时间较少,因为我们必须遍历较少的内存。

答案 1 :(得分:-3)

只有一种方法可以找到 - 编写测试程序并找出答案。

x64架构指令集实际上是一种复杂的语言,在运行时被解释为一系列更简单的指令。 x64指令集非常稳定,但这些更简单的指令因芯片而异。因此,不可能肯定地说结果是否较慢。

在实践中,如果存在明显的差异,我会感到非常惊讶。