Witam.
Czy istnieje możliwość zmuszenia Gimpa do wykorzystania pełnej mocy procesora/karty graficznej? Gdzie szukać tych ustawień?
Witam.
Czy istnieje możliwość zmuszenia Gimpa do wykorzystania pełnej mocy procesora/karty graficznej? Gdzie szukać tych ustawień?
On zawsze będzie wykorzystywać pełną moc, jeśli to możliwe. W pozostałych przypadkach będzie wykorzystywać tyle, ile jest mu potrzebne.
Dodajmy, że zapewne nie wszystkie algorytmy są w stanie wykorzystać pracę w wielu wątkach (nie mówiąc już w ogóle o karcie graficznej).
Uruchomienie filtrów lub funkcji trwających kilka, kilkanaście sekund zajmuje 16-20% mocy procesora. Zamiast wykorzystać 100% i zająć sekundę, więc coś jest nie tak.
Bo patrzysz na sumaryczne obciążenie, popatrz jak obciąża pojedyńcze rdzenie.
Obrazek 4000x3000, filtr Antiqu photo border (taki testowy bo widać jak robi coś).
Na 6 rdzeni:
1- 3%
2- 3%
3- 7%
4- 44%
5- 95%
6- 50%
Sumarycznie pokazywało 17% obciążenia.
Gdzieś na jakimś forum było jak włączyć testowe wsparcie karty graficznej, zrobiłem to ale jakoś cudów nie zobaczyłem.
Dopiero 2.10 mam mieć to wpełni rozwinięte.
Jedynie w preferencjach, środowisko można sobie sprawdzić/ustawić ilość rdzeni.
Aby trochę przyspieszyć gimpa można mu w kolorach wyłączyć "zarzadzanie kolorami i ustawić profil monitora.
Jest tak jak piszesz. Sprawdziłem to i gimp pracuje na jednym procesorze chociaż w preferencjach ma ustawione 8. Wrzucenie mu farby olejnej na obraz 3200x2300 150dpi trwa dobre pół minuty. Czy jest jakaś możliwość wymuszenia pracy na wszystkie wątki w wersji 2.8.14?
Chyba wtczki musiałby być pisane od nowa pod wiele rdzeni.
Bo to działa na zasadze:
Pobrać próbkę, dokonać obliczeń i tak w koło. Aby przyśpieszyć trzeba by dzielić obraz na części i robić im równoległe przeliczanie, to bardzo trudne bo trzeba uwzględniać stykanie się próbek i czort wie co jeszcze.
No to kicha Czy inne programy graficzne (np komercyjne) też mają z tym takie problemy? Jaki jest sens koksować kompa pod grafikę kiedy programy nie potrafią tego wykorzystać? Nie pisze że ja mam kompa pod grafikę bo nie zajmuje się tym profesjonalnie, ale to inwalidztwo gimpa mnie rozbroiło.
Tak, z Photoshopem jest podobna historia. Po prostu w większości przypadków algorytmów nie da się zrównoleglić i trzeba byłoby opracować je na nowo - a po co ruszać coś, co działa? Dlatego nie liczy się ilość rdzeni, a moc pojedynczego (ewentualnie Turbo Boost). Karta graficzna ma praktyczne zastosowanie tylko przy grafice 3D. Od Photoshopa CS4 bodajże (mogę się mylić) używa się jej do przesuwania obrazka, ale przy algorytmach liczy się tylko procesor, chociaż coraz to nowsze wersje coraz lepiej wykorzystują wiele rdzeni i karty graficzne.
Jeśli działanie matematyczne polega na np:
To przykłady wizualne ! Nie chodzi o faktyczne liczenie.
1*2*3*4*5*6*… to nawet 50 rdzeni nie pomoże czy cudowna karta graficzna, bo obliczanie polega na mnożeniu wyniku przez kolejną liczbę, nie ma możliwości podziału na fragmenty do policzenia.
Natomiast gdy:
1+2+3+4+5+6+… tu można dać popis rdzeniom, łatwo podzielić na paczki i dokonać obliczeń, bo obliczenia nie są ściśle związane z wynikiem poprzedniego działania.
W przypadku gigantycznych działań różnica w obliczeniach może być kolosalna.
Takie uproszczenia mają się nijak do obliczeń potrzebnych przy obróbce grafiki, to nie jedno działanie lub pętla która się ma wykonać tylko setki różnych przekształceń, ale fakt że to robota na głowie piszących wtyczki i sam gimp zapewne ma na to niewielki wpływ udostępniając jedynie platformę.
Oczywiście mój przykład jest błędny ale chodzi o wizualne odwzorowanie a nie faktyczne obliczenia.
Niestety ale aby uwzględnić obliczenia grafiki trzeba od zera pisać oprogramowanie dla wielu rdzeni.
Zwróć uwagę że wszystkie obliczenia (albo większość) wykonywane są na niewielkich obszarach na jakie dzieli sobie program nasz obraz inaczej złapałby zaraz zadyszkę i zabrakło by nawet 128GB RAM Więc teoretycznie nic nie stoi na przeszkodzie, aby te pojedyncze przekształcenia (nawet wykonane w odpowiedniej kolejności) wykonywać równolegle na kilku wątkach.
Miejmy nadzieję że w końcu ktoś się za to zajmie bo procesory pracujące wielowątkowo mamy już od lat, a programy graficzne dalej w epoce x32.
Tak dzieli na obszary na zasadzie paczka 1, paczka 2 paczka 3… bo faktycznie chodzi o zasoby komputera a czasem taki podział przyśpiesza działanie.
Ale liczy nadal w kolejności 1,2,3…
Aby przyśpieszyć musiałby każdą paczkę przydzielić dla innego rdzenia w tym samym czasie.
Nadal pytanie jak zrobić to jeśli cos co jest obliczane w paczce 3 będzie zalezne od wyniku paczki 1 i 2 ? Trzeba czekac na wynik, więc po co dzielić ?
Na pewno są takie które wymagają obliczenia poprzedniego i tylko poprzedniego wyniku, ale ja testowałem kilka filtrów i wszystkie działają jednowątkowo. Nawet wspomniana wcześniej farba olejna która teoretycznie mogła by być obliczana nawet poczynając od każdego rogu i połączona ostatecznie obliczając jedynie punkty styku. No takie nasze teoretyzowanie, ale to w większości jest do wykonania.
Tylko programista musi chcieć (umieć).