相关疑难解决方法(0)

并行化:pthreads还是OpenMP?

在共享内存并行化方面,大多数科学计算人员使用OpenMP作为准标准.

是否有任何理由(除了可读性)使用OpenMP而不是pthreads?后者似乎更基本,我怀疑它可以更快更容易优化.

optimization multithreading pthreads openmp

44
推荐指数
3
解决办法
2万
查看次数

OpenMP vs C++ 11线程

在以下示例中,C++ 11线程执行大约需要50秒,但OMP线程仅需5秒.有什么想法吗?(我可以向你保证,如果你正在做真正的工作而不是doNothing,或者如果你以不同的顺序进行,那么它仍然适用.)我也在16核机器上.

#include <iostream>
#include <omp.h>
#include <chrono>
#include <vector>
#include <thread>

using namespace std;

void doNothing() {}

int run(int algorithmToRun)
{
    auto startTime = std::chrono::system_clock::now();

    for(int j=1; j<100000; ++j)
    {
        if(algorithmToRun == 1)
        {
            vector<thread> threads;
            for(int i=0; i<16; i++)
            {
                threads.push_back(thread(doNothing));
            }
            for(auto& thread : threads) thread.join();
        }
        else if(algorithmToRun == 2)
        {
            #pragma omp parallel for num_threads(16)
            for(unsigned i=0; i<16; i++)
            {
                doNothing();
            }
        }
    }

    auto endTime = std::chrono::system_clock::now();
    std::chrono::duration<double> elapsed_seconds = endTime - …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading c++11

18
推荐指数
1
解决办法
1万
查看次数

科学计算:: OpenMP或Pthreads

我正在为科学计算社区开发代码,特别是迭代地求解线性方程组(Ax = b形式).

我已经使用BLAS和LAPACK进行原始矩阵子程序,但我现在意识到有一些手动并行化的余地.我正在开发一个共享内存系统,它有两个选择:OpenMP和PThreads.

假设时间不是最大的因素(代码的性能),这是一个更好的,未来的证明,也许是可移植的(到CUDA)并行化的方式?花在使用Pthreads上花费的时间是否值得提升?

我相信我的应用程序(基本上处理一次启动许多事情,然后根据所有这些"最佳"值运行)将受益于显式线程控制,但我担心编码会占用太多时间并且最终将没有绩效回报.

我已经在这里看过几个类似的问题,但它们都与一般应用有关.

这个涉及Linux中的通用多线程应用程序.

也是一个普遍的问题.

我知道SciComp.SE,但觉得这里的主题更多.

c math pthreads scientific-computing openmp

4
推荐指数
1
解决办法
1861
查看次数