Tworzenie projektu... czyli powstanie i ewolucja Enigma@Home

Zaczęty przez TJM, 27 Lipiec 2007, 16:22

TJM

Dzisiaj postaram się coś wymodzić, posiedzę trochę nad samym źródłem może uda się co nieco optymalizacji wyskrobać.

W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.

Troll81

Sorka za wprowadzenie w błąd :) zapomniałęm że w pracy jednego kompa podpiąłem pod enigmę.

buninek

Cytat: TJM w 06 Październik 2008, 01:49
Czas dorzucić trochę do pieca %-)

gcc -Wall -W -O2 -finline-functions -funroll-loops -ffast-math -mtune=athlon64 -march=k8 -fomit-frame-pointer -fschedule-insns
Próbowałem nowych propozycji z gcc 4.3.1. Niestety kompilator nie akceptuje -fschedule-insns, wywala błąd związany z hillclimb.c. Bez tej flagi jest ok, ale czas słabszy. Wieczorem spróbuję z gcc 3.4.

RAD-Poland

Cytat: TJM w 06 Październik 2008, 01:49
Czas dorzucić trochę do pieca %-)

gcc -Wall -W -O2 -finline-functions -funroll-loops -ffast-math -mtune=athlon64 -march=k8 -fomit-frame-pointer -fschedule-insns

290s benchmark na A64 2.2GHz, 32bit - przy 64 bitowej aplikacji powinno jeszcze spaść

Linux64 + Athlon 64 X2 2,0@2,3 + gcc-4.2.3-6mnb1

302 sek (GCC -Wall -pedantic -funroll-all-loops -fomit-frame-pointer -march=x86-64 -mtune=athlon64 -O3 -pipe)
300 sek (GCC -Wall -pedantic -funroll-all-loops -march=x86-64 -mtune=athlon64 -O2 -pipe)

294 sek (gcc -Wall -W -O2 -finline-functions -funroll-loops -ffast-math -mtune=athlon64 -march=k8 -fomit-frame-pointer -fschedule-insns)
287 sek (gcc -Wall -W -O2 -finline-functions -funroll-loops -ffast-math -mtune=athlon64 -march=x86-64 -fomit-frame-pointer -fschedule-insns)

lepiej

   
WCG:
PG:         YOYO:

     

buninek

#564
Oh Yeah Yeah :D
Przeniosłem się z kompilacją w system z gcc 3.4 i poszło.
Efekty świetne :)
było 245 (moja propozycja)
teraz 191 TJM,TJM,TJM
brawo brawo ::)

EDIT:
W boju wypada gorzej niż w benchmarku, ale i tak powinno być kilka procent zysku.

RAD-Poland

super buninek
przelicz kilka próbek czy się nie posypią i udostępniaj (teraz to można będzie liczyć) :D

   
WCG:
PG:         YOYO:

     

buninek

#566
Wyniki benchmarku a rzeczywistego liczenia toszkę się różnią, ale i tak będą znacznie lepsze.
zysk na próbce awgly100_1_1
wcześniej śr ok 5500
teraz powinno być ok 4900-5000s
Trudno jednoznacznie stwierdzić. Komp jest teraz leciutko obciążony innymi zadaniami ok 1-5%.
Mogę udostępnić statyczną wersję. Nie wiem czy nie lepiej będzie jeśli zrobi TJM.
Podpowiedz gdzie wrzucić a zaraz będzie gotowa aplikacja.

EDIT:
wyniki dla awgly100_1_1
było ok 5500s
jest ok 4620s
Nowa aplikacja powinna przyspieszyć o ok 30-40% w stosunku do starej aplikacji (optymalki) udostępnianej przez TJM.
Mowa o amd x2 x86_64 linux. Jak będzie w innych przypadkach nie wiem.
Jeśli TJM nie ma nic przeciwko mogę ją udostępnić.

EDIT2:
Jeśli ktoś jest zainteresowany wersją statyczną lub dynamiczną (x86_64) pod linuksa podajcie namiar gdzie ją wrzucić.
wyniki się potwierdzają
wu awgly100_0_1..
było 3060
jest 2476
Spróbuję jeszcze skorzystać z podpowiedzi TJM.

TJM

Udostępniaj, ja z gotowymi exekami poczekam aż wyskrobę jeszcze coś więcej.
Jeśli chcesz spróbować jeszcze czegoś, otwórz plik score.c i przed wszystkimi funkcjami *score (np. uniscore, biscore, triscore) podopisuj inline (np. inline double biscore()) - to trochę dopala aplikację, niestety nie na wszystkich systemach. Na niektórych efekt jest ujemny. Exek jest po tym trochę większy ale to nie ma żadnego znaczenia.
Teoretycznie w score.c można też wszystkie len-15 i len-3 pętlach for zamienić na zmienną typu int zadeklarowaną wcześniej i obliczoną przed pętlą - według jednego z moich znajomych zapis len-x w pętli powoduje, że przy każdej iteracji wartość ta jest obliczana, więc jedokrotne obliczenie jej przed pętlą powinno dać jakiś efekt - niestety żadnego wzrostu wydajności nie zauważyłem, ale na razie testuję tylko windows/gcc 3.2.

Teoretycznie udało mi się też podpiąć ICC pod Visual Studio na Windows. Sęk w tym, że nie bardzo widzę tam jakieś opcje konfiguracji kompilatora a dodatkowo jeszcze po dodaniu flag specyficznych dla ICC progs w ogóle nie chce się kompilować, wywala że podaję nieznane parametry command-line - z tego wnioskuję, że kompilator Intela mimo że podpięty, nie działa jak należy.

W ogóle trzeba by jakoś usystematyzować wiedzę o systemach/procesorach i najlepszych dla nich optymalizacjach, bo powoli sam zaczynam się w tym gubić.

Dorzucam do puli exek Windows/VC++ 6.0 + standardowe optymalizacje - czas benchmarku na Q6600 porównywalny do najlepszej ze starych aplikacji, lekkie rozrzuty na poziomie błędu pomiarowego, przy krótkich zadaniach około 1% wolniejszy, przy dłuższych 2-3% szybszy - udostępnię jakiegoś snapshota jak trochę wszystko ogarnę.

Małe usprawnienie dla windows - w pliku job*.xml (w zasadzie dwóch plikach) -o results.txt można zmienić na -o nul - obetnie to zawsze kilka sekund z zadania. Na linuksie powinno zadziałać -o /dev/null ale nie testowałem
Plik results nie jest do niczego potrzebny i w następnych wersjach aplikacji już go nie będzie.

W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.

buninek

Cytat: TJM w 06 Październik 2008, 19:24
Udostępniaj, ja z gotowymi exekami poczekam aż wyskrobę jeszcze coś więcej.
Jeśli chcesz spróbować jeszcze czegoś, otwórz plik score.c i przed wszystkimi funkcjami *score (np. uniscore, biscore, triscore) podopisuj inline (np. inline double biscore()) - to trochę dopala aplikację, niestety nie na wszystkich systemach. Na niektórych efekt jest ujemny.

zmieniłem, zmiana w benchmarku to 2s (zawsze coś)
zainteresownia nową wersją nie ma
nie wiem jak dokładnie wykonujesz wersję statyczną, bo chyba tylko taka ma sens
LDFLAGS="-s -static"

Mori

Ja jestem zainsteresowany dowolnym usprawnieniem pod Win32 XP SP3 dla A64.

RAD-Poland

rewelacja  ;D

Linux64 + Athlon 64 X2 2,0@2,3
224 sek (64bit - enigma_static buninek)

   
WCG:
PG:         YOYO:

     

AiDec

Cytat: RAD-Poland w 06 Październik 2008, 21:22
rewelacja  ;D

Linux64 + Athlon 64 X2 2,0@2,3
224 sek (64bit - enigma_static buninek)


No dobrze, a teraz poprosze plik .exe ktory klikne dwa razy i nic wiecej nie bede musial robic. Taka mala user-friendly optymalke ;D.



Bo jest paru kumpli :),
Bo jest parę w życiu dobrych chwil...


Moja wizytowka i sygnaturka

buninek

#572
Ja takowej nie jestem w stanie wykonać. Nie mam windowsa.
I narzędzi.

Cytat: RAD-Poland w 06 Październik 2008, 21:22
rewelacja  ;D

Linux64 + Athlon 64 X2 2,0@2,3
224 sek (64bit - enigma_static buninek)

Ja byłem tylko inspiratorem. Flagi kompilacji to zasługa TJM.
Niech udostępnia jak naszybciej publicznie.

Szopler

Cytat: TJM w 06 Październik 2008, 19:24
...
Małe usprawnienie dla windows - w pliku job*.xml (w zasadzie dwóch plikach) -o results.txt można zmienić na -o nul - obetnie to zawsze kilka sekund z zadania. Na linuksie powinno zadziałać -o /dev/null ale nie testowałem
Plik results nie jest do niczego potrzebny i w następnych wersjach aplikacji już go nie będzie.

Ma być "-o null" a nie "-o nul" ?

TJM


W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.

buninek

#575
aplikacja enigma najnowszy build z wszystkimi poprawkami przedstawionymi przez TJM

wersja statyczna  działająca pod linuksem x86_64 jak i x86 (32-bit)
http://www.adrive.com/public/fa21685fb9718b4920686a7776bbef3493b2cae74be457303f69f991843c58ac.html

optymalizacje tylko dla procesorów amd
choć będą działać(?!) również z procesorami intela (efektów nie znam)
oczywiście wymagane odpowiednie app_info.xml
i zmiana nazwy pliku na enigma_0.76_i686-pc-linux-gnu

kompilator gcc wersja 3.4.6
CFLAGS=-Wall -W -O2 -finline-functions -funroll-loops -ffast-math -mtune=athlon64 -march=x86-64 -fomit-frame-pointer -fschedule-insns
zmainy w kodzie score.c
dodane inline double biscore() przed definicjami *score

EDIT:
nadać prawo wykonywalności chmod +x

3Rni

a co z amd`ekami pod win  :( bedzie cos bardziej optymistycznego  ;D

buninek

#577
TJM może wykorzystaj do budowy windowsowych exeków pakiet mingw32-gcc.
Ja nie mam doświadczenia, wiedzy i zbytnio jak testować aplikacji (może w wirtualce).
Wieczorem poeksperymentuję.

TJM

Kombinowałem już z mingw, niestety w ogóle nie udało mi się dopasować źródeł tak żeby je 'łyknął'. Przynajmniej standalone wersja, bo zdaje się Dev-cpp też korzysta z mingw i tam progsy się elegancko kompilują.
Praktycznie pod każde środowisko trzeba trochę edytowac pliki,  pod Visual Studio 2005 i Visual C++ 6 jest już dość sporo komplikacji, bo trzeba 'dorobić' funkcję biblioteki której pod Windows nie ma.
Z wczorajszych testów widzę, że kompilator Intela pod Windows można sobie odpuścić, chyba że ktoś rozkmini jak używać go bez żadnego środowiska. Zintegrowany z Visual C++ 6 daje mierne wyniki, najlepszy był na poziomie średnich optymalizacji z deva i to jeszcze kosztem wycięcia paru niepotrzebnych funkcji z exeka (nie mających wpływ na liczenie ale kompilator coś do nich sapał).

Widzę że zamiast bawić się kompilatorami, lepiej podłubać w samych źródłach. Np. usunięcie fragmentu który wypisuje aktualny najlepszy wynik do stdout/pliku (całkowicie zbędne) oszczędza parę sekund na każdym WU - w początkowej fazie najlepszy wynik zmienia się nawet kilka razy na sekundę.

W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.

buninek

#579
zainstalowałem mingw32 i udało się skompilować.
test wydajnościowy robiłem w win xp uruchomionym pod xenem (maszyna wirtualna)
proponuję przeprowadzić test wydajnościowy na benchmarku enigmy
moje wyniki
05:43s dla starej aplikacji i nowa 04:24s (zaznaczam moje wyniki mogą być błędne)
http://www.adrive.com/public/c16b671ff279e0f7e318e38a8df39089619af034f73a5c9668ad6acec5d334bf.html

kompilacja pod mcpu=k8 dla procesorów AMD
z pośpiechu nie zmieniłem nazwy i rozszerzenia
Mógłby ktoś sprawdzić wydajność pod windowsem w benchmarku nową aplikację?

RAD-Poland

#580
Athlon 64 x2 3800 (2,0@2,3) Linux64

2703,62 sek   8,45 pkt   (32bit-PIV intel TJM)
2239,52 sek   8,45 pkt   (64bit-AMD64 gcc Buninek -O2 bez -fomit-frame-pointer)
1726.65 sek   8,45 pkt   (new_enigma_static 6.10.2008)

3848,54 sek   15,46 pkt   (64bit-AMD64 gcc Buninek -O2 bez -fomit-frame-pointer)
2967,23 sek   15,46 pkt   (new_enigma_static 6.10.2008)

4483,00 sek   18.27 pkt   (64bit-AMD64 gcc Buninek -O2 bez -fomit-frame-pointer)
3457,06 sek   18.27 pkt   (new_enigma_static 6.10.2008)

widać ogromny wzrost wydajności w stosunku do poprzedniej optymalizowanej wersji, a co dopiero do podstawowej
(niestety nie mam zapisków, ale wygląda, że nowa app jest ze 2 razy szybsza)  :)

   
WCG:
PG:         YOYO:

     

Mori

Głupie pytanie Buninku: mam dodać .exe i podmienić jaki plik tymi 73 kB-ami?

buninek

tak
tylko to jest wersja niepewna (alfa :D)
może lepiej sprawdzić w benchmarku

Mori

Tak nie odpowiada na pytanie jaki plik podmienić xP Ale nic, najwyżej próbki wysypie, a jak nie, to popędzę jak autostradą ;)

Kasiunia is now Buninek-Enigma powered.

buninek

#584
Jeśl wcześniej korzystałeś z optymalki.
Wstrzymaj projekt i pozostałe, wyjdź z mangera.
Zmień nazwę na taką jak wcześniejsza + dodaj rozszerzenie exe.
Podmień  i licz.
Trojanów ani rootkitów nie zawiera. Kod kompilowany bez żadnych zmian.
Nie jestem pewien tylko wydajności. Stabilność aplikacji i wyniki będą ok.

Mori

Zobaczymy, jakie wyniki będą.

Inne pytanie - na dom2 używać optymalki do CelaD? Czy tej do Tuacośtam? Może w niedzielę będę miał szansę podmienić tam appsy, więc chcę się upewnić, bo potem znowu nie będę miał dostępu.

TJM

Ze stabilnością różnie może być, różne już cyrki widziałem. W każdym razie projekt ma 3 fazy walidacji i żaden błędny rezultat się nie przeciśnie, mimo że niektóre błędne rezultaty nie są oznaczane jako invalid - część da się poddać 'recyklingowi' - dotyczy to rezultatów gdzie header ma różne drobne błędy - to się zdarza jeśli aplikacja się sypie i nie uaktualnia części danych, niektóre błędy serwer jest w stanie poprawić przeliczając dane. Takie zadania widzę w logu, póki co żadnych błędów nie ma.

Możesz spróbować wyskrobać jakiś exek pod c2d w mingw ? Może byłby szybszy od tego z dev-cpp, tam jest jakaś bardzo stara wersja kompilatora.

W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.

TJM

Cytat: Mori w 07 Październik 2008, 17:30
Zobaczymy, jakie wyniki będą.

Inne pytanie - na dom2 używać optymalki do CelaD? Czy tej do Tuacośtam? Może w niedzielę będę miał szansę podmienić tam appsy, więc chcę się upewnić, bo potem znowu nie będę miał dostępu.

PIV/CeleronD, powinno dać dość dużego kopa.

W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.

Mori

A takie pytanie, bo w tych job-ach...

w 1.14:
<application>enigma_0.76_windows_intelx86.exe</application>

w 1.22:
<application>enigma2_0.76_windows_intelx86.exe</application>
A enigma2 jako plik nie występuje... Jest ok? Bo tak jest defaultowo w paczkach od TJMa z forum E@h.

buninek

Cytat: Mori w 07 Październik 2008, 17:30
Zobaczymy, jakie wyniki będą.
Jeszcze raz sprawdziłem rezultat benchmarku w wirtualce i nie jest chyba tak dobrze.
W drugim teście różnica była tylko o 10s

Dwa to jest optymalizowane pod amd x2 i phenomy (?), a ty bodajże używasz A64.
To wersja raczej do testów. Choć możesz przeliczyć jedną, dwie próbki i podzielić się rezultatami

Mori

Cytat: TJM w 07 Październik 2008, 12:02Widzę że zamiast bawić się kompilatorami, lepiej podłubać w samych źródłach. Np. usunięcie fragmentu który wypisuje aktualny najlepszy wynik do stdout/pliku (całkowicie zbędne) oszczędza parę sekund na każdym WU - w początkowej fazie najlepszy wynik zmienia się nawet kilka razy na sekundę.

Buninek, TJM - uwzględnicie to i wydacie nowy set exe'ków?

@Buninek:
At, pochodzi na razie, jak będzie strasznie źle to się podmieni na oryginalnie-TJMową.

I tak, A64 3200+ @ 2.3

TJM

Cytat: Mori w 07 Październik 2008, 17:44
A takie pytanie, bo w tych job-ach...

w 1.14:
<application>enigma_0.76_windows_intelx86.exe</application>

w 1.22:
<application>enigma2_0.76_windows_intelx86.exe</application>
A enigma2 jako plik nie występuje... Jest ok? Bo tak jest defaultowo w paczkach od TJMa z forum E@h.


W app info jest wpis <open_name> który dodaje drugą nazwę logiczną dla enigma_0.76...

W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.

buninek

#592
Cytat: TJM w 07 Październik 2008, 17:31
Możesz spróbować wyskrobać jakiś exek pod c2d w mingw ? Może byłby szybszy od tego z dev-cpp, tam jest jakaś bardzo stara wersja kompilatora.
Mam jeszcze zrobiony pod mcpu=nocona
http://www.adrive.com/public/8ae498ac7deffe46ed107c35c0f1c3937dcf072bac49cd4e7ff4e21948731ecf.html
TJM ja jestem w sumie laikiem. Musiałbyś podpowiedzieć troszkę co i jak.
Generalnie cflags jest identyczny jak pod linuksem.
Żeby zrobić pod różne cpu muszę przenieść się pod inny system. To nie problem. Powiedz jakie mcpu +cflags i juź kompiluję.

EDIT:
Z mingw pod Arch linux nie szła kompilacja, ale pod PLD bez problemu.
PLD instaluje się z chroota. Generalnie nie ma instalatora dystrybucji (jest na pld live - wersja beta).
Proponuję ściągnąć np. PLD Live i zainstalujesz mingw bez problemu. Oczywiście do restartu kompa (jednorazowa instalacja).
Jest to banalnie proste. Odpalasz pld live  uruchamiasz  z konsoli "poldek". Pobiera bazę pakietów i instalujesz paczki.
Ewentualnie zainstaluj pld na dysku.

Ok, spróbuję ugotować wedle przepisu.

EDIT2:
Poldek ma dopełnianie nazw 'tabem'. Instalacja pakietów w poldku "i pakiet1 pakiet2 ...". Żeby uzyskać pomoc wpisz help.
Żadne zależności cię nie interesują. Tym zajmie się poldek.
Potrzebujesz  crossmingw32-gcc..., crossmingw32-runtime... może być i crossmingw32-w32api....


Mori

http://www.enigmaathome.net/result.php?resultid=1088239

1088239   1015622   7 Oct 2008 11:55:53 UTC   7 Oct 2008 16:07:16 UTC   Over   Success   Done   4,181.64   15.58   15.14

w 3x-4x% było przeliczone pod optymalką TJMa, potem przełączone na Buninka. Wygląda, że zyskałem ok. 5 minut (normalnie 1:14-1:16, teraz 1:09).

+ w jobach dorzucone -o nul, zgodnie z sugestią.

(Aczkolwiek nie wiem, czy wcześniejsze czasy są "prawdziwe" - teraz nikt kompa nie ruszał przez większość czasu, a nieraz tata gra i wtedy CPU eff. jest na poziomie 0.8x)

TJM

Spróbuj najpierw -march=core2 -O3 -pipe -fomit-frame-pointer żeby zobaczyć speed gołego exeka

następnie można dorzucićdo puli -msse albo -msse2 (również dla AMD warto sprawdzić) oraz -maccumulate-outgoing-args

potem jeszcze zrób trzeci exek, dorzuć do niego to -finline-functions -funroll-loops -ffast-math  -fomit-frame-pointer -fschedule-insns


http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.

buninek


TJM

Nie mam już dziś sił przetestować tych aplikacji, jutro z rana zobaczę. Póki co testowałem na Athlonie 64 nowe wersje - wreszcie widać konkretny przyrost wydajności, granted sięga mi 150% claimed czyli zaczyna być tak jak w przypadku Intela.

W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.

Mori

Cytat: TJM w 07 Październik 2008, 22:34granted sięga mi 150% granted.
;) To prawdziwe tylko dla zera chyba, nie?

PS. Mówisz o wersjach Linuxowych, czy będą też wersje na Win?

TJM

Póki co linuks, ale podejrzewam że pomału wyniki przeniesie się i na windows.
Kończy się pomału dominacja procesorów Intela %-)

W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.

Troll81

i dobrze :D bo ja ćwierkam na dwóch amd i 3 intelach :D