我最近正在读这,它说:
不认为复杂的代码比简单的代码快.
代码被复制如下:
例子,好的
// clear expression of intent, fast execution
vector<uint8_t> v(100000);
for (auto& c : v)
c = ~c;示例,坏
// intended to be faster, but is often slower
vector<uint8_t> v(100000);
for (size_t i = 0; i < v.size(); i += sizeof(uint64_t)) {
uint64_t& quad_word = *reinterpret_cast<uint64_t*>(&v[i]);
quad_word = ~quad_word;
}我不知道这个坏例子的目的是什么,为什么打算使更快
为什么它是,事实上,通常速度较慢的
发布于 2021-02-24 07:36:52
编译器将尝试通过一次使用SIMD指令( x86-64上的SSE/AVX,其他平台上的其他操作)执行多个操作来向量化操作。
通过使用uint64_t手动向量化,您可以让编译器同时执行8项操作,您认为这是调试构建中的一个改进,但可能会阻止编译器同时执行更多操作(例如,使用SSE2 16次,用AVX2 32次,用AVX512 64次),您认为发布速度较慢。
发布于 2020-08-06 02:47:50
通过将指针转换为64位整数并对该整数执行按位操作,可以将C++代码执行的操作数减少8倍,也就是说,假设性能取决于用C++代码编写的操作数。
https://stackoverflow.com/questions/63276055
复制相似问题