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

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

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

В надежде, что код кому-нибудь пригодится, выкладываю версию для 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
        }
    }
}
Добавить в закладки
  • del.ici.ous
  • Digg
  • Furl
  • Google
  • Simpy
  • Spurl
  • Y! MyWeb
  • БобрДобр
  • Мистер Вонг
  • Yandex.Закладки
  • Текст 2.0
  • News2
  • AddScoop
  • RuSpace
  • RUmarkz
  • Memori
  • Google Bookmarks
  • Писали
  • СМИ 2
  • Моё Место
  • 100 Закладок
  • Ваау!
  • Technorati
  • RuCity
  • LinkStore
  • NewsLand
  • Lopas
  • Закладки - IN.UA
  • Connotea
  • Bibsonomy
  • Trucking Bookmarks
  • Communizm
  • UCA
  • Slashdot
  • Magnolia
  • Blogmarks
  • Current
  • Meneame
  • Oknotizie
  • Diigo
  • Funp
  • Hugg
  • Dealspl.us
  • N4G
  • Mister Wong
  • Faves
  • Yigg
  • Fresqui
  • Care2
  • Kirtsy
  • Sphinn
  • SaveThis.ru

Связанные записи

16
Март
2009

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

  1. OpenMP на многоядерном процессоре и криптография | Ars Longa, Vita Brevis says:

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

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

Подписаться на RSS-ленту комментариев к статье «OpenMP: установка маски соответствия процессоров в Linux» Trackback URL: http://blog.sjinks.org.ua/c-cpp/517-openmp-setting-cpu-affinity-mask-in-linux/trackback/

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

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

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

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