gpt4 book ai didi

c++ - 将 bitset 成员函数 count 的输出放入 vector 中很慢

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:07 28 4
gpt4 key购买 nike

这是我的 C++ 代码中有问题的部分:

std::bitset<64>a;
std::bitset<64>b;
std::bitset<64>c;
int bit_count=0;
std::vector<int> vec(SIZE,0);
for (i=1;i<NUM;i++)
{
// I do here some operations on a and b (a and b will have bits that are set)
c=a^b;
bit_count=(int) c.count(); // LINE 1
vec[i]=bit_count; // LINE2 2
}

我的问题如下:

  1. 如果我评论第 1 行和第 2 行,代码大约会运行。 109毫秒;
  2. 如果我只评论 LINE2,代码运行大约。在 115 毫秒内;
  3. 如果我注释 LINE 1 和 bit_count=0,代码运行大约 130 毫秒;
  4. 如果两行(第 1 行和第 2 行)都没有注释,则代码运行时间约为。 350 毫秒。

为什么我使用 LINE1 和 LINE2 时代码很慢?我找不到任何可接受的解释。

请注意,我也尝试了 vec.push_back(bit_count),它也很慢。我也尝试了不同的转换操作,但均未成功。

最佳答案

在情况 2 中,编译器可能无法完全计算 bit_count,因为它从未被使用过(例如,它可能会执行 XOR 而不是计数)

在情况 3 中,您只有作业

只有在情况 4 中,bit_count(相当昂贵)才需要执行。

(编辑以澄清:如果您从不使用 vec,它可能仍会丢弃整个循环。但它不必这样做)


补充信息:

编译器只需要保留可观察到的行为,定义为

  • 访问可变对象
  • 输入输出(包括文件)
  • 调用“未知”代码(例如外部库)

标准措辞当然更复杂,this question有一些额外的讨论。

我一直觉得观察您的编译器是一项有趣的练习。大多数允许启用反汇编输出,带着探究的头脑和一个小时的“介绍我的处理器组装”,这样的小练习可能非常有见地

关于c++ - 将 bitset 成员函数 count 的输出放入 vector 中很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8245893/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com