我试图使用线程和模板编写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文件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).
任何提示?