NukeBoards - Kreatywność przede wszystkim
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  DownloadDownload
RejestracjaRejestracja  ZalogujZaloguj

Odpowiedz do tematu
Poprzedni temat :: Następny temat
Przesunięty przez: Aleks
10-03-2012, 15:09
[MMF2] Optymalizacja i parę uwag
Autor Wiadomość
QuickSilver 
Kapral


Pojedynki: tak
Posty: 18

135 Prestiż
Wysłany: 10-03-2012, 15:04   [MMF2] Optymalizacja i parę uwag

Witam, chciałbym się tu podzielić z wami paroma uwagami dotyczącymi MMF2.

Spotkałem się z paroma stwierdzeniami i chciałbym tu publicznie na ten temat odpowiedzieć.

"Stosowanie dzielenia jest złe" - to prawda, dzielenie jest dla procesora większym obciążeniem iż inne operacje jednak w obecnych czasach kompilatory są tak zaprojektowane, aby kiedy napotkają operacje dzielenia zoptymalizowały ją jeśli jest to możliwe.


"Nie warto stosować pętli uruchamianej tylko raz" - Bardzo złe podejście do zastosowania pętli i ograniczanie jej możliwości wynika właśnie z takiego toku myślenia. Za pomocą jedno obrotowej pętli możemy w MMF2 dokładnie przepisać algorytm z dowolnego języka programowania do kodu MMF2 ponieważ czasami tylko tak można bez użycia rozszerzeń odtworzyć pętle z bardzo głęboko zagnieżdżonymi IF oraz ELSE. Pętle jedno obrotowe można też zastosować jako wywołanie jakiejś funkcji zamiast używania grup zdarzeń lub też do stworzenia SZABLONU FUNKCJI. Ostatnim dobrym przykładem jest tu stworzenie opcji, która zapyta użytkownika o zapis danych przed zamknięciem programu czyli po kliknięciu X w okienku ma pokazać się dialog box pytający o zapisanie danych, nie zapisanie lub anulowanie zamykania programu czego nie da się zrobić w MMF2 bez pętli z jednym obrotem.

"Warto przechowywać dane liczbowe w MMF-owych obiektach listy"- Tfuuu.... Każdy obiekt listy dostępny w MMF2 przechowuje tylko dane TEKSTOWE i nie należy używać go do przechowywania cyfr ponieważ konwersja z Cyfry na text i odwrotnie jest bardzo kosztowna. Każda konwersja dla tekstu o długości N znaków wywołuje NAJMNIEJ N DZIELEŃ przez 10 w procesorze! Dla tego przypadku zamieszczam wam przykład dla algorytmu sortowania typu bubble sort czyli bardzo wolnego i prostego sortowania.

Kod C++:


Kod:

template <class T>
void bubble_sort(T* tab, int n) {
bool swapped; // Czy zamieniono w ostatnim obrocie?

do {
swapped = false;
for (int i = 0; i < n - 1; ++i) {
if (tab[i] > tab[i + 1]) {
swap(tab[i], tab[i + 1]);
swapped = true;
}
}
} while (swapped);
}


I kod MMF2, gdzie Pętla A realizuje Algortym z szybkością C++, a B oparta jest o list object.

http://speedy.sh/nxjV3/boubletest.mfa

"MMF2 nie jest w stanie dorównać C++" - Jest ponieważ można w niego wpisać dowolny kod c++ za pomocą wtyczek lub Call DLL. Taka strategia pozwala na dorównanie szybkością językowi C++.

"Nie piszę w C++ bo umiem tworzyć tylko konsolowe aplikacje bez obsługi okienek" - Super , masz okazję użyć MMF2 do stworzenia okienek i podpięcia pod te okienka własnego kodu C++ dzięki czemu nie musisz uczyć się programować okienek. Jeśli powiesz, że nie wiesz jak robić wtyczki to zrób DLL jest łatwiej i szybciej i wydajniej.



Na chwilę obecną to wszystko, ale postaram się zamieścić więcej przykładów w przyszłości.
 
     
Minty 
Stwórczyni
omc dr fizyki


Pojedynki: być może
Pomogła: 259 razy
Posty: 3446

33789 Prestiż
Wysłany: 10-03-2012, 22:56   

QuickSilver napisał/a:
dzielenie jest dla procesora większym obciążeniem

W praktyce wykonanie działania nie ma obecnie większego znaczenia, co innego rozpoznanie o jakie działanie chodzi. To jeśli chodzi o MMF2. W np. C++ różnica między mnożeniem a dzieleniem jest żadna, jeśli tylko optymalizacja jest pomyślna. To szczególnie dotyczy liczb zmiennoprzecinkowych.
 
     
Fanotherpg 
Porucznik
I'm livin' proof


Pojedynki: tak
Skype:
Pomógł: 8 razy
Posty: 821

14370 Prestiż
Wysłany: 20-03-2012, 23:05   

Trzeba wziąć pod uwagę że w MMF2 w pierwszej kolejności wykonywane jest dzielenie potem mnożenie (odwrotnie do normalnego procesu).
_________________
Indie since 1997.
 
 
     
Fadex 
Legenda
#4; #12; #18; #20; #21; #27


Pojedynki: nie
Pomógł: 105 razy
Posty: 1773

51612 Prestiż
Wysłany: 21-03-2012, 12:46   

Confirmed.

Kod:
3 * 100 / 3

zwraca wynik 99 (czytaj - najpierw dzieli całkowicie, a potem mnoży, wbrew rozsądkowi i kolejności działań - od lewej do prawej)
_________________
If it doesn't have to work, I can optimize any code to a runtime of zero. What's your superpower?
wat
 
 
     
Fanotherpg 
Porucznik
I'm livin' proof


Pojedynki: tak
Skype:
Pomógł: 8 razy
Posty: 821

14370 Prestiż
Wysłany: 26-03-2012, 21:07   

Jest to uwaga od samego Yvesa. Anyway jakbyś zrobił

(3*100)/3 to najpierw pomnoży - nawiasy mają pierwszeństwo)
_________________
Indie since 1997.
 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

PSK Cytaty Klikibaza - kopia wszystkich klików Klikipedia - encyklopedia o tworzeniu gier Discord KlikCzat Zaproszenie
Daj piniondza Wielkie Muzeum Klikowe

Powered by phpBB modified by Przemo © 2003 phpBB Group