-
Data: 2012-03-02 16:24:02
Temat: Re: OpenMP - jest szybciej czy wolniej?
Od: "slawek" <s...@h...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]
Użytkownik "Paweł Kierski" <n...@p...net> napisał w wiadomości grup
dyskusyjnych:jiqgak$2sv$...@i...gazeta.pl...
> Zredukuj program do samej pętli zawierające b(i) = a(i)+a(i), puść
> w obu wersjach. Jeśli wyeliminujesz _wszystko_ inne, a problem będzie
> nadal, to można podejrzewać implementację OpenMP, system itp. Bez
Wyniki, w sekundach, są takie jak niżej. Program taki jak jeszcze niżej.
gfortran -Ofast test-omp.f95 CPU_TIME = 0.20312500
gfortran test-omp.f95 CPU_TIME = 1.9062500
gfortran -fopenmp test-omp.f95 CPU_TIME = 7.0000000
gfortran -Ofast -fopenmp .... CPU_TIME = 1.0625000 - jeżeli
wątki tworzy się tylko raz (tj. $omp parallel obejmuje CAŁY program)
Co widać? Że fast-math jest szybka, a nawet bardzo szybka - daje "10-krotne
przyspieszenie". Natomiast OpenMP
sucks - wykonanie programu jest ponad 3 razy wolniejsze do "zwykłego" - i
prawie aż 35 razy wolniejsze niż z fast-math!
Jak mi się to przekłada? Prawdziwy program (nie test) działał przez około 10
dni na 16 CPU. Fast math daje efekt
jakby procesorów było 160. Natomiast z OpenMP liczyłoby się to około 1 rok.
Nie chce mi się przekładać tego na C/C++, bo intensywnie (tzn. prawdziwy
program) używa liczb zespolonych itd.
Jednak ciekawe będzie sprawdzić, jak to wyjdzie w MSVC (wersje od
Professional wzwyż mają OpenMP). Ewentualnie
p...ć OpenMP i użyć API Windows (_beginthread() i okolice). Ewentualnie
zrobić dobry użytek z GPU.
!***************************************************
****************************************************
************************
!
! Program test-omp - powinno skompilowac sie kazdym kompilatorem Fortranu 95
!
!***************************************************
****************************************************
************************
module main
! stale matematyczne i fizyczne (CODATA 2006)
real*8, parameter :: pi =
3.14159265358979323846264338327950288419716939938D0 ! pi
real*8, parameter :: epsilon0 =
8.85418781762038985053656303171075026060837016660D-1
2 ! przenikalnosc
elektryczna prozni [F/m]
real*8, parameter :: c = 299792458.0D0
! predkosc swiatla [m/s]
integer :: n,m;
! I/O units
integer :: input = 11 ! tekstowy wejsciowy plik z danymi
integer :: output = 12 ! tekstowy wyjsciowy plik z danymi
contains
subroutine setup(vec)
implicit none
complex*16, intent(out) :: vec(:)
integer :: i
do i = 1,n
vec(i) = pi*c*epsilon0;
enddo
end subroutine setup
subroutine solve(v1,v2)
implicit none
complex*16, intent(in) :: v1(:)
complex*16, intent(out) :: v2(:)
integer :: i
!$omp parallel
!$omp do schedule(static,100)
do i = 1,n
v2(i) = v1(i)/c**2 + abs(epsilon0) + pi
enddo
!$omp end do
!$omp end parallel
end subroutine solve
end module main
program testomp
use main
implicit none
real*4 stamp0 ! pomiar czasu - stempel 0
real*4 stamp1 ! pomiar czasu - stemper 1
integer, parameter :: nmax = 10000 ! takie duze tablice sa
complex*16 :: vec(nmax,2)
integer :: i1,i2,i,j
complex*16 :: sum
call cpu_time(stamp0)
n = 1000
m = 100000
if(n.le.nmax) then
i1 = 1
i2 = 2
call setup(vec(:,i1))
do j = 1,m
call solve(vec(:,i1),vec(:,i2))
i1 = mod(i1,2) + 1
i2 = mod(i2,2) + 1
enddo
else
write(*,*) 'error: dimension(s)'
endif
call cpu_time(stamp1)
write(*,*) 'CPU time = ', stamp1-stamp0
sum = 0.D0
do i = 1,n
sum = sum + 1.D0/(1.D0+vec(i,i1)*vec(i,i1))
enddo
write(*,*) 'just for fun ', sum
end program testomp
!***************************************************
****************************************************
************************
Następne wpisy z tego wątku
- 02.03.12 16:27 slawek
- 02.03.12 16:40 Edek Pienkowski
- 02.03.12 16:45 Edek Pienkowski
- 02.03.12 16:50 slawek
- 02.03.12 19:11 slawek
- 03.03.12 06:28
- 03.03.12 10:13 slawek
- 03.03.12 11:14 Roman W
- 03.03.12 12:30
- 03.03.12 12:49 slawek
- 03.03.12 12:57 slawek
- 03.03.12 13:12
- 03.03.12 13:32 slawek
- 03.03.12 14:39
- 03.03.12 15:08 slawek
Najnowsze wątki z tej grupy
- Rosjanie chwalą się prototypem komputera kwantowego. "Najważniejszy projekt naukowy Rosji"
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Re: Najgorszy język programowania
- NOWY: 2025-09-29 Alg., Strukt. Danych i Tech. Prog. - komentarz.pdf
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
Najnowsze wątki
- 2026-01-06 I kolejny
- 2026-01-06 Retro organizer ale współcześnie
- 2026-01-06 Bowling
- 2026-01-06 Cyganie
- 2026-01-06 Rozwód w Santanderze z prostokątną kobietą...
- 2026-01-06 Skąd diody LED 1,5V?
- 2026-01-06 Nowum!!! -- Moje ID
- 2026-01-06 Metoda na fotoradar
- 2026-01-05 I jeszcze jeden
- 2026-01-05 Jaworek;)
- 2026-01-05 Warszawa => Project Manager (AI and innovation) <=
- 2026-01-05 Gdańsk => Konsultant ERP Microsoft Dynamics 365 Commerce <=
- 2026-01-05 Jeśli nie było "aktu wojny" to była "zorganizowana grupa przestępcza" (terroryści) dokonująca zabójstw?
- 2026-01-05 Walka Lewicy o B2B na etat
- 2026-01-05 zamiana B2B na etat




5 Najlepszych Programów do Księgowości w Chmurze - Ranking i Porównanie [2025]