首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在openmp中使用不同线程组装向量时伸缩性差

在openmp中使用不同线程组装向量时伸缩性差
EN

Stack Overflow用户
提问于 2015-10-12 08:16:10
回答 1查看 99关注 0票数 1

我正在尝试使用多个线程来组装一个大的向量。每个线程通过自己的线程向量读取并写入大向量的特定部分(索引是连续的)。

条目的总数是一个固定的数字N,每个线程都会将N/numberOfThreads条目写入到大向量中。我做了以下实验:

代码语言:javascript
复制
//each vector contains the data that a particular thread needs to process
//and has the same length = N/numberOfThreads;
vector<vector<double> > threadVectors; 
//the big vector that each thread needs to write into
vector<double> totalVector(N); 

//initialize threadVectors ...

#pramga omp parallel
{
    int threadId = omp_get_thread_num();
    vector<double>& threadVector = threadVectors[threadId];
    int globalStartId = threadId * threadVector.size();
    std::copy(threadVector.begin(), threadVector.end(),
        totalVector.begin() + globalStartId);
}

我对并行部分进行了10次重复计时,N= 1e7。在我用1-24线程进行实验后,我得到了以下加速:

线程数、时间、将w.r.t加速为单线程

1: 0.1797加速0.99%

2: 0.1362加速1.31

3: 0.1430加速1.25%

4: 0.1249加速1.43

5: 0.1314加速1.36

6: 0.1446加速1.23

7: 0.1343加速1.33

8: 0.1414加速1.26

9: 0.1370加速1.30

10 : 0.1387加速1.28

11 : 0.1434加速1.24

12 : 0.1344加速1.33

13 : 0.1299加速1.37%

14 : 0.1303加速1.37%

16 : 0.1362加速1.31

18 : 0.1341加速1.33

20 : 0.1384加速1.29

22 : 0.1319加速1.35%

23 : 0.1303加速1.37%

24 : 0.1298加速1.37%

这台机器有12个内核,带有超线程(24个线程)。看起来加速很差,算法不涉及任何比赛或锁定。

有人知道问题出在哪里吗?

EN

回答 1

Stack Overflow用户

发布于 2015-10-12 09:21:23

因为您的线程化任务是非常内存密集型的,所以将数据从一个内存块复制到另一个内存块,性能受到内存的限制。这不是一个伸缩性很好的东西。增加更多的核心不会有任何帮助,因为它们都在等待来自主内存的数据。这就是为什么你的结果在两个线程的情况下会有轻微的改善,但在那之后就没有额外的改善了。

让它运行得更快的唯一方法是加速你的内存,但这是一个硬件问题。

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

https://stackoverflow.com/questions/33071535

复制
相关文章

相似问题

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