czwartek, 18 kwietnia 2013

Żarówki

Pogryzając dziś gruszkę i siedząc nad banalnym kodem wywalającym z pliku ascii niechciane znaki (bo erp eksportujący do csv zostawia "tajemnicze niewidoczne coś" jako rozdzielacze tysięcy, co w efekcie po imporcie do Excela zmienia liczby w łańcuchy tekstowe) - kodem, z którym miałem problemy z racji odejścia jakiś czas temu od programowania w C (do magisterki potrzebowałem Delphi :> ) i zapomnienia co poniektórych funkcji I/O... no dobra, większości funkcji, zacząłem się zastanawiać z jednej strony nad wydatkiem energetycznym programów z niezoptymalizowanym kodem a z drugiej nad tym, że w zasadzie porównując z Chińczykami to ja mam raj a oni niewolniczo harują nad tym by obniżyć koszty codziennie wykorzystywanych przedmiotów, stosując w ramach "elektroniki" gotowe rozwiązania i algorytmy, często odgapiane od innych.
Przy okazji przypomniałem sobie niedawno czytany komentarz o tym, że aby uzyskać na ekranie wyświetlany napis "Hello World!" jeden z kompilatorów wygenerował kilkunastomegabajtowy plik wynikowy (Java?). Dla porównania - sam napis zajmuje 12 bajtów. Mój plik po kompilacji operujący na standardowym wejściu i wyjściu po kombinacjach w kodzie, ale bez grzebania się z opcjami kompilatora niezmiennie przyjmował wartość ok 48 kilobajtów.
Kilkanaście megabajtów danych by wyświetlić 12 bajtów w standardowym strumieniu wyjściowym - na ekran - wydaje się ilością dużą. Zbyt dużą. Twierdzenie że akurat to nie było narzędzie do tego tylko do czegoś innego to nie jest żadne wytłumaczenie, przynajmniej nie dla mnie.
Za dużo dla mojego kodu wynikowego jest nawet te 48 KB (48*1024 B) - to mniej więcej tyle ile kiedyś miały komputery Spectrum czy Timex, a potrafiły trochę więcej niż wypisać 12 bajtowy tekst.
Ilość danych zapisanych na dyskach wiąże się z ilością operacji jakie musi wykonać dysk aby odczytać lub zapisać na nich informacje - wydatek energetyczny. Owszem buforowanie obniża go, ale to nie znaczy że bez kosztów - buforowania innych danych. Czyli zamiast wydatkować np 1 jednostkę energii dysk pobiera kilkanaście, kilkadziesiąt lub nawet kilkanaście tysięcy razy więcej energii niż wystarczyłoby do uzyskania określonego, identycznego efektu. Jeśli chodzi o sam dysk. A podzespołów które muszą te dane przesyłać, zapamiętywać i przetwarzać?
Zwiększa się ilość prądu. Ilość operacji które wykonuje procesor. I to niekoniecznie komputera typu PC. Pralki. Telewizora. Kuchenki. Wszystkiego co zawiera w sobie choć trochę programowalnej elektroniki, bo wszak ze statyczną, po jej zaprojektowaniu i wytworzeniu zbyt wiele zrobić obecnie się nie da.
Uniwersalne hybrydowe krystaliczne programowane struktury to wszak przyszłość widziana okiem twórców Stargate choć EPROMy wszak mamy już dziś. Swoją drogą ciekawe ile dziś kosztowałoby wytworzenie takiej uniwersalnej kostki zawierającej w sobie element programujący i zestaw wejść i wyjść plus przetworniki świetlnoelektryczne (przynajmniej początkowo)? W końcu - była para, jest elektryczność, przyszłość może jest w świetle lub może inaczej - falach w pełnym zakresie częstotliwości?
Tak czy inaczej problem pozostaje - wydatków energetycznych pojedynczych urządzeń. Produkowanych jak najtańszym kosztem i sposobem z gotowych elementów, które bez względu na to czy efektem ma być 12 bajtowy napis, czy przetworzenie z wykorzystaniem zoptymalizowanego kodu czy też niezoptymalizowanego, ale mieszczącego się w określonych granicach przyzwoitości - daje ok. 48KB kod, który musi zostać przetworzony przez dane urządzenie. I który nadal zajmuje więcej niż miały do dyspozycji pierwsze komputery 8 bitowe.
Czy współczesne komputery są lepsze od 8 bitowych?
Nie tak dawno zaczęto masowo wymieniać żarówki (lampy żarowe) na "energooszczędne" źródła światła. W ramach oszczędności energetycznych w miarę bezpieczne szklane bańki wypełnione gazami szlachetnymi zamieniono na wypełnione oparami rtęci świetlówki, pogarszające jakość prądu i przy niższym poborze mocy przez nakładanie się harmonicznych mogące zniszczyć transformatory działające w sieci. Rtęć jest w stanie wywołać poważne zatrucia, jeśli akurat ktoś będzie wdychać opary ze stłuczonej świetlówki (...o przyszło mi na myśl jak ktoś grający bardzo wysoki dźwięk na hmm czymś wywołuje masowe pękanie szkła w mieszkaniach, w tym świetlówek powodując mniejsze lub większe zatrucia i różne objawy - iście apokaliptyczne - w sumie grać nie musi, wystarczy jakiś silniejszy wstrząs czy tąpnięcie). Nie żebym propagował oświetlenie LED - jak na razie zakres generowanych częstotliwości światła tez zbyt ciekawie nie wygląda. A koszt energetyczny wytworzenia i utylizacji? Czy gdyby żarówek tradycyjnych nie postarzano sztucznie by nabijać kabzę producentom tylko udoskonalano to co się ma wykorzystując pełnię dostępnych materiałów, metod i odkryć nie dałoby się wytworzyć energooszczędnej żarówki żarowej?
W końcu jeśli tworzy się programistów których kod bez względu na jakość i tak będzie zajmować albo 48KB albo nawet kilkanaście megabajtów danych to co można powiedzieć o wytwórcach żarówek, dla których jedynym powodem istnienia jest sprzedaż żarówek - kupowanie ich przez ludzi? Wydatek energetyczny? Więcej rtęci w płucach przypadkowych osób? Zwiększona ilość uszkodzonych urządzeń w sieci elektrycznej - transformatorów - dla których efekt nakładania się harmonicznych może okazać się zabójczy lub przynajmniej skracający jego żywotność? I konieczność ponownego kupowania danego urządzenia? Czy moi drodzy czytelnicy naprawdę wierzą w obniżenie kosztów łącznych wynikających z wymiany tańszych żarówek, droższych w użytkowaniu o konstrukcji nie zmienianej od lat - może poza postarzaniem w celu opłacalności produkcji, na droższe o żywotności czasem mniejszej wynikającej z tego że elementy składowe świetlówek nie wytrzymują fatalnego wpływu zbiorczego prądu - harmonicznych - w instalacji elektrycznej? Elementy składowe produkowane wszak najtańszym kosztem na rzecz kapitalistów przez ludzi dla których podstawą pożywienia jest ryż.
Dlaczego kompilator generuje tyle nadmiarowego kodu? Czy opłacalna byłaby sprzedaż komputera którego wydajność po 5 latach od zakupu nie spada bo stosuje się zarówno optymalne narzędzia jak i optymalny kod zmniejszający zapotrzebowanie energetyczne urządzeń gdyby nie było nowych systemów które aby wyświetlić 12 bajtów na ekranie potrzebują więcej zasobów niż ten komputer sprzed 10 lat aby uzyskać ten sam efekt?
Aby być ekologicznym programistą trzeba faktycznie generować optymalny - "zielony" kod dla urządzeń końcowych, z wykorzystaniem optymalnych kompilatorów i ich przełączników.
Żeby mieć ekologiczne światło w mieszkaniu, trzeba zrozumieć jak ono działa, z czego się składa i jaki wpływ na organizmy żywe mają zawarte w niej substancje oraz czy idzie je wtórnie przetworzyć by uzyskać bezpieczny produkt końcowy. Nieoptymalne narzędzia i oceny dawane ogółowi są wszak w stanie się zemścić, gdy masowość urządzeń na bazie których działają zacznie skutkować kosztami opieki zdrowotnej przy efekcie nieświadomych zatruć czy utylizacji śmieci których nie będzie gdzie upchać.
Czasem trzeba spojrzeć kto trzyma w rękach kompilatory, czasem trzeba zrozumieć skąd bierze się chęć kształcenia programistów a czasem kto ma patent na żarówki. Te które mogłyby świecić po 100 lat.
PS.
Następnego dnia ściągnąłem nowszą wersję darmowego środowiska z innym kompilatorem. Pliki wynikowe od zoptymalizowanego ok. 213 KB do 268 KB. A ja myślałem że te 48 KB to dużo dla ok. 390 bajtowego kodu wykorzystującego dwie funkcje z stdio.h :) Optymalizacja rozmiaru pliku wynikowego dla kompilatora MinGW GCC 4.7.2 32-bit dała ok. 23 KB.

Brak komentarzy:

Prześlij komentarz