2011-11-30 20 views

Odpowiedz

13

Tak, nazwane połączenia będą pracować, aby ustawić gwint powinowactwo. Jedynym problemem jest naprawienie numeru wątku i ustawienie odpowiedniego powinowactwa w prawym wątku (możesz spróbować użyć statycznego szeregowania pętli for dla znanej liczby wątków).

Jak wiem, prawie każdy openmp pozwala ustawić powinowactwo za pomocą środowiska. Nazwa zmiennej środowiskowej jest różna (nie była ona od jakiegoś czasu gotówkowa). Używam strony http://www.spec.org/omp2001/results/omp2001.html do znalezienia implementacji OpenMP i szukania konkretnej nazwy zmiennej środowiskowej. Powinowactwo ustawia się w ~ połowie wyników specOMP. Istnieje również kilka dodatkowych ustawień dostrajania wydajności OpenMP w wynikach.

E.g. For intel compiler zmienna jest

export KMP_AFFINITY=compact,0 

For sun compiler:

export SUNW_MP_PROCBIND=TRUE 

For gcc (pre-openmp 3.1)

export GOMP_CPU_AFFINITY=0-63 

gdzie 63 jest maksymalną liczbę procesorów (jeśli liczyć od 0)

I newer OpenMP Standard, version 3.1 określa zmienną środowiska OMP_PROC_BIND (patrz secti 4.4), który jest znormalizowanym sposobem ustawiania powinowactwa w OpenMP. Sposób użycia:

export OMP_PROC_BIND=true 
+0

dziękuję! nic na poziomie języka, jak 'pthread_attr_setaffinity_np'? –

+0

nie, standard openmp nie ma żadnej pragma lub funkcji wiążącej wątek. Jedynym sposobem (i zalecanym) jest powiązanie wątków za pomocą zmiennej środowiskowej, specyficznej dla kompilatora lub openmp3.1. To ustawienie powinno zostać wykonane wcześniej, przed uruchomieniem głównej. – osgx

+0

, więc ściśle rzecz biorąc, twoja odpowiedź powinna zaczynać się od "Nie" :) –