OpenMP: установка маски соответствия процессоров в Linux
Минимизация переключения контекста между процессорами
Специалисты Intel рекомендуют задавать маску соответствия процессоров (известную как CPU affinity mask) для потоков OpenMP, чтобы привязать поток к определённому процессору (или ядру процессора, что в данном случае одно и то же). Как утверждается, это позволяет минимизировать миграцию потоков и снизить стоимость переключения контекста между процессорами.
Повышение производительности будет наблюдаться не во всех случаях, но речь сейчас не об этом.
Wikipedia приводит пример кода для Windows, для Linux я ничего подобного не нашел.
В надежде, что код кому-нибудь пригодится, выкладываю версию для Linux:
#include <sched.h>
#include <omp.h>
void set_thread_affinity()
{
#pragma omp parallel
{
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(omp_get_thread_num(), &mask);
int res = sched_setaffinity(0, sizeof(mask), &mask);
if (-1 == res) {
// failure
}
}
}
Это соответствует такому коду для Windows:
#include <omp.h>
void set_thread_affinity()
{
#pragma omp parallel default(shared)
{
DWORD_PTR mask = (1 << omp_get_thread_num());
DWORD_PTR res = SetThreadAffinityMask(GetCurrentThread(), mask);
if (0 == res) {
// failure
}
}
}
Мар
2009
Комментарии к статье «OpenMP: установка маски соответствия процессоров в Linux» (4) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «OpenMP: установка маски соответствия процессоров в Linux»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


[...] Использование OpenMP должно приводит к увеличению производительности за счет того, что программа (по крайней мере, её параллельные участки) выполняется не на одном процессоре, а на всех доступных. Процесс распределения потоков по процессорам можно контролировать. [...]
[...] желании можно создать потоки заранее (например, при задании маски соответствия процессоров). В этом случае лучше сразу создавать требуемое [...]
Привет! Вот побыла на Вашем сайте…Скажу честно, получила массу удовлетворения…Благодарю администраторов за их работу.
мало инфи
В интернете вообще мало где можно почитать об етом, даже на английском..
Очевидно все доверяют переключение ОС…