komentarze
SetnikZobacz profil
Poziom ostrzeżenia: 0%
Setnik2019.07.10, 15:37
Deniryer @ 2019.07.10 13:42  Post: 1210605
Setnik @ 2019.07.10 11:38  Post: 1210597
(...)

Poprzednie ryzeny miały komunikacje IF na częstotliwości 1033MHz, a nowe mają na 1600MHz, to jest główna przyczyna zmniejszenia opóźnień.

Infinity fabric w Zen 2 domyślnie działa w Coupled Mode działa z tą samą częstoliwością co pamięć RAM, gdy wyłączysz CM to możesz zmienić częstoliwość pracy IF.


Czyli przy standardowych ustawieniach jest IF 1600MHz dla DDR4 3200MHz
AmitozaZobacz profil
Poziom ostrzeżenia: 0%
Amitoza2019.07.10, 16:52
Setnik @ 2019.07.10 11:38  Post: 1210597
Assassin @ 2019.07.10 07:49  Post: 1210583
Bardzo ciekawy artykuł. Fajnie by było go jeszcze trochę uzupełnić o kwestie związane z pamięcią (przepustowość i opóźnienia RAM w porównaniu do identycznie taktowanego Ryzena 1000/2000 z tymi samymi opóźnieniami; zachowanie 'poszatkowanego' L3).

Swoją drogą to naprawdę ciekawe, że komunikacja na linii CCD-cIOD-CCD potrafi odbywać się z prawie dwukrotnie niższymi opóźnieniami niż CCX-CCX w poprzedniej generacji. Można uznać, że poprzednie Ryzeny były pod tym względem 'zepsute', a z kolei 'chipletowa' architektura jest genialnie dopracowana i straty w stosunku do układów monolitycznych Intela są niemalże pomijalne (przynajmniej w zastosowaniach desktopowych).

Poprzednie ryzeny miały komunikacje IF na częstotliwości 1033MHz, a nowe mają na 1600MHz, to jest główna przyczyna zmniejszenia opóźnień.

Nie. W zen1 jest dokładnie tak samo. 1066mhz (nie 1033mhz) jest dla ramu 2133mhz.



Przyspieszając ram w zen1 przyspiesza IF, teraz masz to samo plus opcja 2x wolniejsze IF, ale ram o wysokiej przepustowosci - ale to chyba tylko dla sportu.
Edytowane przez autora (2019.07.10, 16:55)
NamonakiZobacz profil
Poziom ostrzeżenia: 0%
Namonaki2019.07.10, 17:17
Amitoza @ 2019.07.10 16:52  Post: 1210629

Nie. W zen1 jest dokładnie tak samo. 1066mhz (nie 1033mhz) jest dla ramu 2133mhz.

DDR4 2133 MHz jest taktowany 1066 MHz przy jednoczesnym przesyłaniu 2 pakietów danych czyli 2*1066 MHz = 2133 MHz

tylko taka sekwencja
push rax
pop rax

w ramach optymalizacji zostanie skrócona przez kompilator C\C++ do
push rax
a instrukcja pop rax zostanie usunięta jako nadmiarowa (rax w nie zmienionym stanie po pop rax) tak samo jak ten kod
loop:
mov rax,32
dec rax
cmp rax,0
je loop

zostanie skrócony do
mov rax,0

dodatkowo w x64 jest używana konwencja fastcall która umieszcza większości argumenty w rejestrach a dopiero gdy się skończą na stosie
https://en.wikipedia.org/wiki/X86_calling_...ing_conventions
ludzie narzekali na obecność Pythona w artykułach to ciekawe co teraz powiedzą na Assembler ...
Edytowane przez autora (2019.07.10, 17:44)
KituZobacz profil
Poziom ostrzeżenia: 0%
Kitu2019.07.10, 19:11
Namonaki @ 2019.07.10 17:17  Post: 1210633
Amitoza @ 2019.07.10 16:52  Post: 1210629

Nie. W zen1 jest dokładnie tak samo. 1066mhz (nie 1033mhz) jest dla ramu 2133mhz.

DDR4 2133 MHz jest taktowany 1066 MHz przy jednoczesnym przesyłaniu 2 pakietów danych czyli 2*1066 MHz = 2133 MHz

tylko taka sekwencja
push rax
pop rax

w ramach optymalizacji zostanie skrócona przez kompilator C\C++ do
push rax
a instrukcja pop rax zostanie usunięta jako nadmiarowa (rax w nie zmienionym stanie po pop rax) tak samo jak ten kod
loop:
mov rax,32
dec rax
cmp rax,0
je loop

zostanie skrócony do
mov rax,0

dodatkowo w x64 jest używana konwencja fastcall która umieszcza większości argumenty w rejestrach a dopiero gdy się skończą na stosie
https://en.wikipedia.org/wiki/X86_calling_...ing_conventions
ludzie narzekali na obecność Pythona w artykułach to ciekawe co teraz powiedzą na Assembler ...

Prawdę mówiąc, ASM nie jest jakiś wybitnie trudny. Cała trudność polega na tym, że trzeba w pełni kontrolować to, co się dzieje w programie z danymi i nie ma tylu 'gotowców' z języków wyższego poziomu. No chyba że ktoś zaczyna naukę od składni AT&T - zdecydowana większość materiałów w necie jest pod intelowską.

Inna sprawa, że jeśli ktoś rozumie artykuł o architekturze procesorów (a nie tylko udaje), to i podstawy asemblera pewnie zna.

Btw., w nowym layoucie strony nie działa znacznik code - zamiast tego przenosi do nowej linijki. Może warto by było naprawić chociaż to i emotki, które działają tak samo?
WibowitZobacz profil
Poziom ostrzeżenia: 0%
Wibowit2019.07.10, 19:15
tylko taka sekwencja
push rax
pop rax

w ramach optymalizacji zostanie skrócona przez kompilator C\C++ do
push rax
a instrukcja pop rax zostanie usunięta jako nadmiarowa (rax w nie zmienionym stanie po pop rax)

Nie. Zarówno pop jak i push przesuwają wskaźnik stosu, więc pominięcie pop sprawi, że wskaźnik stosu będzie nie tam gdzie trzeba.

ten kod
loop:
mov rax,32
dec rax
cmp rax,0
je loop

zostanie skrócony do
mov rax,0

Walnąłeś się. 'mov rax,32' powinno być przed 'loop:'. W obecnej postaci masz pętlę nieskończoną, więc kompilator może ją co najwyżej zamienić na:
loop:
jmp loop


Prawdę mówiąc, ASM nie jest jakiś wybitnie trudny. Cała trudność polega na tym, że trzeba w pełni kontrolować to, co się dzieje w programie z danymi i nie ma tylu 'gotowców' z języków wyższego poziomu.

Dla niektórych jest trudny, dla innych nie jest. Ja za nastolatka trochę w nim naklepałem kodu, część można znaleźć na: https://web.archive.org/web/*/asembler.republika.pl
Spora liczba programistów ma problemy z ogarnięciem wskaźników w C/ C++ (chodzi mi o płynne korzystanie z nich). Biorąc pod uwagę to, że w asemblerze wskaźniki są absolutnie wszędzie to ci programiści z asemblerem nie będą mieć łatwo.
Edytowane przez autora (2019.07.10, 19:22)
mbrzostekZobacz profil
Poziom ostrzeżenia: 0%
Autor publikacjimbrzostek2019.07.10, 19:30
Kitu @ 2019.07.10 19:11  Post: 1210650
Btw., w nowym layoucie strony nie działa znacznik code - zamiast tego przenosi do nowej linijki.

Działa, dodałem go do tego jednego artykułu specjalnie dla tych kilku mnemoników. Po prostu nie dałem żadnego wcięcia ani ramki, to tylko tekst w tagach.
KituZobacz profil
Poziom ostrzeżenia: 0%
Kitu2019.07.10, 20:17
mbrzostek @ 2019.07.10 19:30  Post: 1210653
Kitu @ 2019.07.10 19:11  Post: 1210650
Btw., w nowym layoucie strony nie działa znacznik code - zamiast tego przenosi do nowej linijki.

Działa, dodałem go do tego jednego artykułu specjalnie dla tych kilku mnemoników. Po prostu nie dałem żadnego wcięcia ani ramki, to tylko tekst w tagach.

Chodziło mi o komentarze - przy cytowaniu kolegi wyżej okazało się, że jego kod jest w znacznikach, a efektu brak ;)
Edytowane przez autora (2019.07.10, 20:17)
mbrzostekZobacz profil
Poziom ostrzeżenia: 0%
Autor publikacjimbrzostek2019.07.10, 20:22
Aaa, na komentarzach to ja się nie znam :P
OlsonZobacz profil
Poziom ostrzeżenia: 0%
Olson2019.07.10, 22:11
Drookash @ 2019.07.09 22:55  Post: 1210571
I takie rzeczy czyta się najlepiej !
W kilku zachodnich recenzjach pojawiła się informacja o wolnym zapisie do pamięci w przypadku procków zbudowanych z jednego CCD. Prockek z dwoma CCD czyli 3900 na tę przypadłość nie cierpi. Chodzi o szerokość magistrali miedzy CCD a CioD ktora wg AMD przesyła połowę mniej danych przy zapisie w porównaniu do odczytu. Postarajcie się zgłębić temat przy kolejnym nerdowym artykule proszę. Wykresy testów memory z AIDA64 wyglądają dziwnie dla zapisu przy prockach z jednym CCD.

Właśnie co jest z zapisem do pamięci nie tak ? Też jestem ciekaw że przy jednym rdzeniu tak jest :|
Rybaczek KoziołkaZobacz profil
Poziom ostrzeżenia: 0%
Rybaczek Koziołka2019.07.11, 08:52
-1#30
komisarz @ 2019.07.09 18:34  Post: 1210533
'dodatkowe spostrzeżenia architekturalne' - architektoniczne wam nie pasowalo?
Za bardzo po polsku bylo?


Nie bądź gęsią, język polski poznaj. To że słowo jest przestarzałe, a tak naprawdę znalazło swoją nową niszę, nie znaczy azaliż niepoprawności tegoża :)
no dobra, poczytaj:
https://sjp.pwn.pl/doroszewski/architekturalny;5409845.html
nawet prof. Miodek obali twoją tezę.
Rybaczek KoziołkaZobacz profil
Poziom ostrzeżenia: 0%
Rybaczek Koziołka2019.07.11, 09:03
-1#31
Stefan999 @ 2019.07.10 08:04  Post: 1210584
Wykresy trochę nieczytelne. Przydałoby się więcej kolorów


Wykresy są bardzo czytelne. Jedyne co jest nieczytelne, to słaby kontrast kolorystyczny pomiędzy kreskami.

Redakcjo, kiedy wreszcie będzie można bezpośrednio oceniać artykuły?

Wracając do ryzena3 / zen2. no cóż, widzę że sporo rzeczy przeszczepili z konstrukcji serwerowych i półserwerowych jak epyc czy threadripper :) bardzo dobrze.

Na minus ryzen3xxx , nadal ma słabszy kontroler pamięci RAM. czekamy na postęp w tym zakresie. dobrze by było aby dawało się to żyłować jak w intelu.

także na minus sporo wyższe opóźnienia, które przekładają się niemal 1:1 na wyniki w akceleracji 3D w grach, przy użyciu tej samej wypasionej karty graficznej.
jednak te opóźnienia jak widać są uzasadnione podziałem rdzenia na osobne kawałki, co świetnie redukuje koszt produkcji. duży plus dla arch. zen2, gdzie te opóźnienia zostały zredukowane do połowy. świetny wynik :) może kolejna usprawniona generacja zen2.x pozwoli na dalszy postęp :)

podsumowując widać jak wiele AMD zrobiło swoimi skromnymi siłami przy budowie obecnej generacji procesorów. co prawda grafika trochę kuleje, ale do hejtu nie ma absolutnie powodu, bo poza Nvidią, wszyscy inni w grafice są daleeeeeko w tyle.

Gdyby jeszcze AMD poprawiło kontroler RAM, i być może udałoby się w komunikacji z GPU uzyskać rezultaty zbliżone do Intela :) jest o co walczyć.

Dobra już kończę. Dodam, że największą bolączką AMD nie jest technologia, lecz ...... skala produkcji. To jest główny powód dlaczego wielcy producenci komputerów z małą chęcią sięgają po produkty AMD, więc w firmówkach są niemal w 100% intele, i zasypują one półki sklepowe. do koma z AMD trzeba się niestety dokopać, na półce w sklepie to są nadal rodzynki, które zazwyczaj trzeba zamówić i poczekać 2 do 7 dni na dojazd z głównego magazynu, bo zwykle tam są w ograniczonej ilości.
Rybaczek KoziołkaZobacz profil
Poziom ostrzeżenia: 0%
Rybaczek Koziołka2019.07.11, 09:18
-1#32
Wibowit @ 2019.07.10 19:15  Post: 1210652

Spora liczba programistów ma problemy z ogarnięciem wskaźników w C/ C++ (chodzi mi o płynne korzystanie z nich). Biorąc pod uwagę to, że w asemblerze wskaźniki są absolutnie wszędzie to ci programiści z asemblerem nie będą mieć łatwo.


bo w C/C++ wskaźnikologia jest zepsuta jak się tylko da, gdzie w definicji języka Pascal zostało to ujęte w sposób niemal identyczny jak w ASM. Po prostu w C/C++ jest dosyć trudne do ogarnięcia rozróżnienie pomiędzy wskaźnikiem i referencją, gdzie w ASM nie ma z tym żadnego problemu, tak jak nie ma w Pascalu czy Modula2. Btw, nawet w Perl są wskaźniki i referencje, ale jest to zrobione sporo prościej.
Marek1981Zobacz profil
Poziom ostrzeżenia: 0%
Marek19812019.07.11, 10:04
Zarzuty co do wydajności w grach uważam za nieuzasadnione. Nikt normalny nie kupuje 2080 i gra w FullHD. Mnie interesuje bardziej 2k lub 4k, tłumaczenie że powinni robić testy w 720p by oddać przewagę jest śmieszne. Nikt przecież nie gra (po za cs:)) w takich rozdzielczościach. W tej rozdzielczości to można testować 3600 i podobne z grafiką pokroju 2060.
NamonakiZobacz profil
Poziom ostrzeżenia: 0%
Namonaki2019.07.11, 16:07
Wibowit @ 2019.07.10 19:15  Post: 1210652
tylko taka sekwencja
push rax
pop rax

w ramach optymalizacji zostanie skrócona przez kompilator C\C++ do
push rax
a instrukcja pop rax zostanie usunięta jako nadmiarowa (rax w nie zmienionym stanie po pop rax)

Nie. Zarówno pop jak i push przesuwają wskaźnik stosu, więc pominięcie pop sprawi, że wskaźnik stosu będzie nie tam gdzie trzeba.
tylko że to również jest nonsensowne rsp jak i rax są dokładnie w tym samym stanie przed i po wykonaniu
wiec skoro nie widać różnicy to po co się narobić?
Wibowit @ 2019.07.10 19:15  Post: 1210652

ten kod
loop:
mov rax,32
dec rax
cmp rax,0
je loop

zostanie skrócony do
mov rax,0

Walnąłeś się. 'mov rax,32' powinno być przed 'loop:'. W obecnej postaci masz pętlę nieskończoną,
z tym się zgodzę
etykietę dopisałem na szybko jako ostatnia ...
(przez chwile się nie zastanowiłem co robię)
i jak zauważyłeś o jeden wiesz za wcześnie ...
wyszło never ending story; rax nigdy nie będzie równe 0 a zawsze 31
[w zasadzie dobry przykład jak powstają bugi ...]
Wibowit @ 2019.07.10 19:15  Post: 1210652
więc kompilator może ją co najwyżej zamienić na:
loop:
jmp loop

kompilator mi całkowicie wywali pętle bo absolutnie nic nie robi a może zastąpić ją równoważnym pustym kodem
Wibowit @ 2019.07.10 19:15  Post: 1210652

Prawdę mówiąc, ASM nie jest jakiś wybitnie trudny. Cała trudność polega na tym, że trzeba w pełni kontrolować to, co się dzieje w programie z danymi i nie ma tylu 'gotowców' z języków wyższego poziomu.

Dla niektórych jest trudny, dla innych nie jest. Ja za nastolatka trochę w nim naklepałem kodu, część można znaleźć na: https://web.archive.org/web/*/asembler.republika.pl
Spora liczba programistów ma problemy z ogarnięciem wskaźników w C/ C++ (chodzi mi o płynne korzystanie z nich). Biorąc pod uwagę to, że w asemblerze wskaźniki są absolutnie wszędzie to ci programiści z asemblerem nie będą mieć łatwo.

wszędzie gdzie korzystasz z pamięci masz w asm wskaźniki
wyjątkiem jest nie zainicjowany kontrolera pamieć w trakcie startu PC (w tym wypadku można korzystać z cache procesora)
w C a również w C++ masz równoważny wskaźnikowi identyfikator tablicy oraz przekazywanie tablic w parametrach funkcji jako wskaźnik
gdzie w przypadku tablic wielowymiarowych zapis tablica nie jest tożsamy z &tablica mimo że adres jest ten sam to typ wartości już nie
Edytowane przez autora (2019.07.11, 16:16)
WibowitZobacz profil
Poziom ostrzeżenia: 0%
Wibowit2019.07.11, 21:52
tylko że to również jest nonsensowne rsp jak i rax są dokładnie w tym samym stanie przed i po wykonaniu
wiec skoro nie widać różnicy to po co się narobić?

Zmienia się stos. 'push rax' + 'pop rax' to mniej więcej tyle co 'mov [esp-8], rax'. Natomiast kompilator nie może (w ramach optymalizacji) wyrzucić 'pop rax' i zostawić samo 'push rax'.

kompilator mi całkowicie wywali pętle bo absolutnie nic nie robi a może zastąpić ją równoważnym pustym kodem

Kompilator nie może wyrzucić pętli nieskończonej (no chyba, że ta pętla jest martwym kodem, ale kompilator wyrzuca martwy kod niezależnie co robi). Wywalenie pętli nieskończonej byłoby równoważne ze zmianą działania programu - przed optymalizacją wątek się zawieszał w danym miejscu, po optymalizacji leci dalej. Poprawne optymalizacje nie zmieniają semantyki programu. Procesor też zawiśnie na kodzie typu: 'loop: jmp loop' - mimo iż dla procesora wykrycie takiej prostej nieskończonej pętli byłoby proste to nie robi tego.

Przykład 1: https://www.ideone.com/OT45Bt - przekroczony limit czasu z powodu pętli: 'while (1);'

Przykład 2: https://godbolt.org/z/bJuTwd - pętla 'while(1);' jest kompilowana do 'L2: jmp L2'
MarucinsZobacz profil
Poziom ostrzeżenia: 0%
Marucins2019.07.12, 10:48
'Bardziej praktyczne eksperymenty, na przykład związane ze skalowaniem wydajności wraz z taktowaniem pamięci i Infinity Fabric, przeprowadzimy niebawem.'

Czekamy :)
NamonakiZobacz profil
Poziom ostrzeżenia: 0%
Namonaki2019.07.12, 18:53
Wibowit @ 2019.07.11 21:52  Post: 1210820
tylko że to również jest nonsensowne rsp jak i rax są dokładnie w tym samym stanie przed i po wykonaniu
wiec skoro nie widać różnicy to po co się narobić?

Zmienia się stos. 'push rax' + 'pop rax' to mniej więcej tyle co 'mov [esp-8], rax'. Natomiast kompilator nie może (w ramach optymalizacji) wyrzucić 'pop rax' i zostawić samo 'push rax'.

kompilator mi całkowicie wywali pętle bo absolutnie nic nie robi a może zastąpić ją równoważnym pustym kodem

Kompilator nie może wyrzucić pętli nieskończonej (no chyba, że ta pętla jest martwym kodem, ale kompilator wyrzuca martwy kod niezależnie co robi). Wywalenie pętli nieskończonej byłoby równoważne ze zmianą działania programu - przed optymalizacją wątek się zawieszał w danym miejscu, po optymalizacji leci dalej. Poprawne optymalizacje nie zmieniają semantyki programu. Procesor też zawiśnie na kodzie typu: 'loop: jmp loop' - mimo iż dla procesora wykrycie takiej prostej nieskończonej pętli byłoby proste to nie robi tego.

Przykład 1: https://www.ideone.com/OT45Bt - przekroczony limit czasu z powodu pętli: 'while (1);'

Przykład 2: https://godbolt.org/z/bJuTwd - pętla 'while(1);' jest kompilowana do 'L2: jmp L2'

zapis na stosie się odbędzie
tylko nie możesz polegać na wartościach a tym bardziej odwoływać się do części stosu którą zwolniłeś
bo w każdej chwili mogą zostać nadpisane na przykład przez inny wątek czy OS
rozmawiamy o zupełnie różnych rzeczach ja nie odnoszę się nigdzie do kodu w języku wysokiego poziomu tylko do sekwencji instrukcji tworzonych na pośrednich etapach kompilacji
gdzie w wypadku gcc nie jest to już nawet kod w języku C
WibowitZobacz profil
Poziom ostrzeżenia: 0%
Wibowit2019.07.12, 19:21
zapis na stosie się odbędzie
tylko nie możesz polegać na wartościach a tym bardziej odwoływać się do części stosu którą zwolniłeś
bo w każdej chwili mogą zostać nadpisane na przykład przez inny wątek czy OS

Każdy wątek ma swój osobny stos i sobie nim zarządza. Odwoływanie się do cudzego stosu jest błędem, niezależnie od tego jaka jest zawartość rsp, rbp czy jakiegokolwiek innego rejestru. OS natomiast może wszystko, więc nie widzę powodu by musiał korzystać z stosu przydzielonego do wątku, by tym wątkiem zarządzać. Takie coś byłoby zresztą dość mało bezpieczne, bo OS mógłby zostawić wrażliwe dane w stosie wątku użytkownika.

rozmawiamy o zupełnie różnych rzeczach ja nie odnoszę się nigdzie do kodu w języku wysokiego poziomu tylko do sekwencji instrukcji tworzonych na pośrednich etapach kompilacji
gdzie w wypadku gcc nie jest to już nawet kod w języku C

Jak chcesz to możesz pokazać i instrukcje pośrednie. Jeśli chodzi o pustą pętlę, to jeśli nie jest wycięta w kodzie docelowym (maszynowym) to nie może też być wycięta w kodzie pośrednim.
Edytowane przez autora (2019.07.12, 19:21)
komisarzZobacz profil
Poziom ostrzeżenia: 0%
komisarz2019.07.12, 22:51
-2#39
supervisor @ 2019.07.09 19:38  Post: 1210542
komisarz @ 2019.07.09 18:34  Post: 1210533
'dodatkowe spostrzeżenia architekturalne' - architektoniczne wam nie pasowalo?
Za bardzo po polsku bylo?

https://sjp.pwn.pl/szukaj/architektura.html
Architektura:
1. «sztuka projektowania, wznoszenia i artystycznego kształtowania budowli»
2. zob. architektonika w zn. 1.
3. «wydział na wyższej uczelni poświęcony studiom z tego zakresu»
4. «struktura logiczna komputera lub systemu komputerowego»


Polska jezyk trudny jezyk, a i myslenie przychodzi z trudnoscia.

nie ma slowa architekturany. Jest slow architektoniczny.
DrookashZobacz profil
Poziom ostrzeżenia: 0%
Drookash2019.07.14, 00:11
-1#40
Pozostaje czekać na desktopowe Threadrippery Zen2. Myślę, że pójdą drogą obraną przez EPYC i wykorzystają 'uszkodzone' CIOD wyłączając 4 z 8 kanałów pamięci oraz reorganizując magistrale PCIE. Bolączką aktualnych Tadzików jest konfiguracja wielokartowa - jeden zestaw PCIEx16+8 połączony jest z jednym CCD a drugi z drugim. Wolny transfer danych pomiędzy CCD powoduje, że w DX12 i mGPU działa to średnio. W przyszłości zastosują pewnie chipletową budowę i wszystkie PCIE wepną w CIOD co przy aktualnych minimalnych opóźnieniach CCX-CIOD-CCX da kolosalny postęp w wydajności. To tylko moje spekulacje - oparte o obserwację EPYCów i Tadzików. Trzymam kciuki... bo za moment pojawi się u mnie Threadripper w zestawie.
Zaloguj się, by móc komentować