gpt4 book ai didi

c++ - 为什么多线程不提供加速?

转载 作者:搜寻专家 更新时间:2023-10-31 01:41:01 25 4
gpt4 key购买 nike

我注意到使用这个简单的多线程示例几乎总是需要更长的时间。我只是在我制作的这段代码中对其进行测试。我在 24 核处理器上使用它。似乎使用 2 个线程效果最好,3 个或更多线程比使用 1 个更差。

#include <thread>
#include <mutex>
#include <condition_variable>
#include <iostream>
using namespace std;
mutex total;
mutex coutLock;

mutex order;
long long sum=1000000000;
long long mysum=0;

const int threads=3;
long long x;

void dowork(int x,int threads) {
long long temp=0;
for(long long i=x*sum/threads;i<((x+1)*sum/threads);i++) {
temp+=i;
}

total.lock();
mysum+=temp;
total.unlock();
}

int main() {
thread * pool[threads];
for(x=0;x<threads;x++) {
thread *mine=new thread(dowork,x,threads);
pool[x]=mine;
}

for(x=0;x<threads;x++) {
pool[x]->join();
}

cout<<"My sum is: "<<mysum<<endl;
}

最佳答案

dowork() 中的循环可以简化为 O(1) 代码计算以下等式:

temp = (b - a + 1) * a + (b - a) * (b - a + 1) / 2
where a = x * sum / threads, b = (x + 1) * sum / threads - 1

例如,clang++ 3.5.1 实际生成了这样的代码。不幸的是,在那种情况下,计算量与线程数成正比。

关于c++ - 为什么多线程不提供加速?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28924101/

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