BOINC@Poland

Projekty => Nieskategoryzowane => Enigma@home => Wątek zaczęty przez: Agbar w 16 Marzec 2016, 22:57

Ankieta
Pytanie: Jesteś zainteresowany/zainteresowana instalacją Enigma Optima. Jaki masz główny system operacyjny?
Opcja 1: Windows 64 bit głosy: 10
Opcja 2: Windows 32 bit głosy: 1
Opcja 3: Linux 64 bit głosy: 3
Opcja 4: Linux 32 bit głosy: 0
Opcja 5: Inny głosy: 0
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 16 Marzec 2016, 22:57
Teaser
Witajcie!
Po dłuższej przerwie wróciłem do mojego projektu optymalizacji enigmy (https://github.com/Agbar/enigma-optima). Widzę, że w międzyczasie sesef wydał swoją wersję, na szczęście moja jest szybsza (przynajmniej u mnie).

Trochę historii
W styczniu 2014 miałem wersję która działała zdecydowanie szybciej niż jakakolwiek kompilacja oryginalnego kodu 0.76.2. Poza tym, że mała część zadań zwracała błędy. Do tego na nieszczęście dostałem nową pracę i skończył mi się wolny czas %)

Projekt cały czas czekał na swoją kolej i w tym roku postanowiłem wygospodarować trochę "zasobów" na enigmę. Po czysto technicznych zmianach, jak migracja z Mercuriala (IMO przegrał wojnę z gitem) i przeniesienie z Bitbucket na Github mogłem zacząć odświeżać sobie znajomość kodu :attack:

Aktualny stan
Dość szybko znalazłem błąd, który prawdopodobnie był odpowiedzialny za niepoprawne wyniki sprzed dwóch lat. Wygląda na to, że to był naprawdę prosty błąd. Najwięcej czasu zajęła mi nauka google test (https://github.com/google/googletest) (który jest bardzo prosty w użyciu, przynajmniej na tym poziomie, który jest wystarczający).

Szczegóły
Ta optymalizacja ma zaimplementowane 4 ścieżki (wersje):

  • Zoptymalizowaną wersję standardową.
  • Wersję SSSE3 (Intel Core 2+/Merom)
  • Wersję AVX (Sandy Bridge+)
  • Wersję AVX2 (Haswell)

Program wykrywa automatycznie dostępny zestaw instrukcji (CPUID) i wybiera najnowszy.
x86 < SSSE3 < AVX < AVX2

Zoptymalizowana wersja standardowa
Wymagany jest dowolny procesor. Kod został zmodyfikowany m.in. tak, aby symulować w GCC najważniejszą optymalizację, jaką robił kompilator Intela. Dzięki temu szybkość była porównywalna.

Wersja SSSE3
Najlepiej przetestowana. Mam dwa komputery, oba z procesorami Intel i5/i7 (pierwszej generacji). Działa szybko dzięki SIMD w szczególności operacji PSHUFB.

Wersja AVX
Kod źródłowy praktycznie nie różni się od wersji SSSE3, jednak może używać VEX (https://en.wikipedia.org/wiki/VEX_prefix). Nie spodziewam się dużej różnicy, szczególnie, że z VEXem wiąże się kilka pułapek wydajnościowych.1
Ogólnie sprawdzone działanie w SDE (https://software.intel.com/en-us/articles/intel-software-development-emulator)
Szybkość nieznana.

Wersja AVX2
Kod praktycznie nie przetestowany. Z tego co przeczytałem przetwarzanie rozszerzone na 256 bitów, ale pamiętam, że nie wiąże się to z dwukrotnym przyspieszeniem dekodowania.

Bardzo szybkie porównanie szybkości
Test jest bardzo prosty, użyłem My old Windows benchmark (http://www.enigmaathome.net/forum_thread.php?id=17)
Wyniki z Intel i5-M580 (SSSE3).





vanillasesefAgbar
obciążony43.930.737.4
nieobciążony20.313.711.2

Jak widać przy systemie obciążonym w 100% innymi programami jest tylko 15% przyspieszenia w porównaniu do standardowej kompilacji (prawdopodobnie Hyper Threading, enigma używa też relatywnie dużo pamięci cache). Wersja sesefa daje około 30% przyspieszenia.
Odwrotnie wygląda sytuacja przy nieobciążonym systemie: odcinamy 45% czasu działania w porównaniu do 33% u sesefa.

Co dalej?
Nie wiem, czy sesef opublikował kod źródłowy swojej wersji. Powinien, bo enigma jest licencjonowana GNU GPLv2 i wymaga publikacji kodu źródłowego. Jestem ciekawy jakie zmiany wprowadził, z tego co widziałem w zdekompilowanym kodzie musiał znaleźć inne podejście. Właściwie tylko szybko rzuciłem okiem na ten plik i wolałbym nie tracić czasu na reverse engineering. Wydaje mi się, że sesef "żyje" na BOINC Polish National Team. Jeżeli ktoś z Was mógłby go tam zagadnąć, będę wdzięczny.

Skompilowany plik udostępnię, gdy przejdzie mi dostatecznie dużo zadań na E@H. Powinno wystarczyć koło 100, nie chciałbym publikować wersji, która niepotrzebnie będzie zaśmiecać serwer. Co prawda TJM pisał mi kiedyś, że serwer da sobie z tym radę, ale po co go męczyć (już i tak error rate jest 5.6%...)

Pierwszą wersję chciałbym opublikować wewnętrznie dla naszej drużyny, żeby mieć w miarę kontrolowany zbiór użytkowników. Trzeba sprawdzić, jak aplikacja liczy w rzeczywistych warunkach, nie tylko na moich komputerach ;)

Wydaje mi się, że da się ten program przyspieszyć jeszcze o jakieś 10% (w porównaniu do moich aktualnych wyników) więc w sumie działałaby 2 razy szybciej niż standardowa. A jeszcze po dodaniu voodoo od sesefa, kto wie? Może zwracać wynik jeszcze przed rozpoczęciem obliczeń :fright:

Co o tym myślicie? Kto by się zgłosił do przetestowania?




  • Przejście ze zwykłego/starego kodowania instrukcji na kodowanie VEX wiąże się z dość długą karą w cyklach. Problem do rozwiązania, ale możliwe, że skończymy z dwoma plikami: SSSE3 i AVX+
Tytuł: Enigma Optima
Wiadomość wysłana przez: krzyszp w 16 Marzec 2016, 23:57
Jeżeli będziesz miał 64bit Linux, to ja bardzo chętnie :)
Tytuł: Enigma Optima
Wiadomość wysłana przez: PoznanskaPyra w 17 Marzec 2016, 00:38
Brzmi zachęcająco, jak by co chętny jestem. Linux/windows.
Tytuł: Enigma Optima
Wiadomość wysłana przez: sknd w 17 Marzec 2016, 06:37
też potestuję chętnie. Linux.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Cyfron w 17 Marzec 2016, 07:10
też mogę pomóc - Windows 10 x64, i5 Skylake
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 17 Marzec 2016, 10:06
Dzięki za propozycje. Moje WU są jeszcze w drodze, więc trzeba chwilę zaczekać.

Wersja dla Linuxa powinna działać. W programie są chyba dwa miejsca zależne od OS: obsługa przerwania działania (Ctrl-C w Windows) i generator liczb losowych.
Trochę za słabo znam platformę, ale wydaje mi się że jak skompiluję np. na Arch-Linuksie, to będzie działać na innych? Poprawcie mnie, jeżeli się mylę.1

W międzyczasie w sprawie szybkości:
Uważaj co mierzysz!

Doznałem małego olśnienia i postanowiłem sprawdzić CPU time zamiast mierzenia czasu zegarowego.













vanillasesefAgbar
obciążony (czas zegarowy) 40.927.130.3
obciążony (czas CPU)240.926.322.4
obciążony (vanilla CPU%)100%65.1%55.7%
nieobciążony (czas zegarowy)20.513.811.2
nieobciążony (czas CPU)220.013.210.8
nieobciążony (vanilla CPU%)100%66.4%54.1%

Widać, że dzisiaj mam inaczej obciążony procesor ;) Nie liczy się WCG, tylko zadania enigmy. Za to bez wątpliwości moja wersja działa dużo szybciej.
O ile dobrze pamiętam zmieniłem ustawianie priorytetu na BACKGROUND (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686277.aspx), co oprócz obniżenia priorytetu planowania procesora obniża też priorytet innych zasobów. Przypuszczam, że dłuższy czas wykonania jest spowodowany oczekiwaniem na IO: enigma loguje każdy kolejny najlepszy wynik.
To może nie jest najlepszy wybór dla tych, którzy mają dedykowane maszyny do BOINC i chcieliby osiągnąć największą przepustowość (WU/h).




  • Arch jest jedną z niewielu dystrybucji z GCC 5+ w standardzie. Nie chcę się bawić z kompatybilnością z innymi kompilatorami, bo nie warto.
  • CPU time jest zmierzony z dokładnością -0/+500ms, czyli czasy mogą być większe nie więcej niż o 0.5s, ale to nie zmieni wyników zasadniczo.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 18 Marzec 2016, 19:34
Przeliczyłem jakieś 200 próbek: 0 błędów. Jutro zrobię release, bo dzisiaj nie mam już na to czasu.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Troll81 w 18 Marzec 2016, 23:09
 :respect: a nie chciałbyś pooptymalizwoać innych apek :D
Tytuł: Enigma Optima
Wiadomość wysłana przez: WUPES w 19 Marzec 2016, 07:57
Chętnie potestuję :  32 WinXP SP3 POSR,  IntelQ9550 2,83GHz, BOINC client 7.4.26
Pozdrawiam
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 19 Marzec 2016, 12:10
Opublikowałem pierwszą wersję alpha (https://github.com/Agbar/enigma-optima/releases/tag/v1.0.0-alpha.1).

Plik jest zaszyfrowany. Hasło udostępnię przez wiadomości prywatne tu na forum. Zainteresowanych proszę o kontakt. Po prostu chcę wiedzieć kogo męczyć pytaniami, bo to bardzo wczesna wersja.


  • W tej wersji obsługiwany jest tylko Windows x64.
  • WUPES, planowałem nie wspierać 32 bitów. Twój procesor wspiera SSSE3, więc może się przekonam. Możliwe, że dotyczy cię problem z SSSE3 opisany poniżej.
  • Wersja dla Linux będzie dostępna jak tylko zainstaluję sobie Arch-Linux, niestety wcześniej muszę zdecydować, czy użyć Hyper-V, czy VBox. Oba rozwiązania mają poważne wady :(

W archiwum znajdują się 3 pliki,

  • basic używa zoptymalizowanego kodu bez SIMD. I tak jest szybsza niż wersja sesefa. Wg zasad poprzedniego testu osiąga ok. 12s. Ten kod praktycznie wymaga architektury x64 - ważna jest liczba rejestrów sprzętowych.
  • SSSE3 wymaga przynajmniej Intel Core 2+/Merom. Niestety w jądrze Merom operacja PSHUFB jest powolna (wg. agner.org). Dopiero któraś nowsza wersja będzie dostatecznie szybka (Wolfdale, ale może coś wcześniej). Nie ma wersji AVX, bo byłaby identyczna z SSSE3.
  • AVX2 wymaga przynajmniej procesora Haswell. Nie wiem jak szybko działa ta wersja.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 20 Marzec 2016, 18:20
Jak uruchomić optymalkę

Dla tych, którzy nigdy nie instalowali zoptymalizowanej enigmy małe How-To.

Zoptymalizowane programy BOINC obsługuje przez anonimową platformę (http://boinc.berkeley.edu/wiki/Anonymous_platform). Ten mechanizm pozawala na uruchomienie klienta na egzotycznej platformie, np. kiedyś ARM; pozwala też na użycie własnych/specjalnych kompilacji - tak działają np. optymalki dla SETI (http://lunatics.kwsn.info/index.php) i wszystkie inne.

Co jest potrzebne

  • Zainstalowany BOINC podłączony do projektu enigma@home ;)
  • Release enigma-optima (https://github.com/Agbar/enigma-optima/releases/tag/v1.0.0-alpha.1)
  • Pliki konfiguracyjne app_info.xml  itd. Najprościej użyć tych przygotowanych przez TJM na oficjalnym forum (http://www.enigmaathome.net/forum_thread.php?id=17&sort_style=8&start=0). Bezpośredni link do c2d.zip (http://dl.getdropbox.com/u/1912652/c2d.zip)

Co z tym zrobić

Zakładam, że BOINC jest zainstalowany standardowo i dane są w c:\ProgramData\BOINC.1

Jeżeli masz inną optymalkę, wystarczy przy zatrzymanym BOINC podmienić exe (np. enigma_0.76_windows_intelx86.exe) na wybrany plik enigma-optima. Wystarczy skopiować i zmienić nazwę na zgodną z app_info.xml.

Operacje opisane są w widoku zaawansowanym BOINC Manager (w menu Widok-> Widok zaawansowany...)

Do rzeczy:
Opjonalne: Instalacja z oczekiwaniem na zakończenie zadań
Po zainstalowaniu optymalki BOINC porzuci wszystkie poprzednie zadania z projektu enigma@home. Przed kontynuowaniem prawdopodobnie chcesz doliczyć aktywne zadania do końca.
1. Wybierz zakładkę Projekty
2. Wybierz projekt Enigma@home
3. Z menu po lewej wybierz "Nie pobieraj danych"
4. Wybierz zakładkę Zadania
5. Wybierz "Pokaż wszystkie zadania" z menu po lewej
6. Wybierz wszystkie nierozpoczęte zadania Enigma@Home
7. "Przerwij" wybrane zadania przyciskiem w menu po lewej
8. Poczekaj aż zakończą się rozpoczęte zadania Enigma@Home
9. Wykonaj instalację Enigma Optima (poniżej)
10. Wybierz zakładkę projekty
11. Wybierz projekt Enigma@Home
12. Wybierz "Pobieraj nowe dane" w menu po lewej

Instalacja Enigma Optima
Właściwy proces instalacji.

1. Zatrzymaj klienta BOINC (Plik -> Zamknij podłączonego klienta...)
2. Otwórz folder projektu c:\ProgramData\BOINC\projects\www.enigmaathome.net\
3. Rozpakuj do niego pliki z c2d.zip. Należy pominąć folder c2d. Wszystkie pliki powinny być bezpośrednio w folderze projektu, np. c:\ProgramData\BOINC\projects\www.enigmaathome.net\app_info.xml.
4. Rozpakuj plik enigma-optima.basic.exe do folderu projektu.
5. Zmień nazwę enigma-optima.basic.exe na enigma_0.76_windows_intelx86.exe - nadpisz istniejący plik.
6. Uruchom ponownie klienta BOINC. (Plik -> Wybierz komputer...; pozostaw pola puste i kliknij OK)

Alternatywnie:
Jeżeli twój procesor ma AVX2 lub SSSE3 użyj pliku z odpowiednią nazwą zamiast enigma-optima.basic.exe.




  • Jeżeli masz zmienione opcje instalacji, to jako wytrawny hacker nie potrzebujesz tej instrukcji :)

Tytuł: Enigma Optima
Wiadomość wysłana przez: Szopler w 20 Marzec 2016, 18:24
Zmiana nazwy pliku - błąd. Zamiast tego powinien być plik app_info.xml.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 20 Marzec 2016, 19:24
Cytat: Szopler w 20 Marzec 2016, 18:24
Zmiana nazwy pliku - błąd. Zamiast tego powinien być plik app_info.xml.

Jesteś pewien, że przeczytałeś całość?
Plik app_info.xml pochodzi z c2b.zip i jest kopiowany.
A jeżeli chodzi Ci o to, żeby odpowiednia nazwa była w pliku app_info.xml, możesz przygotować taki plik. Na razie nie miałem na to czasu.
Tytuł: Enigma Optima
Wiadomość wysłana przez: PDH w 20 Marzec 2016, 19:56
Tak na szybko przetestowałem aplikacje na kilkunastu WU. Wszystkie przeliczone bezbłędnie
Procesor i7-4710HQ, liczone 3 zadania jednocześnie. Zegar 2,5-3,3GHz skacze ze względu chłodzenie laptopowe, przez to wyniki mogą być niemiarodajne:

Wersja Win32 SSE4.2 v2.0 by Sesef


Wysłane Czas zgłoszenia lub termin   Status Czas uruchomienia(sek) Czas procesora(sek) Punkty Aplikacja
20 Mar 2016, 13:38:02 UTC 20 Mar 2016, 13:49:46 UTC Completed and validated 686.05 683.05 30.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 14:34:01 UTC 20 Mar 2016, 14:57:23 UTC Completed and validated 1,377.84 1,373.20 60.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 14:34:01 UTC 20 Mar 2016, 14:57:23 UTC Completed and validated 1,380.18 1,375.30 60.00 Enigma 0.76b
Anonymous platform (CPU)


Wersja SSE3 Optima:

20 Mar 2016, 16:33:28 UTC 20 Mar 2016, 16:48:48 UTC Completed and validated 649.80 646.80 30.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 16:29:21 UTC 20 Mar 2016, 16:44:40 UTC Completed and validated 658.39  654.88   30.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 16:23:07 UTC 20 Mar 2016, 16:40:29 UTC Completed and validated 636.62 633.58 30.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 16:18:57 UTC 20 Mar 2016, 16:33:28 UTC Completed and validated 623.67 620.09 30.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 15:57:43 UTC 20 Mar 2016, 16:18:57 UTC Completed and validated 1,204.88 1,201.16 52.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 15:57:43 UTC 20 Mar 2016, 16:23:07 UTC Completed and validated 1,338.75 1,334.06 60.00 Enigma 0.76b
Anonymous platform (CPU)


Wersja AVX2

20 Mar 2016, 18:18:33 UTC 20 Mar 2016, 18:32:54 UTC Completed and validated 599.96 597.39 30.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 18:18:33 UTC 20 Mar 2016, 18:32:54 UTC Completed and validated 604.66 601.45 30.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 18:02:18 UTC 20 Mar 2016, 18:28:45 UTC Completed and validated 1,311.78 1,307.08 60.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 17:51:12 UTC 20 Mar 2016, 18:18:33 UTC Completed and validated 653.50  648.36 30.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 17:31:28 UTC 20 Mar 2016, 17:55:21 UTC Completed and validated 1,186.19 1,181.44 60.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 17:31:28 UTC 20 Mar 2016, 17:55:21 UTC Completed and validated 1,170.60 1,166.80 60.00 Enigma 0.76b
Anonymous platform (CPU)
20 Mar 2016, 17:31:28 UTC 20 Mar 2016, 17:55:21 UTC Completed and validated 1,174.07 1,170.11 60.00 Enigma 0.76b
Anonymous platform (CPU)


Podsumowując: Dobra Robota :p_arr:
Tytuł: Enigma Optima
Wiadomość wysłana przez: krzyszp w 20 Marzec 2016, 19:57
Moja maszyna z Windows na pokładzie ruszy jutro... Omyłkowo najpierw skopiowałem wersję AVX2 (a mam samo AVX) i niestety przekroczyłem limit dzienny.

Odnośnie ankiety - ja mam zarówno Linux64 jak i Windows64 ;)
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 20 Marzec 2016, 20:13
Cytat: krzyszp w 20 Marzec 2016, 19:57
Omyłkowo najpierw skopiowałem wersję AVX2 (a mam samo AVX) i niestety przekroczyłem limit dzienny.
Dlatego na razie to jest zamknięta alfa ;) Właściwie specjalnie upośledziłem mój program, bo mam zaimplementowaną autodetekcję - chciałem żeby była możliwość porównania różnych wersji na tej samej maszynie.
U PDH widać, że AVX2 prawdopodobnie działa szybciej niż SSSE3. Miłe.
Cytat: krzyszp w 20 Marzec 2016, 19:57
Odnośnie ankiety - ja mam zarówno Linux64 jak i Windows64 ;)
Nie chciałem za bardzo komplikować. Jak możesz wybierz ten ważniejszy wg Ciebie:)



Myślę, że dobrze jakby każdy z testerów przeliczył ok. 100 próbek zanim pojedziemy dalej. W przypadku AVX2 wolałbym mieć ich jeszcze więcej, bo nie ufam sobie sprzed dwóch lat  :ph34r:

W sprawie linuksa: walczę z instalacją Arch. Jestem noobem w partycjonowaniu dla linuksa a liveCD gparted nie chce ruszyć na Virtual Box. :shame:
Tytuł: Enigma Optima
Wiadomość wysłana przez: sesef w 20 Marzec 2016, 23:06
Cytat: Agbar w 16 Marzec 2016, 22:57
Nie wiem, czy sesef opublikował kod źródłowy swojej wersji. Powinien, bo enigma jest licencjonowana GNU GPLv2 i wymaga publikacji kodu źródłowego. Jestem ciekawy jakie zmiany wprowadził, z tego co widziałem w zdekompilowanym kodzie musiał znaleźć inne podejście. Właściwie tylko szybko rzuciłem okiem na ten plik i wolałbym nie tracić czasu na reverse engineering. Wydaje mi się, że sesef "żyje" na BOINC Polish National Team. Jeżeli ktoś z Was mógłby go tam zagadnąć, będę wdzięczny.

Obie wersje, które się pojawiły bazują na kombinacji ustawieniami Intel Compiler-a, sam kod nie był zmieniany poza drobiazgami, które umożliwiły kompilację pod win. Intel Compiler bardzo dobrze potrafi optymalizować dostęp do pamięci stąd tak dobre wyniki niezależnie od tego czy liczymy na obciążonym czy nie komputerze. Natomiast optymalizacja samego kodu jest porównywalna z innymi kompilatorami czy to gcc czy vcc i z doświadczenia najlepiej zawsze wychodził pisany z palca kod na intrinsics-ach.

Starsza wersja (v 1.x) była kompilowana z tego co pamiętam ICC z 2008 albo 2010 i tutaj nie mam pewności czy coś jeszcze się nie zmieniło bo kod wsadowy dostałem od TJM-a. Kod raczej nie do odzyskania, chyba że jakaś kopia ostała się na którymś z HDD w szafie.

Nowsza wersja (v 2.0) kompilowana ICC 2013 albo 2014 tutaj standardowy kod modyfikowany tylko na potrzeby poprawnej kompilacji.

===============================================

Swego czasu prowadziłem trochę testów z nadzieją na AVX-512 w Skylake i dostęp do instrukcji vpermw (_mm512_permutexvar_epi16), która szacunkowo powinna przyspieszyć obliczanie score o 15-20% i dodatkowo odciążyć cache.

Robiłem też testy z instrukcjami gather. W tym przypadku dla Haswella jest 5-15% wolniej niż dla standardowego kodu natomiast przy Skylake oba rozwiązania są porównywalne.

Największą bolączką tej wersji algorytmu jest losowy dostęp do cache z dość sporą ilością błędnych trafień oraz mielenie prawie tych samych danych przy każdym kolejnym score. Dane wejściowe między dwoma wywołaniami funkcji score zmieniają się w niewielkim stopniu a i tak całościowy wynik jest liczony od początku (w sporej części przy obu wywołaniach odwołania pójdą do tych samych miejsc w pamięci w lookup_table.


Na szybko przejrzałem Twoje zmiany i kod bez poważnych przeróbek Intel Compilerem się nie skompiluje więc nawet nie mam co kombinować, a z braku czasu nie będę miał kiedy go dostosować (największym problemem jest brak obsługi __attribute__ ((vector_size(16))), tutaj trzeba by albo przerabiać kod albo napisać obsługę wszystkich potrzebnych operatorów dla używanych typów + wykorzystać standardowe __m128i/__m256i). Ze względu na taki charakter kodu przypuszczam, że pod windowsem całość kompilujesz przy pomocy mingw?

btw.
Sprawdzanie czy dana wersja liczy poprawnie bazując tylko na wyniku walidacji jest trochę błędne bo walidator potrafi przepuścić nawet błędnie policzone próbki. Tutaj lepszym rozwiązaniem byłoby z przeliczonych próbek mając startowego seed-a przeliczyć te wu ponownie niemodyfikowanym kodem.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 21 Marzec 2016, 01:36
Cześć sesef!

Dzięki za zainteresowanie i uwagi.

Cytat: sesef w 20 Marzec 2016, 23:06
Obie wersje, które się pojawiły bazują na kombinacji ustawieniami Intel Compiler-a, sam kod nie był zmieniany poza drobiazgami, które umożliwiły kompilację pod win. Intel Compiler bardzo dobrze potrafi optymalizować dostęp do pamięci stąd tak dobre wyniki niezależnie od tego czy liczymy na obciążonym czy nie komputerze. Natomiast optymalizacja samego kodu jest porównywalna z innymi kompilatorami czy to gcc czy vcc i z doświadczenia najlepiej zawsze wychodził pisany z palca kod na intrinsics-ach.

Jeżeli nie było modyfikacji, to nie ma pomysłów do zaimportowania od Ciebie :(

Cytat: sesef w 20 Marzec 2016, 23:06
Swego czasu prowadziłem trochę testów z nadzieją na AVX-512 w Skylake i dostęp do instrukcji vpermw (_mm512_permutexvar_epi16), która szacunkowo powinna przyspieszyć obliczanie score o 15-20% i dodatkowo odciążyć cache.
AVX-512 jest dostępny tylko w serwerowych Skylake.
epi16 działa na shortach.  U mnie w kodzie wszystko zmniejszyłem do rozmiaru jednego bajta. Dzięki temu użycie cache jest dość niewielkie, chociaż i tak za duże. Nie pamiętam już dokładnie, ale tridict i bidict zajmują dużą część L1.
BTW. vpermw wygląda podobnie do PSHUFB, które jest kluczowe w mojej implementacji SIMD, ale działa niestety na 16 bitowych danych jak PSHUFLW/PSHUFHW. Pewnie kod z vpermw działałby szybciej niż aktualny AVX2: po rozszerzeniu wektora 8*32 na 16*32 powinno być mniej operacji potrzebnych do faktycznego obliczenia permutacji. Może nawet w jednej operacji da się to zmieścić. PSHUFB w AVX2 niestety działa jak dwie operacje PSHUFB, nie ma prawdziwego rozszerzenia na 32 bajty.

Cytat: sesef w 20 Marzec 2016, 23:06
Największą bolączką tej wersji algorytmu jest losowy dostęp do cache z dość sporą ilością błędnych trafień
Gdyby dostęp nie był losowy - czyli przewidywalny - nie mielibyśmy do czynienia z szyfrowaniem, prawda?

Cytat: sesef w 20 Marzec 2016, 23:06
oraz mielenie prawie tych samych danych przy każdym kolejnym score. Dane wejściowe między dwoma wywołaniami funkcji score zmieniają się w niewielkim stopniu a i tak całościowy wynik jest liczony od początku (w sporej części przy obu wywołaniach odwołania pójdą do tych samych miejsc w pamięci w lookup_table.
Rzeczywiście tak jest, ale wykrycie gdzie były zmiany mogłoby zająć więcej czasu niż przeliczenie od nowa. Tutaj też nie pomaga jakość oryginalnego kodu enigmy, który z pewnością "działa", ale nie wygląda jakby był napisany przez inżyniera oprogramowania ;)

Cytat: sesef w 20 Marzec 2016, 23:06
Na szybko przejrzałem Twoje zmiany i kod bez poważnych przeróbek Intel Compilerem się nie skompiluje więc nawet nie mam co kombinować, a z braku czasu nie będę miał kiedy go dostosować (największym problemem jest brak obsługi __attribute__ ((vector_size(16))), tutaj trzeba by albo przerabiać kod albo napisać obsługę wszystkich potrzebnych operatorów dla używanych typów + wykorzystać standardowe __m128i/__m256i). Ze względu na taki charakter kodu przypuszczam, że pod windowsem całość kompilujesz przy pomocy mingw?
Celowo odpuściłem sobie wsparcie dla innych kompilatorów. Skoro i tak są użyte intrinsics, które działają prawie jak wstawki assemblerowe, to kompilator nie ma pola do popisu przy automatycznej wektoryzacji. Może tylko lepiej lub gorzej zaplanować użycie rejestrów itp. A dodatkowa praca włożona w zgodność z wieloma kompilatorami raczej jest niewspółmierna do wyniku.

Cytat: sesef w 20 Marzec 2016, 23:06
Sprawdzanie czy dana wersja liczy poprawnie bazując tylko na wyniku walidacji jest trochę błędne bo walidator potrafi przepuścić nawet błędnie policzone próbki. Tutaj lepszym rozwiązaniem byłoby z przeliczonych próbek mając startowego seed-a przeliczyć te wu ponownie niemodyfikowanym kodem.
Lepiej byłoby mieć testy jednostkowe i trochę innych takich.
Nie modyfikowałem algorytmu optymalizującego (sic!, jeśli wierzyć nazwie to jest hillclimb), więc myślę, że można zaufać, że ta część działa nadal poprawnie. Zmodyfikowałem za to dekodowanie i obliczanie ocen. Tutaj na razie kod się trzyma na słowo honoru :) Pisałem go zanim odkryłem testy jednostkowe w C/C++, więc zmiany testowałem prawie ręcznie.
Jak chodzi o przeliczanie z tym samym seedem, to jest dosyć czasochłonne i wymaga modyfikacji kodu - trzeba by dodać jakiś przełącznik do linii poleceń. Wolę napisać sensowne unit testy, bo te przydadzą się przy ewentualnej dalszej modyfikacji. Na szczęście dekodowanie i wyliczanie ocen dobrze nadaje się do tego typu testów: to są dostatecznie małe fragmenty, dobrze oddzielone w kodzie (przynajmniej powinny być po moich zmianach).
Tytuł: Enigma Optima
Wiadomość wysłana przez: krzyszp w 21 Marzec 2016, 12:38
Xeon E3-1230v2:
186762368 177026030 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 8:25:39 UTC Completed and validated 2,042.51 1,989.40 60.00 Enigma 0.76b v5.32
186762367 177026031 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 9:54:41 UTC Completed and validated 2,059.98 2,000.14 60.00 Enigma 0.76b v5.32
186762366 177026043 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 5:18:03 UTC Completed and validated 1,996.71 1,967.14 60.00 Enigma 0.76b v5.32
186762365 177025987 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 10:09:26 UTC Completed and validated 3,611.07 3,524.44 105.00 Enigma 0.76b v5.32
186762362 177025952 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 4:40:09 UTC Completed and validated 2,138.48 2,002.19 60.00 Enigma 0.76b v5.32
186762361 177025951 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 5:22:11 UTC Completed and validated 2,006.69 1,954.54 60.00 Enigma 0.76b v5.32
186762359 177025969 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 10:03:27 UTC Completed and validated 3,668.55 3,578.79 105.00 Enigma 0.76b v5.32
186762358 177025968 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 1:12:14 UTC Completed and validated 2,170.62 2,017.73 60.00 Enigma 0.76b v5.32
186762357 177026045 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 1:46:09 UTC Completed and validated 2,052.35 1,964.61 60.00 Enigma 0.76b v5.32
186762356 177026044 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 5:35:47 UTC Completed and validated 1,988.06 1,961.68 60.00 Enigma 0.76b v5.32
186762355 177026046 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 3:50:53 UTC Completed and validated 2,122.70 2,006.19 60.00 Enigma 0.76b v5.32
186762354 177026047 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 7:35:32 UTC Completed and validated 2,100.24 1,997.06 60.00 Enigma 0.76b v5.32
186762351 177026050 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 7:52:00 UTC Completed and validated 2,090.49 1,997.58 60.00 Enigma 0.76b v5.32
186762350 177026049 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 7:29:09 UTC Completed and validated 2,112.88 2,053.14 60.00 Enigma 0.76b v5.32
186762349 177026051 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 2:22:06 UTC Completed and validated 2,128.00 1,999.12 60.00 Enigma 0.76b v5.32
186762348 177025921 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 8:04:27 UTC Completed and validated 2,018.32 1,988.53 60.00 Enigma 0.76b v5.32
186762347 177025920 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 8:25:39 UTC Completed and validated 2,064.70 1,978.20 60.00 Enigma 0.76b v5.32
186762345 177025918 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 3:20:42 UTC Completed and validated 2,227.00 1,997.98 60.00 Enigma 0.76b v5.32
186762340 177026016 80842 20 Mar 2016, 22:48:21 UTC 20 Mar 2016, 23:27:13 UTC Completed and validated 2,146.02 2,010.46 60.00 Enigma 0.76b v5.32
186762331 177026058 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 3:59:12 UTC Completed and validated 2,126.23 2,014.64 60.00 Enigma 0.76b v5.32
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 21 Marzec 2016, 16:59
Cytat: krzyszp w 21 Marzec 2016, 12:38
Xeon E3-1230v2:
186762368 177026030 80842 20 Mar 2016, 22:48:21 UTC 21 Mar 2016, 8:25:39 UTC Completed and validated 2,042.51 1,989.40 60.00 Enigma 0.76b v5.32
Chyba coś się nie udało przy instalacji, bo nie masz anonymous platform w wynikach. Twój host: 80842 (http://www.enigmaathome.net/host_app_versions.php?hostid=80842) ma tylko
CytatEnigma 0.76b 5.32 windows_intelx86
a np. mój 68361 (http://www.enigmaathome.net/host_app_versions.php?hostid=68361) ma dodatkowo
CytatEnigma 0.76b (anonymous platform, CPU)

Może zamieniłeś exe bez restartowania klienta BOINC?
Możesz też podać której wersji użyłeś (zakładam, że SSSE3) i mniej więcej jak długo WU liczyły się na poprzedniej wersji którą miałeś?
Tytuł: Enigma Optima
Wiadomość wysłana przez: krzyszp w 21 Marzec 2016, 17:39
Tak, SSE3, pliki wykonywalne podmieniłem.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 23 Marzec 2016, 00:58
Udało mi się zainstalować Arch Linuksa. Po instalacji systemu od zera naprawdę polubiłem ten OS  :arrr:

Mam już nawet skompilowane pliki do wrzucenia na release, tylko muszę to zebrać do kupy. W tym tygodniu mam trochę mniej czasu, więc może mi to zająć nawet ze dwa dni.

Jak idą testy na Windowsach? Czy działa szybciej i jak dużo szybciej?
Tytuł: Enigma Optima
Wiadomość wysłana przez: PDH w 23 Marzec 2016, 23:05
Miałem dziś chwilkę i porobiłem dokładniejsze testy. Konfiguracja jak wcześniej, zegar na sztywno 2,5GHz. 4 zadania / 4 rdzenie, obciążenie 100%.
Link do zadań. (http://www.enigmaathome.net/results.php?hostid=146531)

Procentowy wzrost wydajności (czas procesora-średnia ze wszystkich próbek)
App Sesef v2 -100%
Optima sse3 - 89,16%
Optima avx2 - 79,03%

Ogólnie bardzo przyzwoicie to wygląda.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 26 Marzec 2016, 19:12
W końcu przygotowałem wersję na Linuksa: alpha 2 (https://github.com/Agbar/enigma-optima/releases/tag/v1.0.0-alpha.2)
Tak jak z Windowsem (alpha.1), na razie są osobne pliki dla zwykłego kodu, SSSE3 i AVX2. Sprawdźcie, czy na pewno wasz procesor jest zgodny z użytym plikiem wykonywalnym, bo możecie skończyć jak kszyszp (http://www.boincatpoland.org/smf/enigmahome-78/enigma-optima/msg260102/#msg260102)  ;)

O ile znam Linuksa (a nie znam) pliki są zlinkowane statycznie, więc nie mają żadnych zależności. Sprawdziłem, że działają na Arch i Debianie.

PDH, dzięki za porównanie szybkości. Wygląda, że AVX2 może być ponad dwa razy szybsza od standardowej apki projektu :fright:

Pomijając szybkość, bardzo ważne jest, czy nie ma błędów WU. Na razie nie widziałem żadnego, ale jak wam się zdarzy zgłoście proszę (np. w tym wątku). Powinna wystarczyć nazwa zadania.
Tytuł: Enigma Optima
Wiadomość wysłana przez: PoznanskaPyra w 26 Marzec 2016, 19:55
Ja właśnie zapuściłem na swój procek i7-4770k 4 wątki. Jak przeliczy, to dam pełne 8 wątków i dla porównania na i5-4570 też uruchomię.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 26 Marzec 2016, 21:49
Fajnie, bo oba Twoje procki mają AVX2.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 27 Marzec 2016, 13:21
Specjalnie dla WUPES zrobiłem wersję dla Win32 (https://github.com/Agbar/enigma-optima/releases/tag/v1.0.0-alpha.3).

SSSE3 jest praktycznie tak samo szybkie jak na x64.
Wersja generic jest dosyć powolna. Pewnie da się to poprawić, ale nie na razie nie ma dla kogo.

@WUPES nie próbuj wersji AVX2, bo twój procek tego nie obsłuży.
Tytuł: Enigma Optima
Wiadomość wysłana przez: PoznanskaPyra w 27 Marzec 2016, 22:11
AVX

Intel Core i7-4770k 4WU Windows 10 Pro



187816441 178041319 26 Mar 2016, 18:50:56 UTC 26 Mar 2016, 19:13:44 UTC Completed and validated 1,206.73 1,197.77 60.00 Enigma 0.76b
Anonymous platform (CPU)
187816066 178040989 26 Mar 2016, 18:50:56 UTC 26 Mar 2016, 19:13:44 UTC Completed and validated 1,211.69 1,201.42 60.00 Enigma 0.76b
Anonymous platform (CPU)
187816022 178040988 26 Mar 2016, 18:50:56 UTC 26 Mar 2016, 19:13:44 UTC Completed and validated 1,201.97 1,193.00 60.00 Enigma 0.76b
Anonymous platform (CPU)
187815423 178040296 26 Mar 2016, 18:50:56 UTC 26 Mar 2016, 19:09:38 UTC Completed and validated 1,102.16 1,092.95 52.00 Enigma 0.76b
Anonymous platform (CPU)



Intel Core i7-4770k 8WU Windows 10 Pro


188000908 178206399 27 Mar 2016, 18:39:27 UTC 27 Mar 2016, 19:23:18 UTC Completed and validated 2,383.85 2,303.55 105.00 Enigma 0.76b
Anonymous platform (CPU)
188000907 178206320 27 Mar 2016, 18:39:27 UTC 27 Mar 2016, 19:07:44 UTC Completed and validated 1,565.19 1,482.47 60.00 Enigma 0.76b
Anonymous platform (CPU)
188000861 178206390 27 Mar 2016, 18:39:27 UTC 27 Mar 2016, 19:19:12 UTC Completed and validated 2,362.00 2,310.77 105.00 Enigma 0.76b
Anonymous platform (CPU)
188000714 178206271 27 Mar 2016, 18:39:27 UTC 27 Mar 2016, 19:07:44 UTC Completed and validated 1,533.70 1,483.14 60.00 Enigma 0.76b
Anonymous platform (CPU)
188000637 178206101 27 Mar 2016, 18:39:27 UTC 27 Mar 2016, 19:07:44 UTC Completed and validated 1,454.18 1,371.89 52.00 Enigma 0.76b
Anonymous platform (CPU)
188000515 178206046 27 Mar 2016, 18:39:27 UTC 27 Mar 2016, 18:58:13 UTC Completed and validated 893.46 817.19 30.00 Enigma 0.76b
Anonymous platform (CPU)
188000427 178205807 27 Mar 2016, 18:39:27 UTC 27 Mar 2016, 19:03:35 UTC Completed and validated 1,433.68 1,381.55 52.00 Enigma 0.76b
Anonymous platform (CPU)
188000385 178205896 27 Mar 2016, 18:39:27 UTC 27 Mar 2016, 18:54:08 UTC Completed and validated 859.68 812.86 30.00 Enigma 0.76b
Anonymous platform (CPU)




Intel Core i5-4570 4WU Windows 10 Pro


188008942 178214392 27 Mar 2016, 19:49:56 UTC 27 Mar 2016, 20:04:30 UTC Completed and validated 860.54 851.77 52.00 Enigma 0.76b
Anonymous platform (CPU)
188008930 178214509 27 Mar 2016, 19:49:56 UTC 27 Mar 2016, 19:58:22 UTC Completed and validated 487.06 479.05 30.00 Enigma 0.76b
Anonymous platform (CPU)
188008897 178214511 27 Mar 2016, 19:49:56 UTC 27 Mar 2016, 19:58:22 UTC Completed and validated 488.08 479.98 30.00 Enigma 0.76b
Anonymous platform (CPU)
188008896 178214510 27 Mar 2016, 19:49:56 UTC 27 Mar 2016, 19:58:22 UTC Completed and validated 487.06 479.05 30.00 Enigma 0.76b
Anonymous platform (CPU)
Tytuł: Enigma Optima
Wiadomość wysłana przez: sknd w 29 Marzec 2016, 18:57
jak "zaionstalować" optime pod linuxem? zatrzymuję boinca, podmieniam odpowiedni plik wykonywalny, nadaję mu uprawnienia "wykonywalny" i robię jego właścicielem usera boinc, ale potem po odpaleniu boinca:


wto, 29 mar 2016, 18:47:06 | Enigma@Home | File projects/www.enigmaathome.net/enigma_5.32_i686-pc-linux-gnu has wrong size: expected 502068, got 1306064

i ściaga sobię binarke od nowa...

jak zyć?  ;)
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 29 Marzec 2016, 19:31
Sama podmiana pliku wykonywalnego nie jest poprawnym rozwiązaniem (chociaż wielu z Was tego próbuje - widziałem w logach serwera %) )

Musisz mieć plik app_info.xml, Wcześniej pisałem jak zrobić to w Windows:
Cytat: Agbar w 20 Marzec 2016, 18:20
Jak uruchomić optymalkę

Niestety dla Linuksa sprawa może być trochę bardziej skomplikowana, bo TJM daje trochę bardziej złożony plik app_info i nie chciało mi się wcześniej rozgryzać o co tam chodzi.
Spróbuj tak:
1. Pobierz ten plik (https://dl.dropbox.com/u/1912652/app_test_522.tgz) umieszczony przez TJM na oficjalnym forum (http://www.enigmaathome.net/forum_thread.php?id=17&%3Cbr%20/%3Epostid=150).
2. Rozpakuj go do folderu projektu.
3. Podmień plik enigma_0.76_i686-pc-linux-gnu na wybrany plik z release Enigma Optima.

Powinno zadziałać.

Tytuł: Enigma Optima
Wiadomość wysłana przez: sknd w 29 Marzec 2016, 21:42
tym razem
wto, 29 mar 2016, 21:41:17 | Enigma@Home | Wiadomość z serwera: Unknown app name in app_info.xml
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 29 Marzec 2016, 23:28
Spróbuję coś wyrzeźbić. A może ktoś ma aktualne app_info dla Linuksa?
Tytuł: Enigma Optima
Wiadomość wysłana przez: stasieks w 30 Marzec 2016, 14:45
Działa bardzo dobrze, bez błędów. Zainstalowałem wersje alpha1 SSE3. Win64, procesor Intel i7-3632qm.

Bez optymalki:
3,628.35    3,449.01    52.00    Enigma 0.76b v5.32
2,074.95    1,989.75    30.00    Enigma 0.76b v5.32
2,204.43    2,019.67    30.00    Enigma 0.76b v5.32
2,143.07    2,040.60    30.00    Enigma 0.76b v5.32
2,221.60    2,029.11    30.00    Enigma 0.76b v5.32

Z optymalizacją:
2,413.87    2,141.13    52.00    Enigma 0.76b Anonymous platform (CPU)
1,590.45    1,206.28    30.00    Enigma 0.76b Anonymous platform (CPU)
1,304.62    1,205.50    30.00    Enigma 0.76b Anonymous platform (CPU)
1,396.01    1,355.21    30.00    Enigma 0.76b Anonymous platform (CPU)
1,510.11    1,197.78    30.00    Enigma 0.76b Anonymous platform (CPU)
Tytuł: Enigma Optima
Wiadomość wysłana przez: sknd w 31 Marzec 2016, 22:04
jednak zassało mi trochę WU, więc:
(Linux64, e3-1230-v2)

1,042.42   987.42     30.00        Enigma 0.76b Anonymous platform (CPU)
1,004.64   982.11    30.00        Enigma 0.76b Anonymous platform (CPU)
1,003.32   980.30    30.00   Enigma 0.76b Anonymous platform (CPU)
409.36       928.71    30.00   Enigma 0.76b Anonymous platform (CPU)
166.32       1,031.08    30.00   Enigma 0.76b Anonymous platform (CPU)
995.49       963.95    30.00   Enigma 0.76b Anonymous platform (CPU)
1,015.26   973.49    30.00   Enigma 0.76b Anonymous platform (CPU)
1,016.91   973.86    30.00   Enigma 0.76b Anonymous platform (CPU)
1,031.33   974.69    30.00   Enigma 0.76b Anonymous platform (CPU)
1,012.35   976.79    30.00   Enigma 0.76b Anonymous platform (CPU)
1,003.31   980.11    30.00   Enigma 0.76b Anonymous platform (CPU)
1,010.89   984.92    30.00   Enigma 0.76b Anonymous platform (CPU)
1,012.93   986.36    30.00   Enigma 0.76b Anonymous platform (CPU)
1,009.53   986.06    30.00   Enigma 0.76b Anonymous platform (CPU)
1,028.97   988.53    30.00   Enigma 0.76b Anonymous platform (CPU)
1,051.71   983.28    30.00   Enigma 0.76b Anonymous platform (CPU)
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 01 Kwiecień 2016, 13:12
Ciekawe, masz taki sam procesor jak krzyszp, ale działa trochę szybciej.
Tytuł: Enigma Optima
Wiadomość wysłana przez: sknd w 01 Kwiecień 2016, 15:02
a wszystkie WU są tej samej długości?
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 01 Kwiecień 2016, 17:41
Cytat: sknd w 01 Kwiecień 2016, 15:02
a wszystkie WU są tej samej długości?

Domyślam się, że nie. TJM wie lepiej, jak to jest, a może jest gdzieś informacja na forum projektu.
Na moje oko rozmiar zadania można rozpoznać po ilości punktów (30, 52, 60...). Wszystkie 30 powinny mieć tyle samo do policzenia, itd.

Popatrz np. na wyniki:
Cytat: stasieks w 30 Marzec 2016, 14:45
Bez optymalki:
3,628.35    3,449.01    52.00    Enigma 0.76b v5.32
2,074.95    1,989.75    30.00    Enigma 0.76b v5.32

Z optymalizacją:
2,413.87    2,141.13    52.00    Enigma 0.76b Anonymous platform (CPU)
1,590.45    1,206.28    30.00    Enigma 0.76b Anonymous platform (CPU)

Z proporcji
2000/30*52 = ~3460,
1200/30*52 = 2080.

Przypuszczam, że serwer jakoś dopasowuje rozmiar WU do szybkości klienta. Pewnie optymalizuje obciążenie (turnaround time itd.)
Tytuł: Enigma Optima
Wiadomość wysłana przez: krzyszp w 01 Kwiecień 2016, 20:16
Cytat: Agbar w 01 Kwiecień 2016, 13:12
Ciekawe, masz taki sam procesor jak krzyszp, ale działa trochę szybciej.
Bo u mnie ten komp ma jednocześnie kilkadziesiąt zakładek w FF otwartych, kilkanaście w Operze, i jeszcze stado softu w tle ;)
Tytuł: Enigma Optima
Wiadomość wysłana przez: sknd w 01 Kwiecień 2016, 20:41
Cytat: krzyszp w 01 Kwiecień 2016, 20:16
Cytat: Agbar w 01 Kwiecień 2016, 13:12
Ciekawe, masz taki sam procesor jak krzyszp, ale działa trochę szybciej.
Bo u mnie ten komp ma jednocześnie kilkadziesiąt zakładek w FF otwartych, kilkanaście w Operze, i jeszcze stado softu w tle ;)
no pewnie tu pies pogrzebany, u mnie miał tylko trochę softu, ale zakładek było co najwyżej parę  ;)
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 14 Kwiecień 2016, 13:58
Opublikowałem nową wersję v1.0.0-alpha.4 (https://github.com/Agbar/enigma-optima/releases/tag/v1.0.0-alpha.4)
Zmiany to:

  • Jedna wersja exe. Program sam wybiera najlepszy dostępny zestaw instrukcji.
  • Gotowy app_config.xml. Wystarczy skopiować do folderu projektu w BOINC.

Z tym kopiowaniem nie jest jeszcze zupełnie prosto. Potrzebny jest jeszcze wrapper, który można pobrać ze strony Enigma@Home (http://download.enigmaathome.net/). Dla Windows i Linux potrzebny jest wrapper w wersji 5.32. Jak napiszę do TJMa, to może pozwoli zapakować wrapper razem z Optimą.

Pamiętajcie aby w Linuksie poprawnie ustawić uprawnienia.
Np. u mnie w Arch user boinc musi mieć uprawnienie do wykonania aplikacji, więc muszę ustawić:
chusr boinc:boinc enigma-optima
chmod u+x,g+x  enigma-optima

To samo dla wrappera, jeżeli BOINC manager go wywali przez przypadek (np. przy błędnej konfiguracji.)
W Linuksie x64 sprawdźcie też czy macie zainstalowane zależności dla wrappera, który jest 32 bitowy. W Arch trzeba włączyć multilib, ale inne dystrybucje są prostsze w obsłudze  8)



Tytuł: Enigma Optima
Wiadomość wysłana przez: krzyszp w 14 Kwiecień 2016, 14:51
Xeon E3-1230v2, stock, Win7-64, trochę procesów w tle:

191198645 181242939 14 Apr 2016, 12:09:19 UTC 14 Apr 2016, 12:44:07 UTC Completed and validated 1,007.46 980.22 30.00 Enigma 0.76b
Anonymous platform (CPU)
191198625 181242908 14 Apr 2016, 12:09:19 UTC 14 Apr 2016, 12:30:45 UTC Completed and validated 1,066.48 1,002.84 30.00 Enigma 0.76b
Anonymous platform (CPU)
191198611 181242910 14 Apr 2016, 12:09:19 UTC 14 Apr 2016, 12:30:45 UTC Completed and validated 1,036.31 980.23 30.00 Enigma 0.76b
Anonymous platform (CPU)
191198602 181242919 14 Apr 2016, 12:09:19 UTC 14 Apr 2016, 12:30:45 UTC Completed and validated 1,073.90 995.26 30.00 Enigma 0.76b
Anonymous platform (CPU)
191198598 181242903 14 Apr 2016, 12:09:19 UTC 14 Apr 2016, 12:30:45 UTC Completed and validated 1,047.96 1,001.85 30.00 Enigma 0.76b
Anonymous platform (CPU)
191198564 181242902 14 Apr 2016, 12:09:19 UTC 14 Apr 2016, 12:30:45 UTC Completed and validated 1,034.06 994.71 30.00 Enigma 0.76b
Anonymous platform (CPU)
191198541 181242914 14 Apr 2016, 12:09:19 UTC 14 Apr 2016, 12:26:39 UTC Completed and validated 1,025.54 986.97 30.00 Enigma 0.76b
Anonymous platform (CPU)
191198531 181242905 14 Apr 2016, 12:09:19 UTC 14 Apr 2016, 12:30:45 UTC Completed and validated 1,069.68 1,004.93 30.00 Enigma 0.76b
Anonymous platform (CPU)
191198518 181242907 14 Apr 2016, 12:09:19 UTC 14 Apr 2016, 12:30:45 UTC Completed and validated 1,130.69 994.38 30.00 Enigma 0.76b
Anonymous platform (CPU)
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 14 Kwiecień 2016, 15:07
Wygląda, że działa tak szybko jak poprzednia, więc program wykrył dobrze typ procesora.

Szybkość nie powinna się zmienić - nie zmieniałem kodu, tylko opcje kompilacji - za to dużo łatwiej teraz zainstalować.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Troll81 w 15 Kwiecień 2016, 21:57
Kiedy optymalka wejdzie do produkcji??
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 15 Kwiecień 2016, 23:07
Czekam na odpowiedź od TJM, chciałbym dołączyć wrappery, żeby uprościć instalację.

Poza tym do kolejnej wersji mam już wszystkie poprawki, które są potrzebne: program loguje swoją nazwę i wykrytą wersję procesora (AVX2, SSSE3 itd.) Dobrze, żeby dało się w logu sprawdzić, co za program działał.
Jak tylko TJM zgodzi się na redystrybucję wrapperów, publikuję betę. Myślę, że dwa tygodnie potem będzie można wypchnąć release.

Mam też kilka pomysłów na dalsze przyspieszenie. Najprostsze poprawki powinny być dla AVX2, bo jest kilka funkcji, których jeszcze nie użyłem (np. gather). Napisanie kodu dla AVX512 powinno być proste, ale jeszcze nie ma procesorów, które to wspierają.

BTW. Zrobiłem małą analizę hostów podpiętych pod projekt i wychodzi z niej, że trzeba celować w SSSE3 (połączone z AVX), bo tam jest najwięcej mocy obliczeniowej. Drugie w kolejności jest AVX2. Dorzucę obrazki, tylko mam na drugim komputerze.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 16 Kwiecień 2016, 19:03
Gdzieś w międzyczasie przeanalizowałem sobie statystyki hostów projektu. Chciałem określić cele do dalszej pracy.

Najpierw odfiltrowałem nieaktywne hosty, zostawiając te, które mają RAC>200 i kontaktowały się z serwerem w ciągu ostatnich 3 miesięcy.1
Dla każdego CPUID określiłem, typ procesora dzięki CPU-World (http://www.cpu-world.com/cgi-bin/CPUID.pl) i zaimplementowany tam zestaw instrukcji.
Ograniczyłem się do "głównej" linii SSE < SSE2 < SSE3 < SSSE3 < SSE4_1 < SSE4_2 < AVX < AVX2. Zupełnie pominąłem SSE4a, bo jest mała liczba takich procesorów itd.
Zresztą zobaczcie sami:2
[smg id=10562 type=preview align=center caption="Enigma Host RAC by SIMD"]

I po pogrupowaniu wg tego co jest zaimplementowane w Optimie:  {SSSE3, AVX, SSE4_1, SSE4_2} są połączone w SSSE3:
[smg id=10563 type=preview align=center caption="Enigma Host RAC by SIMD folded"]

Według mnie wynika z tego, że nie ma się co przejmować starszymi procesorami, bo nawet wielki zysk w jednostkowej szybkości nie przełoży się na wyniki w skali projektu.
To samo z częścią hostów zgrupowaną w NotSupported. Tam są wszystkie ARM i Apple. Te architektury też mają swoje SIMD, ale implementacją mogę się zająć chyba tylko dla sportu, żeby dokładniej zobaczyć jak działają te procesory.




  • Granica ustalona na 1 miesiąc praktycznie nic nie zmienia, a nie chce mi się drugi raz robić screenshotów. Było by 22 hostów mniej.
  • Wyniki są posortowane wg RAC, a nie iops (Integer Operations Per Second) bo RAC lepiej reprezentuje dostępną moc obliczeniową.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 22 Kwiecień 2016, 19:36
TJM chętnie zgodził się na redystrybucję wrapperów - dzięki! :p_arr: więc opublikowałem wersję beta.1 (https://github.com/Agbar/enigma-optima/releases/tag/v1.0.0-beta.1).


  • Nie jest wymagane hasło. Wersja jest publiczna.
  • Zawiera wrapper. Wystarczy skopiować do folderu projektu.
  • Wersja optimy jest logowana i jest widoczna w logu zadania na serwerze.

Tytuł: Enigma Optima
Wiadomość wysłana przez: Troll81 w 23 Kwiecień 2016, 12:23
zostaną dołączone do oficjalnych projektu??
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 23 Kwiecień 2016, 18:04
Decyzja o dołączeniu do oficjalnych binarek projektu należy do TJMa. Jednak mało prawdopodobne, że tak się stanie.

Mogłem wyrazić się niedokładnie. Enigma Optima może być rozpowszechniana z kopią wrappera z projektu Enigma at Home.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 29 Kwiecień 2016, 01:50
Opublikowałem beta 2 (https://github.com/Agbar/enigma-optima/releases/tag/v1.0.0-beta.2). Wersja Windows64 nie wykrywała typu procesora i zawsze działał kod bez SSE/AVX2. Nie zrobiłem czystej kompilacji i zostały śmieci po moich zabawach z kodem  :shame:

Ciekawi mnie czemu nikt z testerów tego nie zauważył? :) Bo apka działa jakieś 30% wolniej bez SIMD. No ale sam zauważyłem to po tygodniu dopiero...
Tytuł: Enigma Optima
Wiadomość wysłana przez: Peciak w 29 Kwiecień 2016, 17:00
Na moim procku z AVX różnice czasów pomiędzy APPvBETA_1 a APPvBETA_2 praktycznie nie występują (roznica około 1 - 1,5 %) te same warunki liczenia.
Różnica jest tylko taka, że:
wersja BETA 1 Best ISA - nie rozpoznawała
wersja BETA 2 Best ISA - AVX
więc albo różnica pomiędzy liczeniem na SSE a AVX jest znikoma albo wersja BETA 1 wykrywała prawidłowo proc tylko źle raportowała albo apka ma dalej jakiś błąd w rozpoznawaniu instrukcji proca...
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 29 Kwiecień 2016, 20:07
Cytat: Peciak w 29 Kwiecień 2016, 17:00
Na moim procku z AVX różnice czasów pomiędzy APPvBETA_1 a APPvBETA_2 praktycznie nie występują (roznica około 1 - 1,5 %) te same warunki liczenia.

A jak w porównaniu z poprzednimi wersjami? Masz ukryte hosty, więc nie mogę sobie obejrzeć loga na serwerze...
Swoją drogą nie spodziewałem się ukrytych hostów, więc w poprzednim poście o rozkładzie ISA brakuje ciemnej materii ;)EDIT: Ukryte hosty nie mają tylko userid.

Właśnie się zorientowałem, że nie poprawiłem nazwy wersji w beta 2. Muszę sobie jakąś check-listę przygotować.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Peciak w 29 Kwiecień 2016, 20:47
CytatA jak w porównaniu z poprzednimi wersjami
Mogę się odnieść tylko do opta SESEFA dla SSSE3
twoje opto jest szybsze od opta SESEFA, najlepiej powie o tym teoretyczna uśredniona wydajność (liczone próbki z kilku godzin) z proca liczonego 6 WU na 8 rdzeniach
SESEF -> 21050 pkt /doba
AGBAR BETA I -> 22760 pkt /doba
AGBAR BETA II -> 23560 pkt /doba

do poprzednich twoich opt nie miałem haseł wiec ich nie testowałem.
host http://www.enigmaathome.net/results.php?hostid=152479 (http://www.enigmaathome.net/results.php?hostid=152479) ale wiele tu nie zobaczysz bo ja obecnie enigmę liczę tylko dla testów.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 29 Kwiecień 2016, 21:41
Dzięki za odpowiedź.

O hasło do poprzednich wersji wystarczyło poprosić :)

Dzięki za link, niestety serwer już pozbył się próbek z 1. bety. Ale 89 aktualnych zadań też daje jakiś wgląd.

Możliwe, że Twój procesor (Ivy Bridge) tak szybko wykonuje "zwykły" kod, że różnica do SSSE3 wychodzi rzędu 3%. A może po prostu miałeś 32 bitową wersję beta.1?
Teoretycznie wersja podstawowa kodu powinna być wolniejsza od opta sesefa, przynajmniej tego się spodziewam, ale z drugiej strony... kto wie. W gołej wersji uprościłem trochę arytmetykę i kosztem kilku procent większego użycia pamięci zamieniłem mnożenie razy 26 na 32, co można zrealizować przesunięciem. Nawet na Ivy Bridge potencjalna różnica w szybkości jest całkiem spora:

  • Mnożenie *26 można wykonać jedno na cykl i na wynik czeka się 3 cykle
  • Mnożenie *32 można wykonać dwa na cykl i wynik jest dostępny od razu.
Niektóre fragmenty mogą działać nawet kilka razy szybciej! (niestety to bardzo małe fragmenty).

Przejrzałem jeszcze kod, który ustawia odpowiednie funkcje i wygląda OK. Uruchomiłem nawet na emulatorze z różnymi wersjami procków i wygląda, że wykonuje się ten kod, co powinien.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 06 Maj 2016, 21:47
Opublikowałem nową wersję beta 3 (https://github.com/Agbar/enigma-optima/releases/tag/v1.0.0-beta.3).

Wersja przede wszystkim poprawia problem ze starszymi procesorami 32-bitowymi. Teraz wymagany jest przynajmniej Pentium 3 (wg. opcji kompilatora - może ale nie musi działać na starszych maszynach). Poprzednie kompilacje przez niedopatrzenie były skompilowane dla architektury Nocona, przez co wymagały np. SSE2.

Wersję polecam np. dla Argento.
Tytuł: Enigma Optima
Wiadomość wysłana przez: PoznanskaPyra w 08 Maj 2016, 09:05
 :respect: Trzeba gdzieś te appki dodać żeby każdy mógł pobrać
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 08 Maj 2016, 15:52
Myślę, że github jest dostatecznie dobrym miejscem.
Tytuł: Enigma Optima
Wiadomość wysłana przez: Peciak w 18 Czerwiec 2016, 14:01
Witam taki problem sie robi podczas zamykania komputera i nie wyłączenia wcześniej programu boinc. Problem pojawił się przy nowy opto i dotyczy tylko tego projektu. Mianowicie kiedy wyłączam komputer (zdarza się to rzadko ale jednak czasami się zdarza) boinc odpala podczas zamykania próbki enigma które liczą się z błędem.
Nie chodzi o to że to w czymś przeszkadza ale o to że marnują się WU. Ciekaw jestem czy to tylko u mnie (jakiś lokalny konflikt z programem lub projektem) czy też jednak jest to problem globalny.
[smg id=10577 type=preview align=center caption="Zrzut ekranu 2016 06 18 12 11 29a"]

Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 21 Czerwiec 2016, 08:55
To wygląda na bug w kliencie BOINC, bo to ten program jest odpowiedzialny za uruchamianie zadań. Bez klienta BOINC nie uruchomi się żadne nowe zadanie, bo trzeba np. przydzielić slot. Myślę, że trzeba to zgłosić ekipie BOINC (https://boinc.berkeley.edu/trac/wiki/ReportBugs).
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 28 Luty 2017, 14:17
Parę dni temu opublikowałem wersję finalną v1.0.0 (https://github.com/Agbar/enigma-optima/releases/tag/v1.0.0). Jeżeli używacie wersji beta3 nie ma powodu do aktualizacji (zmiany są kosmetyczne i nie dotyczą np. szybkości działania.)



EDIT
Opublikowałem wersję v1.0.1 (https://github.com/Agbar/enigma-optima/releases/tag/v1.0.1), która poprawia crash w kodzie AVX2 w v1.0.0. Zbiegiem okoliczności błąd nie pojawił się w żadnej wcześniejszej kompilacji (to znaczy, czekał żeby zaatakować, ale nie miał okazji.)
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 22 Październik 2017, 10:50
Opublikowałem wersję 1.1.0 (https://github.com/Agbar/enigma-optima/releases/tag/v1.1.0) obsługującą zadania Enigma AV.
Tytuł: Enigma Optima
Wiadomość wysłana przez: AXm77 w 22 Październik 2017, 21:32
Cytat: Agbar w 22 Październik 2017, 10:50
Opublikowałem wersję 1.1.0 (https://github.com/Agbar/enigma-optima/releases/tag/v1.1.0) obsługującą zadania Enigma AV.

Na Xeonach E5-2673 v2 - około 50s szybciej : ~5:45 (AV 1.05 ~6:35).
Tylko jest problem z liczeniem na GPU.
Jak prawidłowo dopisać apkę dla GPU do twojego app_info?
Tytuł: Enigma Optima
Wiadomość wysłana przez: kva.pl w 23 Październik 2017, 02:16
Agbar jeszcze bys opublikowal nowa wersje wizytowki  :whistle:
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 23 Październik 2017, 08:16
Cytat: AXm77 w 22 Październik 2017, 21:32
Jak prawidłowo dopisać apkę dla GPU do twojego app_info?

To właściwie wiedza tajemna :) Teoretycznie jest jakaś dokumentacja (http://boinc.berkeley.edu/wiki/Anonymous_platform), ale pamiętam, że i tak używałem kodu źródłowego BOINC, żeby przygotować pierwszą wersję app_config.

Przygotuję wersję z apkami GPU. (Spodziewałem się, że mnie to czeka  :attack:) Myślę, że może minąć to kilka dni, zanim to zrobię, bo Optimą zajmuję się w wolnym czasie. Do tego czasu pewnie będziesz wolał wrócić do normalnych apek, bo GPU liczy szybciej.

Cytat: kva.pl w 23 Październik 2017, 02:16
Agbar jeszcze bys opublikowal nowa wersje wizytowki  :whistle:
A co jest nie tak z aktualną? :)
Tytuł: Enigma Optima
Wiadomość wysłana przez: sirzooro w 23 Październik 2017, 22:44
Cytat: Agbar w 23 Październik 2017, 08:16
Cytat: AXm77 w 22 Październik 2017, 21:32
Jak prawidłowo dopisać apkę dla GPU do twojego app_info?

To właściwie wiedza tajemna :) Teoretycznie jest jakaś dokumentacja (http://boinc.berkeley.edu/wiki/Anonymous_platform), ale pamiętam, że i tak używałem kodu źródłowego BOINC, żeby przygotować pierwszą wersję app_config.
Najprościej jest skopiować odpowiednie znaczniki <file>, <app> i <app_version> z client_state.xml - składnia jest identyczna. Jeżeli chcesz odpalić oryginalną apkę przez app_info.xml, to w <app> i <app_version> nie trzeba nic zmieniać, w <file> trzeba wyrzucić wszystko poza <name> i <executable/>.
Tytuł: Enigma Optima
Wiadomość wysłana przez: TJM w 24 Październik 2017, 12:33
Na forum projektu w watku o aplikacji GPU jest chyba app_info z wszystkimi 4 aplikacjami.
Tytuł: Enigma Optima
Wiadomość wysłana przez: AXm77 w 27 Październik 2017, 01:46
Dzięki panowie za poradę. Działa!
Skorzystałem z pliku o którym pisał TJM.



Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 10 Luty 2019, 12:15
Po długiej przerwie opublikowałem nową wersję (v1.1.1) (https://github.com/Agbar/enigma-optima/releases/tag/v1.1.1).

Wg moich testów jest szybsza na nowych Intelach. Jak chodzi o AMD przetestowałem tylko na modelu opartym o energooszczędny Jaguar (https://en.wikipedia.org/wiki/Jaguar_(microarchitecture)). Reszta AMD też powinna liczyć szybciej, ale nie mam teraz dostępu do żadnej takiej maszyny.
Tytuł: Enigma Optima
Wiadomość wysłana przez: tito w 10 Luty 2019, 18:50
Nie to, że chcę zniechęcać, ale czy jest sens liczenia na CPU i rozwijania optymalek, gdy aplikacja na GPU jest tak wydajna?
Tytuł: Enigma Optima
Wiadomość wysłana przez: Agbar w 10 Luty 2019, 19:49

  • Na CPU jest łamana inna wiadomość.
  • Używając zoptymalizowanej wersji masz więcej czasu na pozostałe projekty.  :parrrty:
  • Nie wszyscy mają kompatybilne GPU.
  • Nie wszyscy chcą liczyć na GPU. Prąd kosztuje.
  • Lubię programować.
  • Może kiedyś wezmę się za optymalizację GPU. Podejrzewam, że wiele pomysłów z EO da się przenieść na kod GPU.
Tytuł: Enigma Optima
Wiadomość wysłana przez: tito w 10 Luty 2019, 20:37
W sumie każdy punt jest logiczny :)
A za pracę na rzecz BOINCa dla Ciebie  :parrrty: :parrrty:
Tytuł: Enigma Optima
Wiadomość wysłana przez: krzyszp w 10 Luty 2019, 23:11
    Cytat: Agbar w 10 Luty 2019, 19:49
    • Lubię programować.
    Ten punkt wystarczy :)[/list]