我有一个在 OpenMP 中非常并行化的函数,当从一个简单的控制台可执行文件启动时,它会使机器的每个内核饱和,并在处理器数量上线性地更快地返回结果。
void updateStateWithAParallelAlgorithm()
{
#pragma omp parallel for
{
// do parallel things, update positions of particles in a physics simulation
}
}
现在这个函数也在我的 Qt 程序的 QThread 中使用。问题是我必须在每次调用updateStateWithAParallelAlgorithm()
函数后更新粒子的屏幕位置。
在我的 Qt 主程序中启动时,我发现算法的速度没有提高,并且我的处理器的 8 个内核没有饱和。
我宁愿相信我应该在 CPU 使用率图表上看到峰值暂停行为,但这不会发生。
现在,我给你更多的信息。
class MyComputationThread : public QThread
{
Q_OBJECT
// some methods
// some variables
void doComputation()
{
this->setPriority(QThread::HighestPriority);
#ifdef Q_WS_X11
int s;
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
s = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
if (s != 0) {
perror("pthread_getaffinity_np");
}
#endif
updateStateWithAParallelAlgorithm();
}
}
我想了解我的线程MyComputationThread
类如何利用多核,而不受pthread_set_affinity_np
.