Pracuję w optymalizacji algorytmu za pomocą instrukcji SSE2. Ale ja napotkasz ten problem, kiedy testuje wydajność:Program SSE zajmuje dużo więcej czasu na AMD niż na Intel
I) Intel E6750
- Doing 4 razy algorytm bez SSE2 zajmuje 14.85 sekund
- Doing 1 raz algorytmu SSE2 (procesy te same dane) wykonuje 6,89 sekundy
II) Phenom II x4 2,8 GHz
- Robi 4 Czasy algorytm nie bierze SSE2 11,43 sekundy
- Doing 1 raz algorytm SSE2 (przetwarza te same dane) wykonuje 12.15 sekund
ktoś może mi pomóc, dlaczego tak się dzieje? Jestem naprawdę zdezorientowany wynikami.
W obu przypadkach kompiluję za pomocą g ++, używając opcji -O3 jako flagi.
PS: Algorytm nie używa matematyki zmiennoprzecinkowej, używa instrukcji liczb całkowitych SSE.
Prawie dwa razy dłużej z tym samym binarnym, a na procesorze, który jest taktowany wyżej i (zakładając "Deneb") ma taki sam rozmiar pamięci podręcznej? Bummer. Jedyne co mogłem wymyślić to to, że wykonujesz wiele tasowań, ponieważ mają one trzykrotne opóźnienie w tej generacji procesorów AMD w porównaniu z tą generacją procesorów Intela (wygląda inaczej w najnowszej generacji). Inne instrukcje z pewnością mogą mieć tu i ówdzie mniej lub więcej cykle, ale w sumie nie powinny działać dwa razy wolniej. (Procesory AMD są również znane z "opóźnienia formatowania", ale ponieważ nie miesza się float/int, nie powinno to mieć znaczenia.) – Damon
Różnica powyżej 20% brzmi dziwnie. Jaka jest wersja AMD Phenom? L1/L2/L3 Rozmiary pamięci podręcznej? Jaka jest implementacja algorytmu? – alecco