OpenMP: установка маски соответствия процессоров в Linux

Минимизация переключения контекста между процессорами

Специалисты Intel рекомендуют задавать маску соответствия процессоров (известную как CPU affinity mask) для потоков , чтобы привязать поток к определённому процессору (или ядру процессора, что в данном случае одно и то же). Как утверждается, это позволяет минимизировать миграцию потоков и снизить стоимость переключения контекста между процессорами.

Повышение производительности будет наблюдаться не во всех случаях, но речь сейчас не об этом.

Wikipedia приводит пример кода для Windows, для я ничего подобного не нашел.

В надежде, что код кому-нибудь пригодится, выкладываю версию для Linux:

[-]
View Code C
#define _GNU_SOURCE
#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:

[-]
View Code C
#include <windows.h>
#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
        }
    }
}
Автор: ; опубликовано в: C/C++, Linux, OpenMP; метки: C/C++, Linux, OpenMP
16
Мар
2009

RSS Комментарии к статье «OpenMP: установка маски соответствия процессоров в Linux» (4)  »

  1. [...] Использование OpenMP должно приводит к увеличению производительности за счет того, что программа (по крайней мере, её параллельные участки) выполняется не на одном процессоре, а на всех доступных. Процесс распределения потоков по процессорам можно контролировать. [...]

  2. [...] желании можно создать потоки заранее (например, при задании маски соответствия процессоров). В этом случае лучше сразу создавать требуемое [...]

  3. Алeana

    Привет! Вот побыла на Вашем сайте…Скажу честно, получила массу удовлетворения…Благодарю администраторов за их работу.

  4. мало инфи :(
    В интернете вообще мало где можно почитать об етом, даже на английском..
    Очевидно все доверяют переключение ОС…

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «OpenMP: установка маски соответствия процессоров в Linux»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा