eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProcesory wielordzeniowe
Ilość wypowiedzi w tym wątku: 47

  • 1. Data: 2014-10-05 00:25:04
    Temat: Procesory wielordzeniowe
    Od: s...@g...com

    .. i do tego programowanie wielowątkowe. Ja tu czegoś nie rozumiem.
    Weźmy na przykład program do obliczenia sumy liczb od 1 do N. Ot, zwykły ciąg
    arytmetyczny S(N)=N*(N+1)/2. Zakładając, że wzoru nie znamy, zlecamy to kompowi. Soft
    jest banalny:

    s:=0;
    for i:=0 to N do
    begin
    s:=s+1;
    end;

    Powyższe jest nasmarowane w Pascalu, którego składnia jest podobna do C, ino jest to
    bardziej czytelne. Nie w tym rzecz.. Rozbijmy to na 2 wątki:

    1)
    s1:=0;
    for i:=0 to k do
    ...........
    ..........
    2) s2:=0;
    for i:=k+1 do
    .............
    ..............

    Wiasomo o co biega,no i na koniec s:=s1+s2. Czyli wykonujemy jak gdyby 2 programy na
    2-ch różnych kompach, kompilator ładnie nam to rozdzielił i klawo jak cholera. No to
    teraz skomplikujmy zagadnienie ciuta bardziej.. Chcemy policzyć sumę wyrazów
    jakiegoś ciągu, którego wyrazy są zapisane w wektorze A[i] (i=0..N). Robimy zaś 2
    wątki:

    1)
    s1:=0;
    for i:=0 to k do
    begin
    s1:=s1+A[i];
    end;

    2) s2:=0;
    for i:=k+1 to N do
    begin
    s2:=s2+A[i];
    end;

    s:=s1+s2. A co jeżeli elementy ciągu A[m] i A[n] są zapisane fizycznie w tej samej
    kostce pamięci? Co w takiej sytuacji dają mi 2 rdzenie?


  • 2. Data: 2014-10-05 00:41:48
    Temat: Re: Procesory wielordzeniowe
    Od: A.L. <a...@a...com>

    On Sat, 4 Oct 2014 15:25:04 -0700 (PDT), s...@g...com wrote:

    >.. i do tego programowanie wielowątkowe. Ja tu czegoś nie rozumiem.
    >Weźmy na przykład program do obliczenia sumy liczb od 1 do N. Ot, zwykły ciąg
    arytmetyczny S(N)=N*(N+1)/2. Zakładając, że wzoru nie znamy, zlecamy to kompowi. Soft
    jest banalny:
    >
    >s:=0;
    > for i:=0 to N do
    > begin
    > s:=s+1;
    > end;
    >
    >Powyższe jest nasmarowane w Pascalu, którego składnia jest podobna do C, ino jest to
    bardziej czytelne. Nie w tym rzecz.. Rozbijmy to na 2 wątki:
    >
    >1)
    > s1:=0;
    > for i:=0 to k do
    > ...........
    >..........
    >2) s2:=0;
    > for i:=k+1 do
    > .............
    >..............
    >
    >Wiasomo o co biega,no i na koniec s:=s1+s2. Czyli wykonujemy jak gdyby 2 programy na
    2-ch różnych kompach, kompilator ładnie nam to rozdzielił i klawo jak cholera. No to
    teraz skomplikujmy zagadnienie ciuta bardziej.. Chcemy policzyć sumę wyrazów
    jakiegoś ciągu, którego wyrazy są zapisane w wektorze A[i] (i=0..N). Robimy zaś 2
    wątki:
    >
    >1)
    >s1:=0;
    > for i:=0 to k do
    > begin
    > s1:=s1+A[i];
    > end;
    >
    >2) s2:=0;
    > for i:=k+1 to N do
    > begin
    > s2:=s2+A[i];
    > end;
    >
    >s:=s1+s2. A co jeżeli elementy ciągu A[m] i A[n] są zapisane fizycznie w tej samej
    kostce pamięci? Co w takiej sytuacji dają mi 2 rdzenie?
    >

    A o czyms takim jak "cache memory" slyszales? Poczytaj sobie cos o
    architekturze procesora wielordzeniowego

    A.L.


  • 3. Data: 2014-10-05 01:47:28
    Temat: Re: Procesory wielordzeniowe
    Od: Jacek Radzikowski <j...@s...die>

    s...@g...com wrote:
    > .. i do tego programowanie wielowątkowe. Ja tu czegoś nie rozumiem.
    > Weźmy na przykład program do obliczenia sumy liczb od 1 do N. Ot, zwykły
    > ciąg arytmetyczny S(N)=N*(N+1)/2. Zakładając, że wzoru nie znamy, zlecamy
    [...]
    > s:=s1+s2. A co jeżeli elementy ciągu A[m] i A[n] są zapisane fizycznie w
    > tej samej kostce pamięci? Co w takiej sytuacji dają mi 2 rdzenie?

    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ć.

    Ale załóżmy że tech cache nie ma i przy każdym odczycie procesor będzie
    musiał sięgnąć do pamięci zewnętrznej.
    Jeśli cały program by się składał wyłącznie z odczytów z pamięci, wtedy
    byłby problem, bo rdzenie by sobie przeszkadzały nawzajem. Ale nawet przy
    tak prostym programie jak przytoczyłeś, odczyt z pamięci jest jedną z kilku-
    kilkunastu instrukcji które muszą zostać wykonane podczas jednego obiegu
    pętli. Podczas kiedy jeden rdzeń zajmuje się wykonaniem dodawania,
    przepisywaniem pomiędzy rejestrami sprawdzaniem warunku końca czy czy
    skokiem do początku pętli, szyna pamięci danych leży odłogiem i może być
    wykorzystana przez drugi rdzeń do pobrania danych.

    Nawet jeśli założymy najbardziej niekorzystny przypadek, że podczas każdego
    obiegu pętli obydwa rdzenie będą chciały czytać w tym samym momencie, i tak
    spowolnienie będzie ledwie zauważalne. W większości przypadków każdy rdzeni
    nawet nie zauważy że dostęp do pamięci jest dzielony z kimś innym.

    pzdr.
    j.


  • 4. Data: 2014-10-05 10:44:49
    Temat: Re: Procesory wielordzeniowe
    Od: Jawi <t...@p...com>

    W dniu 2014-10-05 00:25, s...@g...com pisze:
    > Powyższe jest nasmarowane w Pascalu, którego składnia jest podobna do C, ino jest
    to bardziej czytelne.
    :))))))
    he he nie mogłeś się opanować? :)


  • 5. Data: 2014-10-05 10:47:21
    Temat: Re: Procesory wielordzeniowe
    Od: s...@g...com

    W dniu niedziela, 5 października 2014 00:41:48 UTC+2 użytkownik A. L. napisał:
    > On Sat, 4 Oct 2014 15:25:04 -0700 (PDT), s...@g...com wrote:
    >

    >
    > A o czyms takim jak "cache memory" slyszales? Poczytaj sobie cos o
    >
    > architekturze procesora wielordzeniowego
    >

    Pamięć cache to też taka "kostka" tyle że zaszyta w kostce procka. No i co w
    sytuacji, gdy 2 procesory odwołują się jednocześnie do dwóch różnych adresów w
    obrębie tej pamięci?


  • 6. Data: 2014-10-05 10:51:44
    Temat: Re: Procesory wielordzeniowe
    Od: s...@g...com

    W dniu niedziela, 5 października 2014 10:44:49 UTC+2 użytkownik Jawi napisał:
    > W dniu 2014-10-05 00:25, s...@g...com pisze:
    >
    > > Powy�sze jest nasmarowane w Pascalu, kt�rego sk�adnia jest podobna do C,
    ino jest to bardziej czytelne.
    >
    > :))))))
    >
    > he he nie mog�e� si� opanowa�? :)

    Ano nie :)) Widzę że znasz moją "miłość" do C z innych grup, ale akurat w tym wątku
    nie o to chodzi.


  • 7. Data: 2014-10-05 10:56:36
    Temat: Re: Procesory wielordzeniowe
    Od: s...@g...com

    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?


  • 8. Data: 2014-10-05 11:01:21
    Temat: Re: Procesory wielordzeniowe
    Od: Jacek Radzikowski <j...@s...die>

    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.

    pzdr,
    j.


  • 9. Data: 2014-10-05 11:20:55
    Temat: Re: Procesory wielordzeniowe
    Od: s...@g...com

    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...


  • 10. Data: 2014-10-05 11:33:30
    Temat: Re: Procesory wielordzeniowe
    Od: Artur Miller <n...@n...com>

    W dniu 2014-10-05 11:20, s...@g...com pisze:
    >>
    >> 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...
    >

    ale chodzi, ze ma być po polsku czy że na grupie? bo tu:
    http://en.wikibooks.org/wiki/Microprocessor_Design/C
    ache#Memory_Stall_Cycles
    jest wszystko ładnie rozkminione..

    @

strony : [ 1 ] . 2 ... 5


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: