gpt4 book ai didi

c++ - 更快的二进制加法 C++

转载 作者:行者123 更新时间:2023-11-30 01:58:53 26 4
gpt4 key购买 nike

我想提高当前二进制加法问题的速度。它所做的是创建 2 个大小为 K 的 vector ,并在第一个 vector 上加 1。也许它不会更快,但如果可能的话请告诉我。

编辑:修改为改变 const vector& a, const vector& b

#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <vector>

using namespace std;

vector<int> BinaryAddition(const vector<int>& a, const vector<int>& b, int tam){
vector<int> c(tam);
int ac = 0;

for(int i=tam-1; i>-1; i--){
c[i] = ((a[i] ^ b[i]) ^ ac); //a xor b xor c
ac = ((a[i] & b[i]) | (a[i] &ac)) | (b[i] & ac);
}

return c;
}

/* retorna "a - b" en segundos */
double performancecounter_diff(LARGE_INTEGER *a, LARGE_INTEGER *b)
{
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
return (double)(a->QuadPart - b->QuadPart) / (double)freq.QuadPart;
}

int main(int argc, char *argv[])
{
LARGE_INTEGER t_ini, t_fin;
double secs;

QueryPerformanceCounter(&t_ini);

int k=15;

vector<int> uno1 (k,0);
vector<int> pro (k,0);
vector<int> pro1(k,0);

uno1[k-1] = 1;

pro1 = BinaryAddition(pro, uno1, k);

QueryPerformanceCounter(&t_fin);

secs = performancecounter_diff(&t_fin, &t_ini);
printf("%.16g milliseconds\n", secs * 1000.0);

return 0;
}

最佳答案

首先,这个:

vector<int> BinaryAddition(vector<int> a, vector<int> b, int tam)

应该是:

vector<int> BinaryAddition(const vector<int>& a, const vector<int>& b, int tam)

您无缘无故地复制输入参数 vector ,通过引用而不是按值传递它们,这需要复制。

另一个可以提高速度的方法是一种叫做 loop unwinding (or unrolling) 的简单技术。这当然不会使您的代码更具可读性或更漂亮,但实际上可能会加快它的速度 - 但请将它与使用最大优化(通常是编译器选项 -O3)编译的简单版本进行比较,因为它您的编译器可能已经进行了相同的优化(或不同的优化,效果更好)。

关于c++ - 更快的二进制加法 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16709210/

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