Nárůst výkonu CPU.

Procesory Intel, AMD a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Bobanowicz 19. 2. 2024 16:18

Nazdrar všichni,
obávám se, že co teď napíšu, bude naprostá většina z vás považovat za samozřejmost a vlastně nezajímavou ptákovinu, ale já si prostě nemůžu pomoct. Mě to totiž stále udivuje.
Když jsem kdysi ještě za Husákova socíku ve druhé polovině osmdesátých let nastoupil coby studentík do prváku na VŠ (elektrofakulta), tak jsme mimo jiné měli kurz programování v Pascalu a cvika se odehrávala v terminálové učebně ADT. (tuším, že to zřejmě bylo ADT 4500, ale jistej si tím nejsem)
Vzpomínám si, že jsem tehdy napsal prográmek na generování prvočísel. Vytvořit pole s první tisícovkou prvočísel tomu počítači zabralo snad 15 minut. Je nutné podotknout, že podobnými pitomostmi jako já, to ÁDéTéčko ve stejné chvíli zatěžovalo dalších cca. 10 studentů.
Mám nový ultrabook a tak mě z čiré rozvernosti napadlo zkusit co dokáže procesor, který v něm tiká. Jedná se o Ryzen 7 PRO 7840U. Splichtil jsem teda prográmek na generování prvočísel, viz. přiložený kód....a byl jsem znova udiven jakým pokrokem za těch pár desítek let počítače prošly. Ten nepříliš dobře chlazený ultrabookový procesor s využitím pouze jediného jádra dokáže za minutu vytvořit pole prvních přibližně 26 milionů prvočísel. (jen technická pozn. - Eratostenovo síto samozřejmě znám, ale chtěl jsem zkusit podobný algoritmus jaký jsem kdysi spustil na tom zmíněném ÁDéTéčku. :))
Je mi jasné, že to dnes asi osloví jen málokoho, ale pro mě je tempo zvyšování rychlosti počítačů stále zdrojem údivu. :)
PS. Už přibližně 20 let mě psaní programů neživí, tak prosím případnou kritikou šetřete. :)
Kód: Vybrat vše
#include <iostream>
#include <time.h>

using namespace std;

int main()
{
    int b;
    bool neni;
    static int prvocisla[30000000];
    int pocet = 1;
    int max_index = 0;


    time_t start_time;
    time_t stop_time;

    start_time = time(NULL);

    prvocisla[0] = 3;

    for(int kandidat = 5; kandidat < 500000000; kandidat += 2) {
        if (prvocisla[max_index] * prvocisla[max_index] < kandidat) max_index++;

        neni = false;

        int poradi = 0;
        int delitel;

        while(poradi <= max_index) {

            delitel = prvocisla[poradi];
            if (kandidat%delitel == 0) {
                neni = true;
                break;
            }
            poradi++;
        }

        if (!neni) prvocisla[pocet++] = kandidat;
    }

    stop_time = time(NULL);

    double seconds = difftime(stop_time, start_time);


    cout << "Hotovo!!!  pocet: " << pocet <<  " trvalo: " << seconds << " posledni tri: " << prvocisla[pocet-3] << ", " << prvocisla[pocet-2] << ", " << prvocisla[pocet-1] << endl;

    return 0;
}
Bobanowicz
Kolemjdoucí

Odeslat příspěvekod JirkaVejrazka 20. 2. 2024 10:11

Ano, dnes mame (skoro) kazdy v kapse mobil s vypocetnim vykonem, ktery by pred dvaceti lety v pohode stacil na to, aby byl v seznamu Top500 nejvykonnejsich pocitacu sveta. Tak to proste je.
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod Emil Pastelka 21. 2. 2024 16:25

Na tohle narážím téměř neustále - já, pamětník "zlaté éry", jsem stále fascinován pokrokem. Mé děti to vše berou samozřejmě, protože se už narodily do gigabitové doby. Občas se nostalgicky zapomenu, ale mé nadšení většinou zabrzdí pohled typu "co to zas mele".
Naposled to bylo, když se dcera otráveně odvrátila od monitoru s tím, že těch bezmála 30 GB bude stahovat "celých 10 minut". Začal jsem ji počítat, kolik dnů by to trvalo na mém prvním domácím vytáčeném připojení (56 kbit/s) - 148.8 hodin, přes 6 dnů. Což je samozřejmě teorie, protože by to 1) ani neprošlo a 2) nebylo kam uložit :)
Emil Pastelka
Junior
Uživatelský avatar

Odeslat příspěvekod JirkaVejrazka 21. 2. 2024 18:51

Jojo, taky to tak mam. Vetsinou si vzpomenu, jak jsme hru o velikosti 30 KB nahravali z kazety nejakych 4-5 minut.
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod Da Gony 21. 2. 2024 18:52

Když už je diskuze o tomto, je nějaká dobrá stránka, kde je tohle zmapováno? Vývoj rychlosti nějakého konkrétního algoritmu v běžném hardwaru té doby... Například od 2000 do dneška. Ještě lépe 2 metodami: kolik n se podaří vygenerovat v daném čase vs zakolik zvládne n=10000000...

Zrovna s těmi nad-lineárními algoritmy je to ošemetné srovnání. Napíšete trochu jiný algoritmus a místo O(n^2) máte O(n^2.2) a při milionu čísel se můžete divit že první trvá minutu a se změnou 2 minuty. A tím jiný algoritmus ani není myšleno totálně jiný (síto, naivní, s cache, pravděpodobnostní,...), ale stačí ve stejném algoritmu udělat nějakou změnu, že třeba v cyklu for(j in 1.. i/2 ) dáte for(j in 3.. sqrt(i)) vs for(j in 1..i){break if j**2>i})
Samozřejmě generování prvočísel pomocí síta je starý jak husákovy boty.

No zrovna ta gigabitová doba je takový relativní pojem - podle toho v jakém segmentu má platit. Například gigabitový standard pro dvoulinku je snad 30 let starý a přesto masivnější rozšíření mezi domácnostmi v LAN měl tak po 2007 až. A datacentra používají 10Gbit víc jak 10 let. Dnes to mají domácnosti tak max 4 roky a to jen nadšenci. 2.5Gbit by se dnes dalo považovat za standard.
Da Gony
Junior
Uživatelský avatar

Odeslat příspěvekod Bobanowicz 22. 2. 2024 17:30

Da Gony píše:Když už je diskuze o tomto, je nějaká dobrá stránka, kde je tohle zmapováno? Vývoj rychlosti nějakého konkrétního algoritmu v běžném hardwaru té doby... Například od 2000 do dneška. Ještě lépe 2 metodami: kolik n se podaří vygenerovat v daném čase vs zakolik zvládne n=10000000...

No, to nevím. Chvilku jsem hledal, ale nic jsem vhodného nenašel, resp. jen jen nějaké přepočty pomocí MIPS a Dhrystone, ale jak je tohle reálně o něčem vypovídající, to netuším.
https://cs.wikipedia.org/wiki/Dhrystone

Da Gony píše:Zrovna s těmi nad-lineárními algoritmy je to ošemetné srovnání. Napíšete trochu jiný algoritmus a místo O(n^2) máte O(n^2.2) a při milionu čísel se můžete divit že první trvá minutu a se změnou 2 minuty. A tím jiný algoritmus ani není myšleno totálně jiný (síto, naivní, s cache, pravděpodobnostní,...), ale stačí ve stejném algoritmu udělat nějakou změnu, že třeba v cyklu for(j in 1.. i/2 ) dáte for(j in 3.. sqrt(i)) vs for(j in 1..i){break if j**2>i})
Samozřejmě generování prvočísel pomocí síta je starý jak husákovy boty.

Síto jsem nepoužil záměrně, protože jsem chtěl mít pokud možno co nejpodobnější algoritmus jako před těma cca. pětatřiceti rokama, ale jisté je, že detaily implementace už si nepamatuju takže výsledky jsou "plus mínus autobus". Nicméně s použitím zcela jiného algoritmu (např. toho zmíněného síta) by výsledky byly úplně mimo mísu.

-- 22. 2. 2024 17:39 --

JirkaVejrazka píše:Jojo, taky to tak mam. Vetsinou si vzpomenu, jak jsme hru o velikosti 30 KB nahravali z kazety nejakych 4-5 minut.

Ano, taky pamatuju doby ladění náklonu magnetické hlavy na kazeťáku aby se dal nahrát program do "Spektráče" a další jiné radosti tohoto typu - např. událost, kdy si počátkem osmdesátých let (nebo možná už koncem sedmdesátých) někdo ze Svazarmu pořídil programovatelnou kalkulačku TI-59 a Svazarm následně o tomhle megastroji uspořádal přednášku na které se sešlo odhadem tak 100 lidí natěšených spatřit ten zázrak a poslechnout si co všechno to dokáže. :-D
Dneska tyhle historiky vypadají jakoby vypadly z jiného vesmíru a nikoliv "jen" z doby vzdálené pár desítek let. :-D

Emil Pastelka píše:Na tohle narážím téměř neustále - já, pamětník "zlaté éry", jsem stále fascinován pokrokem. Mé děti to vše berou samozřejmě, protože se už narodily do gigabitové doby. Občas se nostalgicky zapomenu, ale mé nadšení většinou zabrzdí pohled typu "co to zas mele".

Ano, jako byste mluvil o mě a mých potomkách. Jejich reakce je naprosto stejná jako reakce vašeho potomstva. :-D
Bobanowicz
Kolemjdoucí

Odeslat příspěvekod Emil Pastelka 22. 2. 2024 18:50

MIPS a Dhrystone jsou "nejméně špatné" pro srovnání přes tolik generací, ovšem stále je to mimo. Mezi XT/AT a Intel Core neřku-li Ryzen je tak extrémní rozdíl, že se celkem nedá smysluplně porovnávat výkon. Pokud bych počítal s omezením prvních procesorů, pak znevýhodním nové instrukční sady a naopak. Nemluvě o nepřítomnosti numerického koprocesoru u prvních řad (tuším byl integrovaný až u 386).

Možná by šla udělat nějaká rámcová představa na základě srovnání různých verzí benchmarků os SPEC INT (CPU92, CPU95, CPU2000, ...). Což je například zde.
Zajímavé je také tohle srovnání 40leté historie CPU. Kdy je vidět, že mezi i9 9900 a 386 je 21125 násobný nárůst výkonu :)

Podle databáze PassMark má jeden z prvních Pentium 4 nějakých 77 bodů celkově a 203 bodů na jednojádrový výkon (Mops./Sec = počet matemetických operací za 1 sekundu v milionech). Ve výše odkazované tabulce v porovnání s 386 zvládl testovanou operaci cca 1500× rychleji.
Poslední CPU v tabulce, i9 9900KF, má dle PassMarku 18331 bodů celkem a 2936 na jednojádrový výkon.
Pokud porovnám časy v tabulce a teoretické hodnocení na jádro dle PassMarku, vychází mi rozdíl mezi Pentium 4@1400 a i9 9900KF velmi podobně - cca 14× ve prospěch i9 9900KF pro jednojádrový/vláknový výkon. Ta i9 má ale 16 vláken...
Můj aktuální procesor, Ryzen 5 7600, má 27310 bodů celkem a 3929 na jádro. V porovnání s Pentium 4@1400 je tak cca 19× rychlejší a v porovnání (už hodně přitaženo za vlasy) s 386 to bude 29000 krát více :) na jádro/vlákno a to celé ještě 12×...

Každopádně to je spíš pro pobavení, protože ten výkon nelze rozumně srovnávat. Je to jako porovnávat podkovy a pneumatiky - teoreticky mají podobný základ i funkci, ale ve výsledku už to jsou naprosto jiné věci.
Emil Pastelka
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků