首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++核心指南Per.4中,为什么坏的示例要更快一些?

在C++核心指南Per.4中,为什么坏的示例要更快一些?
EN

Stack Overflow用户
提问于 2020-08-06 02:37:15
回答 2查看 188关注 0票数 5

我最近正在读,它说:

不认为复杂的代码比简单的代码快.

代码被复制如下:

例子,好的

代码语言:javascript
复制
// clear expression of intent, fast execution

vector<uint8_t> v(100000);

for (auto& c : v)
    c = ~c;

示例,坏

代码语言:javascript
复制
// 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;
}

我不知道这个坏例子的目的是什么,为什么打算使更快

为什么它是,事实上,通常速度较慢的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-24 07:36:52

编译器将尝试通过一次使用SIMD指令( x86-64上的SSE/AVX,其他平台上的其他操作)执行多个操作来向量化操作。

通过使用uint64_t手动向量化,您可以让编译器同时执行8项操作,您认为这是调试构建中的一个改进,但可能会阻止编译器同时执行更多操作(例如,使用SSE2 16次,用AVX2 32次,用AVX512 64次),您认为发布速度较慢。

票数 3
EN

Stack Overflow用户

发布于 2020-08-06 02:47:50

通过将指针转换为64位整数并对该整数执行按位操作,可以将C++代码执行的操作数减少8倍,也就是说,假设性能取决于用C++代码编写的操作数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63276055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档