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.
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. |
|
|
|
|
|