我有一個在OpenMP中非常並行的函數,當它從簡單的控制檯可執行文件啓動時,它會飽和機器的每個核心,並且在處理器數量上線性快速返回結果。如何強制在QThread中使用多核與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
類可以如何利用多核,而不被約束到一個CPU中的pthread_set_affinity_np
聲明。
也許pthread_setaffinity_np阻止使用其他核心。你爲什麼需要這個電話? –
這是代碼的一部分,我不想因爲不明原因而修改代碼......它不是我的... – linello