-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!news.task.gda.pl!not-for-mail
From: Edek <e...@g...com>
Newsgroups: pl.comp.programming
Subject: Re: Podpis cyfrowy większej ilości podmiotów
Date: Mon, 15 Apr 2013 14:49:56 +0000 (UTC)
Organization: CI TASK http://www.task.gda.pl/
Lines: 101
Message-ID: <kkh42k$81t$1@news.task.gda.pl>
References: <kkdqot$5rl$1@node2.news.atman.pl> <kkdtr5$9n9$1@node1.news.atman.pl>
<2...@g...com>
<kkec03$n4h$1@node2.news.atman.pl>
<a...@g...com>
<kkfd89$o9b$1@news.task.gda.pl>
<0...@g...com>
NNTP-Posting-Host: 178-36-247-220.adsl.inetia.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.task.gda.pl 1366037396 8253 178.36.247.220 (15 Apr 2013 14:49:56 GMT)
X-Complaints-To: a...@n...task.gda.pl
NNTP-Posting-Date: Mon, 15 Apr 2013 14:49:56 +0000 (UTC)
User-Agent: Pan/0.139 (Sexual Chocolate; GIT bf56508 git://git.gnome.org/pan2)
Xref: news-archive.icm.edu.pl pl.comp.programming:202580
[ ukryj nagłówki ]Dnia Sun, 14 Apr 2013 21:10:46 -0700 po głębokim namyśle M.M. rzekł:
> W dniu poniedziałek, 15 kwietnia 2013 01:14:17 UTC+2 użytkownik Edek
> napisał:
>
> Zaraz zaczniemy się "kłócić" o to gdzie leży granica pomiędzy
> optymalizacją algorytmiczną a implementacyjną :)
Jedna często wymusza drugą.
>> Właśnie nie, dobrze napisany w C++ kod będzie odporny na działanie
>> czasu. Jedynie trzeba założyć jakiś margines fluktuacji.
> Zgodzę się że będzie, ale dodam, że nie ma cudów. Dobrze napisany kod w
> C++ nawet będzie coraz lepszy, bo kompilatory się wciąż rozwijają, a kto
> wie, może twórcy procesorów zaczną procesory robić tak, aby szybciej
> wykonywały taki kod, jaki kompilator jest w stanie wygenerować. Ale
> właśnie nie ma cudów. Kompilator sam nie zorientuje się, że w takich
> szachach mamy 64 pola na planszy i docelowy procesor też ma 64 bity w
> rejestrze. Kompilator nie zmieni sam szachownica[64], na kilka masek z
> long long.
Procesory tak się rozwijają. M.in. Haswell i wcześniejsze są znacznie
bardziej tolerancyjne dla kiepskiego kodu. Wykonują kod szybciej
nie dlatego, że mają nowe istrukcje - chociaż to też - tylko np.
lepiej sobie radzą z odczytem częściowych słów jak i maskowaniem
przy użyciu części słowa. To powoduje, że można czytać drugiego
shorta a odczyt pierwszego shorta będzie niezależny i branch prediction
pozwoli obie instrukcje wykonywać równocześnie - a wcześniej drugi
short maskował pierwszego i ten wzór wykonywał się wolniej ze względu
na fałszywą zależność danych. Jest mnóstwo takich drobnych różnic.
To prawda, że kompilator sam nie zamieni booleanów na rejestr
bitów, ale można by już sprawdzić czy bitset nie ma implementacji
takiej, że to zadziała automagicznie. Twórcy kompilatorów tylko
na to poświęcają mnóstwo swojego czasu, często więcej niż
pojedynczy programista jest w stanie poświęcić na swój kod.
Optymalne jest wykorzystanie włąsciwości kompilatora i dopisanie
ręcznie tego, czego kompilator nie załatwia. W zasadzie dopiero
rozumiejąc kompilator można faktycznie poznać procesor - ja
sam często odkrywam, że to co wygląda fatalnie na pierwszy
rzut oka jest celowym działaniem desantu intela w gcc i hula
jednak lepiej.
> Teraz pytanie: czy zmiana struktury danych z szachownica[64], na
> bierki[12] jest optymalizacją implementacyjną czy algorytmiczną?
Taką i taką, jeżeli zmiana użytych prymitywów wpływa na algorytm.
Jako praktyk powiem, że jak zwał tak zwał, ma działać :). Z teoretycznego
punktu widzenia już nie wystarczy uwzględniać złożoności algorytmicznej,
bo sprzęt ma bardzo skomplikowane właściwości.
W zasadzie zamiana bool[38] na bitset[38] to "implementacyjna"?
> Na pewno bierki[12] nie jest dobrze napisanym programem w C++, bo jak
> gdzieś long long nie będzie 64-bitowy, to może nie działać.
Stosuje się alternatywne implementacje fragmentów sprawiających kłopot.
>> Dochodzi też margines opłacalności - programista często kosztuje więcej
>> niż sprzęt (heh, powiedziałem co wiedziałem ;).
> Właśnie dlatego że eksperymentowanie jest bardzo drogie i czasochłonne,
> chciałbym wiedzieć od razu jaka implementacja okaże się najlepsza :)
I bardzo dobrze, zawsze lepiej pomyśleć przed a nie tylko po.
>> Poza HPC i paroma niszami nikomu nie zależy na +-10% jeżeli jest to
>> kosztem funkcjonalności. Jeszcze jeden wyjątek: kod działający na
>> milionach maszyn.
> Myślę że w szachach dzięki dobrej implementacji uzyskuje się
> przyspieszenie 2-4 razy a nie 10%. Test ataku na reprezentacji
> szachownica[64] to iterowanie po polach i cztery warunki do sprawdzania
> czy nie przekroczyliśmy zakresu, a na reprezentacji bitowej to kilka
> operacji logicznych i kilka odczytów masek z tablic.
Po pierwsze: cały program przyspieszył 2-4 razy czy fragment? Ja
mówiłem o całym. Po drugie szachy są niszą. Z tego co się orientuję
w innych analizach danych część ludzi wyciska każdy %, a część
używa Javy. Oba podejścia mają sens, ja preferuję "najpierw wygoda
a potem przepisujemy krytyczne algorytmy". Rozsądnie napisany kod nie
jest 2x wolniejszy od optymalnego, najczęściej jest w granicach 10-20%
max i 5-6% jako całość.
>> To jest sztuka. Nie jest sztuką próbować do skutku aż się znajdzie
>> optymalny przy tych a nie innych opcjach i wersji, tylko napisać tak,
>> żeby trzymał się w najlepszych 10%.
> Właśnie to jest pytanie czy idzie o te 10% czy o 200-400%. Weźmy naiwne
> mnożenie macierzy i zoptymalizowane. Jakie to są różnice?
> Coś mi się przypomina że 500% - 1000%.
Dobry przykład na porażkę teoretycznej złożoności bez uwzględnienia
sprzętu, tutaj cache.
Chciałbym coś odróżnić. Jest jedna granica pomiędzy naiwnym lub zepsutym
kodem a takim, który jest napisany rozsądnie. Druga granica dopiero
jest pomiędzy rozsądnym a "optymalizowanym". W tej pierwszej
usuwałem babole na 30x szybciej, w tej drugiej już +-10% to bardzo dużo.
Zaraz ktoś rzuci przykład małego algorytmu z lepszym zyskiem,
ale mam na myśli setki tysięcy linii kodu.
--
Edek
Następne wpisy z tego wątku
- 15.04.13 18:43 M.M.
- 15.04.13 21:40 firr kenobi
- 15.04.13 21:42 AK
- 15.04.13 23:23 Edek
- 16.04.13 08:39 AK
- 16.04.13 10:47 M.M.
- 16.04.13 12:49 bartekltg
- 16.04.13 15:01 Miroslaw Kwasniak
- 16.04.13 19:10 AK
- 17.04.13 00:36 Edek
- 17.04.13 09:48 M.M.
- 17.04.13 10:30 firr kenobi
- 17.04.13 11:21 M.M.
- 17.04.13 12:21 firr kenobi
- 17.04.13 12:29 firr kenobi
Najnowsze wątki z tej grupy
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-03 Trybik
- 2025-07-04 Renault Symbioz
- 2025-07-04 Architektura IIIRP: Wyjątkowa, a prymitywniejsza niż stodoła pod zaborami
- 2025-07-04 Warszawa => International Freight Forwarder <=
- 2025-07-04 Wrocław => SAP ABAP Developer <=
- 2025-07-04 Warszawa => Mid/Senior IT Recruiter <=
- 2025-07-04 Białystok => Kotlin Developer <=
- 2025-07-04 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo
- 2025-07-04 Warszawa => Specjalista wsparcia IT - analiza techniczna sprzętu IT <
- 2025-07-04 Zakrzewo => Konsultant SAP HCM <=
- 2025-07-04 Łódź => Programista Mainframe (z/OS, Assembler) <=
- 2025-07-04 Szczecin => Key Account Manager IT <=
- 2025-07-04 Warszawa => Technik IT - Konfiguracja i Wsparcie Sprzętowe <=
- 2025-07-04 Warszawa => Technique IT - Hardware Configuration and Support <=
- 2025-07-04 Warszawa => Specjalista ds. Sprzętu IT i Wsparcia Technicznego <=