-
1. Data: 2009-05-17 09:31:27
Temat: jak napisać szybki program
Od: Marteno Rodia <m...@o...pl>
Góglałem, ale nie udało mi się znaleźć syntetycznej odpowiedzi na
pytanie. Interesuje mnie, jak należy pisać program, żeby wykonywał się
on szybko. Z reguły pisuję w Javie, teraz mam napisać program (a
właściwie część do większego programu) w C++, który wykonuje pewne
obliczenia potrzebne do kompresji wideo. Będzie dużo danych i dużo
liczenia.
Ogólnie wiem, że:
1) dużo czasu zjadają np. operacje wejścia/wyjścia
2) w miarę możliwości warto przydzielać pamięć statycznie, a nie
dynamicznie
3) unikać nadmiaru rzeczy wykonywanych w pętli (np. sprawdzanie
jakichś warunków) - innymi słowy:
4) tak przebudować algorytm, żeby zrobić to samo wykonując mniejszą
ilość operacji.
Pytania:
1) Czy mam rację?
2) Co jeszcze o czym nie wiem?
pozdr.
Marcin
-
2. Data: 2009-05-17 10:19:52
Temat: Re: jak napisać szybki program
Od: "Wojtek Pietruszewski" <gotohell@once.>
"Marteno Rodia" <m...@o...pl> wrote in message
news:94fc50cb-2939-4dfe-80ad-3afd6a8f5b26@r34g2000vb
i.googlegroups.com...
Góglałem, ale nie udało mi się znaleźć syntetycznej odpowiedzi na
pytanie. Interesuje mnie, jak należy pisać program, żeby wykonywał się
on szybko. Z reguły pisuję w Javie, teraz mam napisać program (a
właściwie część do większego programu) w C++, który wykonuje pewne
obliczenia potrzebne do kompresji wideo. Będzie dużo danych i dużo
liczenia.
Ogólnie wiem, że:
1) dużo czasu zjadają np. operacje wejścia/wyjścia
2) w miarę możliwości warto przydzielać pamięć statycznie, a nie
dynamicznie
3) unikać nadmiaru rzeczy wykonywanych w pętli (np. sprawdzanie
jakichś warunków) - innymi słowy:
4) tak przebudować algorytm, żeby zrobić to samo wykonując mniejszą
ilość operacji.
Pytania:
1) Czy mam rację?
2) Co jeszcze o czym nie wiem?
pozdr.
Marcin
Jeżeli będą wykonywane operacje arytmetyczne możesz spróbować wstawek
asemblerowych.
-
3. Data: 2009-05-17 10:19:56
Temat: Re: jak napisać szybki program
Od: Jacek Czerwinski <...@...z.pl>
Marteno Rodia pisze:
> Góglałem, ale nie udało mi się znaleźć syntetycznej odpowiedzi na
> pytanie. Interesuje mnie, jak należy pisać program, żeby wykonywał się
> on szybko. Z reguły pisuję w Javie, teraz mam napisać program (a
> właściwie część do większego programu) w C++, który wykonuje pewne
> obliczenia potrzebne do kompresji wideo. Będzie dużo danych i dużo
> liczenia.
>
> Ogólnie wiem, że:
>
> 1) dużo czasu zjadają np. operacje wejścia/wyjścia
> 2) w miarę możliwości warto przydzielać pamięć statycznie, a nie
> dynamicznie
Nie należy 'zbyt często' dynamicznie (w małych kawałkach). Obawiam sie
że tak wielkich danych nie obsłużysz statycznie. Optymalizacja pamięci
czasem jest zbieżna z opt.szybkości, czasem przeciwstawna.
> 3) unikać nadmiaru rzeczy wykonywanych w pętli (np. sprawdzanie
> jakichś warunków) - innymi słowy:
> 4) tak przebudować algorytm, żeby zrobić to samo wykonując mniejszą
> ilość operacji.
>
> Pytania:
> 1) Czy mam rację?
Częściowo
> 2) Co jeszcze o czym nie wiem?
Tak
0) Że program ma być najpierw dobry, potem zoptymalizowany. Jak
zaczniesz amatorsko optymalizować, możesz źle skończyć.
a) Że kompilator potrafi bardzo dużo zoptymalizować tylko wystarczy mu
nie przeszkadzać. Najczęściej w wyrażeniem w pętli sobie poradzi (nawet
lepiej od człowieka)
b) że algorytm wyższy intelektualnie (z mocnym zapleczem
teoretyczno-matematycznym, bardziej przemyślany) może być o rzędy
wielkości szybszy od amatorskiego. I temu nie dorównają wyłączania przed
pętlę itd. Na video się nie znam, ale porównaj (studencki przykład)
sortowania od naiwnego do profesjonalnego. Na słowo 'kompresja' jestem
pewien, że algorytm naiwny będzie 100x wolniejszy.
c) właściwości procesora (cache 1i2, sprzętowa optymalizacja pewnych
operacji/typów, konwersje, położenie w pamięci) aż do wykorzystania
okazji do zrównolegleń we współczesnych zabawkach
W konkluzji:
I) nie optymalizować.
II) czytać dobre książki z jednej strony z branży, z drugiej o CPU i
kompilatorach optymalizujących
Nawiasem mówiąc w świecie Javy też powinieneś się spotkać z zaleceniami,
po części o algorytmach, po drugie o nie przeszkadzaniu JVM.
-
4. Data: 2009-05-17 10:21:39
Temat: Re: jak napisać szybki program
Od: Jacek Czerwinski <...@...z.pl>
Wojtek Pietruszewski pisze:
>
>> "Marteno Rodia" <m...@o...pl> wrote in message
>> news:94fc50cb-2939-4dfe-80ad-3afd6a8f5b26@r34g2000vb
i.googlegroups.com...
>> Góglałem, ale nie udało mi się znaleźć syntetycznej odpowiedzi na
>> pytanie. Interesuje mnie, jak należy pisać program, żeby wykonywał się
>> on szybko.
>
> Jeżeli będą wykonywane operacje arytmetyczne możesz spróbować wstawek
> asemblerowych.
Are You sure?
PS. Wojtek zrób coś z czytnikiem
-
5. Data: 2009-05-17 12:21:05
Temat: Re: jak napisać szybki program
Od: beł kociątko <u...@i...sk>
"Jacek Czerwinski" zabełkotał:
> Wojtek Pietruszewski pisze:
> Are You sure?
> PS. Wojtek zrób coś z czytnikiem
ale co?
-
6. Data: 2009-05-17 12:38:22
Temat: Re: jak napisać szybki program
Od: A.L. <a...@a...com>
On Sun, 17 May 2009 12:19:52 +0200, "Wojtek Pietruszewski"
<gotohell@once.> wrote:
>
>
>Jeżeli będą wykonywane operacje arytmetyczne możesz spróbować wstawek
>asemblerowych.
Postukaj sie w glowe
A.L.
-
7. Data: 2009-05-17 12:41:11
Temat: Re: jak napisać szybki program
Od: "Wojtek Pietruszewski" <gotohell@once.>
"Jacek Czerwinski" <...@...z.pl> wrote in message news:guoofk$u1t$2@news.onet.pl...
> Wojtek Pietruszewski pisze:
>>
>>> "Marteno Rodia" <m...@o...pl> wrote in message
>>> news:94fc50cb-2939-4dfe-80ad-3afd6a8f5b26@r34g2000vb
i.googlegroups.com...
>>> Góglałem, ale nie udało mi się znaleźć syntetycznej odpowiedzi na
>>> pytanie. Interesuje mnie, jak należy pisać program, żeby wykonywał się
>>> on szybko.
>>
>> Jeżeli będą wykonywane operacje arytmetyczne możesz spróbować wstawek
>> asemblerowych.
>
> Are You sure?
No jeżeli program ma działąć pod windowsem, to oczywiście
> PS. Wojtek zrób coś z czytnikiem
>
Chodzi Ci o oznaczanie poprzedniej wiadomości symbolem "<"?
Wiadomość ma ustawione Content-Transfer-Encoding: quoted-printable, Outlook się
na tym wywala, chyba że pominąłem coś w konfiguracji.
-
8. Data: 2009-05-17 12:46:25
Temat: Re: jak napisać szybki program
Od: Maciej Pilichowski <b...@S...FM>
Jacek Czerwinski wrote:
> W konkluzji:
> I) nie optymalizować.
Nie zgodze sie. Czesc optymalizacji mozna zrobic w zasadzie nie myslac, jak
np. przyzwyczajenie sie, aby zawsze pisac ++var zamiast var++ (o ile
merytorycznie nie zachodzi koniecznosc tego drugiego), dwa ze czesc
optymalizacji jest trywialnych, jak np.
int x;
vs
static int x;
(tu mocno przejaskrawiam oczywiscie)
trzy, ze czesc programow bez optymalizacji po prostu nie skonczy dzialac, a
cztery ze w tej dzialce, ktora ja sie zajmuje musze dokonac brutalnej
optymalizacji, aby uzyskac wyniki i zobaczyc, czy to co robie ma sens i
wtedy podjac decyzje o merytorycznej optymalizacji.
Wszystko jednak z glowa -- poswiecanie godziny, aby program przyspieszyl z
10 minut do 9 minut i 50 sekund nie ma dla mnie sensu, poswiecenie tygodnia
aby program przyspieszyl z 15 godzin do 10 godzin ma dla mnie sens.
milego dnia, hej
-
9. Data: 2009-05-17 12:49:26
Temat: Re: jak napisać szybki program
Od: "Wojtek Pietruszewski" <gotohell@once.>
"A.L." <a...@a...com> wrote in message
news:e91015hthrv9j4jbeuor6qj5hevg8dmh9i@4ax.com...
>>Jeżeli będą wykonywane operacje arytmetyczne możesz spróbować wstawek
>>asemblerowych.
>
> Postukaj sie w glowe
>
> A.L.
a czym takim rażą Cię wstawki asemblerowe w c++, używałeś kiedyś?
-
10. Data: 2009-05-17 13:57:45
Temat: Re: jak napisać szybki program
Od: A.L. <a...@a...com>
On Sun, 17 May 2009 14:49:26 +0200, "Wojtek Pietruszewski"
<gotohell@once.> wrote:
>
>"A.L." <a...@a...com> wrote in message
>news:e91015hthrv9j4jbeuor6qj5hevg8dmh9i@4ax.com...
>
>>>Jeżeli będą wykonywane operacje arytmetyczne możesz spróbować wstawek
>>>asemblerowych.
>>
>> Postukaj sie w glowe
>>
>> A.L.
>
>a czym takim rażą Cię wstawki asemblerowe w c++, używałeś kiedyś?
Kiedys nei bylo waterklozetow i chodzilo sie do slawojek
A.L.