-
Data: 2014-10-05 12:01:53
Temat: Re: Procesory wielordzeniowe
Od: Jacek Radzikowski <j...@s...die> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]s...@g...com wrote:
> W dniu niedziela, 5 października 2014 11:01:21 UTC+2 użytkownik Jacek
> Radzikowski napisał:
>> s...@g...com wrote:
>>
>>
>>
>> > W dniu niedziela, 5 października 2014 01:47:28 UTC+2 użytkownik Jacek
>>
>> > Radzikowski napisał:
>>
>> >
>>
>> >> Jak już wspomniał Andrzej, w takim przypadku strona pamięci z danymi
>>
>> >>
>>
>> >> zostanie przepisana do pamięci cache i problem jednoczesnego dostępu
>> >> do
>>
>> >>
>>
>> >> zewnętrznej kostki przestanie istnieć.
>>
>> >>
>>
>> >
>>
>> > Dlaczego?! Cóż tam za magia jest zaszyta w tym cache'u, że pozwala na
>>
>> > jednoczesny dostęp do dwóch albo i więcej(ilość rdzeni/wątków) adresów
>>
>> > jednocześnie?
>>
>>
>>
>> L1 jest najczęściej do wyłącznego użytku rdzenia. A jeśli nie - to działa
>>
>> mechanizm identyczny do opisanego. Z tą drobną różnicą że pamięć cache
>> jest
>>
>> o wiele szybsza i przestoje są krótsze.
>>
>
> OK, czas dostępu do cache jest argumentem przekonywującym. Zapomnijmy na
> chwilę o wielowątkowości/wielordzeniowości. A co w przypadku jeżeli mamy
> program, którego kod znacznie objętościowo przekracza pojemność cache'a? A
> z reguły tak jest. No i teraz w wyniku działania programu przy spełnieniu
> jakiś tam warunków mamy dłuuuugie skoki do innej części kodu? Nie mam
> zamiaru się tutaj wymądrzać i deprecjonować sensu pakowania cache'a do
> procka, ale czy zawsze ten mechanizm jest porządany? No bo w przypadku
> dłuuugich skoków o ile dobrze rozumiem pamięć cache powinna być
> przeładowana na nowy obszar kodu. No a to przeładowanie, to jakby na to
> nie patrzeć zaś komunikacja z pamięcią zewnętrzną, a co za tym idzie zaś
> trzeba na to trochę czasu... Bilans zysków i strat wydaje mi się może być
> przy spełnieniu pewnych warunków wręcz niekorzystny. Tak se gdybam...
Zarządzanie zawartością pamięci cache to bardzo skomplikowany temat, na
którym zrobiono wiele doktoratów i sporo zostanie zrobionych w przyszłości.
W skrócie wygląda to tak, że zawartość cache nie odwzorowuje liniowo jednego
wielkiego obszaru pamięci, a wiele stosunkowo niedużych stron. Strony
sąsiadujące ze sobą w cache mogą w pamięci głównej być położone daleko od
siebie. Tym żeby wiedzieć jaki adres w cache odpowiada adresowi w pamięci
zajmuje się tablica translacji.
Jeśli strona do której procesor chce się odwołać nie znajduje się w cache -
wykonanie programu jest wstrzymywane i strona jest ładowana. To, którą
stronę w cache zastąpić nową zawartością - to jeden z tematów na doktorat.
Oddzielnym zagadnieniem jest synchronizacja zapisywanych danych. Nie może
dojść do sytuacji że jeden procesor zapisze coś do do pamięci, ale to utknie
w jego lokalnym cache i inny procesor będzie dalej czytać starą wartość. Na
to poświęca się sporą część z tych milionów tranzystorów jakie są pakowane w
krzem.
Że to wszystko wymaga czasu - no cóż, "taką mamy pamięć". Dlatego szybkie
procesory mają po kilka poziomów pamięci cache o różnych szybkościach,
dlatego rozdziela się cache programu i danych. Temu też służą algorytmy
przewidywania skoków i cała masa innej magii zaimplementowanej w nowoczesnym
procesorze.
Na szybkość działania programu bardzo duży wpływ ma też to jak zaplanujesz
dostępy do pamięci. Numerycy bardzo nie lubią operować na tablicach
wielowymiarowych, bo to potrafi dodać sporo niepotrzebnych przeładowań
stron. Zamiast tego indeksy są mapowane do liniowego obszaru pamięci i jak
trzeba obliczyć stan w następnym kroku symulacji - solwer jedzie po
kolejnych komórkach nie troszcząc się o indeksy (oczywiście wszystkie dane
wejściowe są odpowiednio przygotowane).
Zrób kiedyś eksperyment: zaalokuj wielką tablicę dwu-wymiarową i przeskanuj
ją iterując najpierw po wierszach później po kolumnach, a później odwróć
kolejność iteracji: najpierw po kolumnach później po wierszach. Przekonasz
się o ile szybciej program będzie działać kiedy będziesz odwoływać się do
pamięci bez skakania po stronach.
pzdr,
j.
Następne wpisy z tego wątku
- 05.10.14 13:16 s...@g...com
- 05.10.14 14:30 bartekltg
- 05.10.14 14:41 AlexY
- 05.10.14 15:01 s...@g...com
- 05.10.14 15:18 bartekltg
- 05.10.14 15:21 bartekltg
- 05.10.14 15:45 J.F.
- 05.10.14 15:52 s...@g...com
- 05.10.14 16:30 A.L.
- 05.10.14 16:45 A.L.
- 05.10.14 17:12 s...@g...com
- 05.10.14 18:19 A.L.
- 05.10.14 18:57 s...@g...com
- 05.10.14 19:50 Jacek Radzikowski
- 05.10.14 20:29 A.L.
Najnowsze wątki z tej grupy
- nie naprawiam więcej telewizorów
- Zrobił TV OLED z TV LCD
- Zasilacz USB na ścianę.
- Gniazdo + wtyk
- Aliexpress zaczął oszukiwać na bezczelnego.
- OpenPnP
- taka skrzynka do kablowki
- e-paper
- 60 mA dużo czy spoko?
- Dziwne zachowanie magistrali adresowej w 8085
- Współczesne mierniki zniekształceń nieliniowych THD audio, produkują jakieś?
- Jaki silikon lub może klej?
- Smar do video
- Litowe baterie AA Li/FeS2 a alkaliczne
- "ogrodowa linia napowietrzna"
Najnowsze wątki
- 2025-03-05 Zielona GĂłra => Konsultant wdroĹźeniowy Comarch XL/Optima (KsiÄgowoĹ
- 2025-03-05 Białystok => Spedytor Międzynarodowy (handel ładunkami/prowadzenie
- 2025-03-05 Warszawa => Specjalista ds. Sprzedaży (transport drogowy) <=
- 2025-03-05 Środa Wielkopolska => Konsultant wewnętrzny SAP FI/CO <=
- 2025-03-05 Zielona Góra => Senior Field Sales (system ERP) <=
- 2025-03-05 Warszawa => Data Engineer (Tech Lead) <=
- 2025-03-05 Kraków => Business Development Manager - Network and Network Security
- 2025-03-05 Zaniepokojeni mieszkańcy
- 2025-03-05 Ile pieniędzy ma bank?
- 2025-03-05 Ostrów Świętokrzy => Node.js / Fullstack Developer <=
- 2025-03-05 Białystok => Architekt rozwiązań (doświadczenie w obszarze Java, A
- 2025-03-05 Warszawa => Frontend Developer (Angular13+) <=
- 2025-03-05 Warszawa => Frontend Developer (obszar Angular13+) <=
- 2025-03-05 Chiny-Kraków => Backend Developer (Node + Java) <=
- 2025-03-05 Warszawa => JavaScript / Node / Fullstack Developer <=