У меня есть функция, которая очень распараллеливается в OpenMP, при запуске с простой исполняемой консоли она насыщает каждое ядро машины и возвращает результат линейно быстрее в количестве процессоров.Как принудительно использовать многоядерность в QThread с функцией OpenMP
void updateStateWithAParallelAlgorithm()
{
#pragma omp parallel for
{
// do parallel things, update positions of particles in a physics simulation
}
}
Теперь эта функция также используется внутри QThread в моей программе Qt. Проблема в том, что я должен обновлять позиции экрана частиц каждый после вызова функции updateStateWithAParallelAlgorithm()
.
При запуске в моей основной программе Qt я не вижу улучшения в скорости алгоритма, и 8 ядер моего процессора не являются насыщенными.
Я бы предпочел, чтобы на графике использования ЦП я видел поведение максимальной паузы, но этого не происходит.
Теперь я даю вам больше информации.
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
.
Возможно, pthread_setaffinity_np предотвращает использование дополнительных ядер. Зачем вам этот звонок? –
Это было частью кода, который я не хотел изменять по неясным причинам ... это не мое ... – linello