Wątek przeniesiony 2020-04-10 10:02 z Inne języki programowania przez Patryk27.

Języki programowania a zużycie prądu

0

Wiele osób lubi programować w Pythonie ale gdy spojrzymy na czasy wykonania programów napisanych w czystym "C" a Pythonie to jest mega różnica a co za tym idzie duże zużycie prądu.Język programowania, użyty algorytm, struktura danych, wielowątkowość etc. mają ogromne znaczenie dla ochrony środowiska.
Przykład:
https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/fannkuchredux.html

9

Z drugiej strony: nauka, pisanie w oraz debugowanie C wymaga poświęcenia więcej czasu, a zatem odpowiednio większej ilości wody oraz pożywienia ;-)

Podobnie: wykorzystywanie "skomplikowanych" algorytmów może i zmniejsza czas runtime'u, lecz zwiększa czas developmentu, a zatem ponownie - wpływ na środowisko niekoniecznie offsetuje się w tę stronę, o której myślisz.

0

Java jest najbardziej eko.

0
Patryk27 napisał(a):

Z drugiej strony: nauka, pisanie w oraz debugowanie C wymaga poświęcenia więcej czasu, a zatem odpowiednio większej ilości wody oraz pożywienia ;-)

Podobnie: wykorzystywanie "skomplikowanych" algorytmów może i zmniejsza czas runtime'u, lecz zwiększa czas developmentu, a zatem ponownie - wpływ na środowisko niekoniecznie offsetuje się w tę stronę, o której myślisz.

Kupować do programowania komputer nie-gamerski, ja np mam kartę z nVidią, ale prosty chip kilkunastowatowy, bez wentylatora. Z tym, że od czasów boulderdasha na Atari gry dla mnie nie istnieją.

3
Patryk27 napisał(a):

Z drugiej strony: nauka, pisanie w oraz debugowanie C wymaga poświęcenia więcej czasu, a zatem odpowiednio większej ilości wody oraz pożywienia ;-)

Dowcipkujesz sobie, a tymczasem prawda jest taka, że do produkcji www i oprogramowania stosuje się obecnie barbarzyńskie metody na zasadzie: potrzebuję wbijać gwoździe, więc kupię sobie kombajn. Producenci może i na tym zyskują, bo wypluwają z siebie szybciej cały ten szrot, a użytkownicy i tak się nie znają, więc nie zdają sobie sprawy z rozproszonych kosztów ukrytych, które ponosimy wszyscy.

5

Nie rozumiecie. Jak mi się IntelliJ szybciej o 5 sekund uruchamia to potem ze szczęścia 5 sekund sadzę drzewa. Już chyba wiecie co robić by sadzić więcej drzew.

3

To samo jest z js w apkach i stronach, przyczynił się on do znacznego wzrostu zużycia energii na całym świecie, baterii w telefonach, laptopach, tabletach i to nie są małe liczby.

0
czysteskarpety napisał(a):

To samo jest z js w apkach i stronach, przyczynił się on do znacznego wzrostu zużycia energii na całym świecie, baterii w telefonach, laptopach, tabletach i to nie są małe liczby.

Modne mikroserwisy i cloudy za darmo nie są.

5
Freja Draco napisał(a):

Dowcipkujesz sobie, a tymczasem prawda jest taka, że do produkcji www i oprogramowania stosuje się obecnie barbarzyńskie metody na zasadzie: potrzebuję wbijać gwoździe, więc kupię sobie kombajn.

Nie miałem w intencji żartować - starałem się przekazać, że według mnie stwierdzenie te dzisiejsze programy są nadmuchane, przez co marnują prąd oraz środowisko nie uwzględnia wszystkich kosztów powstawania oprogramowania.

Jeśli założymy, że aplikacja napisana w C będzie wykorzystywała o połowę mniej prądu, lecz jej napisanie zajmie dwa razy więcej czasu (= dwa razy więcej wody itd.), czy na pewno nadal C wychodzi na prowadzenie?

Jako że nie widziałem statystyk uwzględniających szerszą gamę kosztów, nie chcę obejmować żadnej ze stron - twierdzę jedynie, że sprawa nie jest tak prosta jak python zużywa więcej prądu, działa wolniej, przez co jest mniej przyjazny środowisku.

1

Na szczęście AMD wraz z TSMC przynoszą oczekiwany postęp w wydajności na wat, więc jak ktoś chce być eko to polecam zmianę procka na jakiegoś najnowszego Ryzena :] Niektóre wyżej wypozycjonowane Ryzeny nawet mają tryb ECO gdzie TDP spada do 65W. Intel za to idzie w drugą stronę i cały czas odświeża architekturę z 2015 roku (Skylake ze zmienioną nazwą na Kaby Lake, potem Coffee Lake, a teraz ma być pod nazwą Comet Lake) raz za razem ją podkręcając i psując przy okazji pobór mocy. Ploty niosą, że Core i9-10900K w stresie ma brać ze 300W.

2

program jest pisany a potem testowany na kilkudziesięciu maszynach. Potem uruchamiany na tysiącach. Zużycie prądu podczas PISANIA można praktycznie pominąć, natomiast zużycie prądu i wkurw tysięcy użytkowników można by zminimalizowac

0
ple napisał(a):

Jednak Java wypada gorzej od C#:
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/csharp.html

Pamiętaj, że by mieć wydajność jak w benchmarkach musisz pisać w takim stylu jak w benchmarkach. A w programach w C# są takie rzeczy:

    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    static void NextPermutation(short* p, int* count)
    {
        ...
    }

    static void Run(int n, int taskSize)
    {
        int* count = stackalloc int[n];
        int taskId, chksum = 0, maxflips = 0;
        short* p = stackalloc short[n];
        short* pp = stackalloc short[n];
        ...
    }

    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    static unsafe byte GetByte(double* pCrb, double Ciby)
    {
        var res = 0;
        for (var i=0; i<8; i+=2)
        {
            var vCrbx = Unsafe.Read<Vector<double>>(pCrb+i);
            var vCiby = new Vector<double>(Ciby);
            ...
        }
        return (byte)(res^-1);
    }

        [DllImport("pcre2-8", EntryPoint = "pcre2_compile_8", CharSet = CharSet.Ansi)]
        extern static IntPtr PcreCompile(string pattern, long length, uint options,
            out int errorcode, out long erroroffset, IntPtr ccontext);

        [DllImport("pcre2-8", EntryPoint = "pcre2_jit_compile_8", CharSet = CharSet.Ansi)]
        extern static int PcreJitCompile(IntPtr code, uint options);

        [DllImport("pcre2-8", EntryPoint = "pcre2_jit_match_8", CharSet = CharSet.Ansi)]
        extern unsafe static int PcreJitMatch(IntPtr code, byte* subject,
            long length, long startoffset, int options, IntPtr match_data, IntPtr mcontext);

Jeśli klepiesz taki kod to zgoda :)

0

Zużycie prądu podczas PISANIA można praktycznie

Mówiłem o zużyciu wody oraz innych zasobów przez ludzi w trakcie pisania kodu.

1
Miang napisał(a):

program jest pisany a potem testowany na kilkudziesięciu maszynach. Potem uruchamiany na tysiącach. Zużycie prądu podczas PISANIA można praktycznie pominąć, natomiast zużycie prądu i wkurw tysięcy użytkowników można by zminimalizowac

W przypadku aplikacji biznesowych:

  • większość prądu idzie na bazy danych, bo tam jest najwięcej mielenia danymi
  • koszt czasu zespołu programistów jest wyższy niż koszt prądu, obojętnie kto płaci za ten prąd
  • time-to-market (czas implementowania nowych funkcjonalności i poprawiania błędów) jest bardzo ważny. Jeśli ktoś napisze w Pythonie apkę jako pierwszy to ludzie rzucą się na tę apkę, zamiast czekać dodatkowe miesiące na eko-apkę w C.

Skoro tak bardzo wam zależy na mierzeniu ekologiczności programów to może zbierzcie się do kupy i stwórzcie jakąś zorganizowaną inicjatywę, a potem pokażcie co zrobiliście, by ludzie wiedzieli które programy są bardziej eko niż inne :]

0
Patryk27 napisał(a):

Nie miałem w intencji żartować - starałem się przekazać, że według mnie stwierdzenie te dzisiejsze programy są nadmuchane, przez co marnują prąd oraz środowisko nie uwzględnia wszystkich kosztów powstawania oprogramowania.

Nie zaprzeczam, że stworzenie oprogramowania też kosztuje. Jednocześnie jednak uważam, że koszt tworzenia oprogramowania i koszt użytkowania oprogramowania są absolutnie nieprzystające (wyjąwszy może tzw radosną twórczość).

Zazwyczaj jest tak, że:

  • soft tworzy N osób przez T czasu.
  • soft użytkuje N × (1..100000..) osób przez T × (1...10...) czasu.

Przykładowo: poświęcam kilka dni na zrobienie prostej strony www. Strona zalicza kilkadziesiąt tysięcy odsłon rocznie.

1

No to teraz sprawdź ile Dżuli zużywają komputery podczas tych kilkadziesięciu tysięcy odsłon i ile Dżuli wymagało stworzenie tych stron ;)

Zrobię obliczenia z czapy, ciekawe o ile się pomylę.

  • dajmy na to, że jedno odświeżenie bardzo ciężkiej strony to 100J (musiałaby być cholernie ciężka, no nie?)
  • sto tysięcy odsłon tej strony to 10MJ
  • zapotrzebowanie kaloryczne piwniczaka to 2000 kcal
  • 2000 kcal = 8368 kJ, zaokrąglijmy w górę do 10MJ
  • wychodzi na to, że dobowe zapotrzebowanie kaloryczne piwniczaka to tyle samo dżuli co sto tysięcy odsłon bardzo ciężkiej strony
  • 2000 kcal to ok 2.3 kWh a to kosztuje chyba < 2 PLNy
  • pijąc zimną herbatę zamiast ciepłej przez tydzień zaoszczędzisz więcej prądu niż przy odchudzeniu super ciężkiej i dość popularnej strony na cały rok i to zakładając, że proces odchudzania strony zabiera 0 energii

:]

1
Wibowit napisał(a):

Zrobię obliczenia z czapy, ciekawe o ile się pomylę.

Bardzo ciekawe obliczenia ale pomijasz w nich koszty mózgo-roboczo-godzin po stronie odbiorcy.

Wolno ładująca się (5-10s) strona to +100% do wk... po stronie użytkownika. A to oznacza wzrost ciśnienia krwi i zużycia energii. W skrajnych wypadkach użytkownik potrafi się rozgrzewać aż do czerwoności, przenosząc swoją frustrację również na inne jednostki i wywołując u nich pobudzenie wtórne.

Biorąc pod uwagę powyższe zależności, pojedyncza wolno działająca, ciężka strona kosztuje naszą gospodarkę tysiące jobo-osobo-godzin miesięcznie. I to pomijając już nawet skorelowane koszty późniejszej opieki medycznej tak sfrustrowanych jednostek.

0

Wszechobecna biurokracja generuje więcej raka mózgu (+ straconego czasu i energii) niż kilka wolno ładujących się stronek.

1

Okazuje się, że w 2017 zespół sześciu badaczy w Portugalii z trzech różnych uniwersytetów postanowił zbadać to pytanie:
https://thenewstack.io/which-programming-languages-use-the-least-electricity/
https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf

0

Ale tu nie chodzi o szybkość ładowania się stron w internecie. Inaczej… implementacja rozwiązania problemu energochłonności w zastosowaniach konsumenckich jest tylko jakąś końcówką dla poważniejszego problemu.

Jest sobie komputer. Powiedzmy sobie taki Tianhe-2. Razem z chłodzeniem potrzebuje on 24MW zasilania. Dużo to czy mało? Rzecz w tym, że problemy, które przetwarzane są na tego typu maszynach, mogą długotrwale obciążać taki komputer i tym samym konsumować ogromne ilości prądu. I w tym momencie zaczyna się liczyć każdy cykl procesora, bo to są całkiem spore pieniądze.

@Wibowit, a takie obliczenia to warto sobie zrobić za pomocą np. miernika zużycia energii. Ciekaw rzeczy wychodzą.

1

To Tianhe-2 też się programuje w JavaScripcie? Raczej są inne wymagania jeśli chodzi o apki dla Kowalskiego i apki na superkomputery. Przyzwyczajenia czy time-to-market nie są najważniejsze w przypadku superkomputerów, bo tam producent i klient to ten sam zespół.

0

@Wibowit: oj byś się zdziwił, w czym się to obecnie programuje (zastosowania z zakresu ML to raczej python niż C). Nie zakładałbym też, że komputery te nie są używane komercyjnie. W przypadku chińczyków zapewne tak jest, że nie sprzedają mocy, ale amerykanie już tak. Zresztą nasz lokalny Prometeusz z AGH jest dostępny komercyjnie.

1

Pythona używam tylko do skryptów, ale ten język to raczej jest do tworzenia glue code. Kluczowe elementy biblioteki standardowej ma zaklepane w C (w przeciwieństwie np do Javy, w której biblioteka standardowa jest napisana w całości w Javie), a pełno Pythonowych bibliotek do obliczeń jest napisanych w dużej mierze w C. Przy odpowiedniej gimnastyce większość czasu procesora spędzona jest w natywnym kodzie napisanym w C, a nie w interpreterze Pythona. Tak mi się wydaje przynajmniej (ale zaznaczę jeszcze raz, że ekspertem od Pythona nie jestem).

0

Nie bez powodu farmy komputerowe facebooka ulokowane zostały w pobliżu grenladnii.

1

Gdyby Facebook chciał być naprawdę eko to trzymałby swoich programistów w klatkach i wrzucał do nich marchewki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1