Czy sched_setaffinity
lub pthread_attr_setaffinity_np
będzie działać, aby ustawić powinowactwo nitek w OpenMP?Powinowactwo OpenMP i CPU
pokrewne: CPU Affinity
Czy sched_setaffinity
lub pthread_attr_setaffinity_np
będzie działać, aby ustawić powinowactwo nitek w OpenMP?Powinowactwo OpenMP i CPU
pokrewne: CPU Affinity
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
export SUNW_MP_PROCBIND=TRUE
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
dziękuję! nic na poziomie języka, jak 'pthread_attr_setaffinity_np'? –
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
, więc ściśle rzecz biorąc, twoja odpowiedź powinna zaczynać się od "Nie" :) –