小编erk*_*kan的帖子

并行mergesort C++中的性能问题

我试图使用线程和模板编写mergesort的并行实现.相关代码如下所示.

我已经将性能与C++ STL中的排序进行了比较.当没有线程产生时,我的代码比std :: sort慢6倍.使用变量maxthreads(和/或FACTOR)我只能将性能提高一倍,因此在最好的情况下,我比std :: sort慢3倍.我已经在16核多处理器机器上尝试了代码.

htop显示核心是按预期使用的,但为什么缺乏性能而我感觉不到整体运行时的并行性?

有错误吗?

谢谢你的回复.

#define FACTOR 1
static unsigned int maxthreads = FACTOR * std::thread::hardware_concurrency();

unsigned int workers=0;
std::mutex g_mutex;

template <typename T>
std::vector<T>* mergesort_inplace_multithreading(
    typename std::vector<T>::iterator* listbegin,
    typename std::vector<T>::iterator *listend,
    std::vector<T>* listarg)
{
    if (*listbegin == *listend)
    {
        return listarg;
    }
    else if (*listend == *listbegin + 1)
    {
        return listarg;
    }
    else
    {
        size_t offset = std::distance(*listbegin, *listend)/2;
        typename std::vector<T>::iterator listhalf = *listbegin + offset;
        g_mutex.lock();
        if (::workers <= maxthreads-2 and maxthreads …
Run Code Online (Sandbox Code Playgroud)

c++ recursion performance mergesort multithreading

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

使用Makefiles定义预定义的预处理器变量

在C文件file.c我有

#define STUFF
Run Code Online (Sandbox Code Playgroud)

我想要一个Makefile,以便我可以阻止在file.c中定义STUFF.我想仅使用Makefile来控制编译(我不想直接在.c文件中注释掉这一行).

gcc有-D选项.我可以

 gcc -D STUFF file.c -o output
Run Code Online (Sandbox Code Playgroud)

用于定义STUFF; 但我不能Undefine STUFF调用gcc或使用Makefile(当然在Makefile中调用gcc).

任何提示?

c gcc makefile

2
推荐指数
1
解决办法
2078
查看次数

标签 统计

c ×1

c++ ×1

gcc ×1

makefile ×1

mergesort ×1

multithreading ×1

performance ×1

recursion ×1