Usprawnienie wydajności systemu przepisów JSON.
0 polubień
4 pobrań
FastSuite umożliwia szybsze dopasowywanie przepisów dzięki wykorzystaniu współbieżności. Dla każdego typu przepisu zawierającego ponad 100 receptur FastSuite włącza Równoległe Dopasowywanie Przepisów i używa wielu wątków do dopasowania wszystkich kombinacji, zamiast polegać na jednym wątku. Zaobserwowano, że w pakiecie All The Mods 8 daje to 10–12-krotne przyspieszenie, jak pokazano poniżej:
[Test Wielowątkowy] - Średni czas znalezienia przepisu na deski akacjowe: 301960,28 ns
[Test Jednowątkowy] - Średni czas znalezienia przepisu na deski akacjowe: 2774185,5 ns
[Test Wielowątkowy] - Średni czas znalezienia przepisu na patyki: 494851,94 ns
[Test Jednowątkowy] - Średni czas znalezienia przepisu na patyki: 4500045,0 ns
[Test Wielowątkowy] - Średni czas znalezienia przepisu na stół rzemieślniczy: 148572,14 ns
[Test Jednowątkowy] - Średni czas znalezienia przepisu na stół rzemieślniczy: 3246270,5 ns
[Test Wielowątkowy] - Średni czas znalezienia przepisu na czarną skrzynkę Shulkera: 370346,56 ns
[Test Jednowątkowy] - Średni czas znalezienia przepisu na czarną skrzynkę Shulkera: 4711380,0 ns
[Test Wielowątkowy] - Średni czas znalezienia przepisu dla nieudanego dopasowania: 701000,56 ns
[Test Jednowątkowy] - Średni czas znalezienia przepisu dla nieudanego dopasowania: 1,3034094E7 ns
Typy przepisów, które wykazują problemy z Równoległym Dopasowywaniem Przepisów, można dodać do czarnej listy w pliku konfiguracyjnym. W porównaniu z wcześniejszymi wersjami FastSuite nowy model współbieżnego dopasowywania jest bardziej kompatybilny (działa z zainstalowanym Polymorph) i zawsze działa (podczas gdy stary model nie działał przy znaczącej rotacji przepisów ani przy pierwszym dopasowaniu). Jest też mniej podatny na błędy, ponieważ nie wymaga zapisywania żadnych danych w trakcie dopasowywania, co mogłoby powodować problemy, gdyby mody dopasowywały przepisy poza głównym wątkiem.
Podobnie jak projekty FastWorkbench i FastFurnace, FastSuite to mod mający na celu poprawę wydajności przepisów. W przeciwieństwie do tamtych modów, usprawnia on jednak wszystkie mody korzystające z systemu przepisów JSON, a nie tylko konkretny podzbiór receptur. Robi to poprzez zamianę listy przepisów z Set na LinkedList. Lista ta może być później zmieniana kolejnością przy każdym dostępie do przepisu, co znacznie przyspiesza kolejne wyszukiwania. Przepisy znajdujące się wystarczająco blisko początku listy (mieszczące się w „rozmiarze cache") nie są przenoszone, aby uniknąć niepotrzebnej rotacji. Rozmiar cache jest konfigurowalny, a każdy typ przepisu ma własną przestrzeń cache.
Przy pierwszym dostępie do przepisu FastSuite działa identycznie jak vanilla. Jednak po tym pierwszym dostępie czas potrzebny na znalezienie przepisu maleje. Spadek ten może być znaczący w zależności od tego, jak daleko na liście pierwotnie znajdował się przepis. Wpływ jest tym większy, im więcej przepisów jest załadowanych do gry, ponieważ daje to większy zakres przesunięć. Poniżej widzimy poprawę wydajności przy dostępie do kilku przepisów wraz z ich indeksem w oryginalnej kolejności listy. Poniższy zestaw 6 tabel jest zorganizowany w następujący sposób:
W lewej kolumnie podano przepis, jego pierwotny indeks na liście oraz bieżącą próbę. Dwie kolejne kolumny porównują czasy wyszukiwania przepisu FS/Vanilla w mikrosekundach. Domyślny rozmiar cache wynosi 100 i jest tu zastosowany. Oznacza to, że wpisy znajdujące się nie dalej niż na indeksie 100 nie są przenoszone. Więcej informacji znajdziesz tutaj.

Widać dramatyczną zmianę w przypadku przepisów znajdujących się zazwyczaj pod koniec listy, jak widać na przykładzie desek akacjowych. Przepisy już znajdujące się blisko początku listy, takie jak bryłki żelaza czy złota, odnotowują minimalne lub żadne ulepszenia. Można zatem stwierdzić, że stosowanie zalet FastSuite nie niesie ze sobą żadnych wad, ponieważ zapewnia wyjątkowe korzyści wydajnościowe, gdy jest przydatny (ponad 95% poprawy w przypadku desek akacjowych) i nie ma wpływu, gdy nie przynosi żadnych korzyści (jak widać w przypadku próby nieudanego dopasowania). W przypadku bryłek żelaza i złota zauważamy nawet niewielkie spadki, ponieważ znajdowały się one w zakresie rozmiaru cache i zostały przesunięte w wyniku buforowania desek akacjowych, patyków i stołów rzemieślniczych. Nie wpływa to jednak znacząco na wydajność, zwłaszcza w porównaniu z korzyściami płynącymi z buforowania późniejszych przepisów.
Ten mod powinien w pełni współpracować ze wszystkimi innymi modami. Został zaprojektowany jako nieinwazyjny i nie powinien kolidować z niczym poza innym modem, który również zastępuje menedżer przepisów. Został dostosowany tak, aby działał z modami modyfikującymi przepisy, takimi jak KubeJS i CraftTweaker, i nie powoduje żadnych problemów z JEI. Udało mi się uruchomić All The Mods 3 bez zauważania błędów, a mod był również testowany w Skyfactory 1.
Mod ten nie zastępuje FastWorkbench ani FastFurnace, chociaż ich korzyści będą mniejsze, jeśli ten jest zainstalowany, ponieważ część pracy zostanie przejęta przez FastSuite. Aby uzyskać maksymalną wydajność w kwestii przepisów, nadal zalecam zainstalowanie obu, ale jeśli trzeba wybrać tylko jeden, powinien to być FastSuite zamiast któregokolwiek z nich.
Udało się!