2012-08-12 23 views
5

Dzięki ramie rootbeer możliwe jest programowanie GPU dla Javy.Który kod Java można przenieść na GPU?

Który kod Java powinien być użyty dla rootbeer i który kod powinien być lepiej uruchomiony w java VM Java?

Lub inny: który kod generuje więcej kosztów i nie ma sensu?

+0

Czy pytasz, jakie algorytmy mają sens, aby były wykonywane na GPU? – Bart

+0

Nie wiem, czy jest to w jakikolwiek sposób istotne dla ciebie, ale brutalne wymuszanie haseł (kryptografii) jest jednym z obszarów, w którym dostrajanie GPU dla wymaganego rodzaju operacji dla tego rodzaju rzeczy jest wykorzystywane do uzyskania przewagi czasowej. –

+2

Moje pytanie dotyczy tylko rootbeera, a nie ogólnego programowania GPU. – Horcrux7

Odpowiedz

3

To trochę głupia rzecz, ale oczywistą odpowiedzią byłoby "na problemy, w których GPU jest lepsze niż procesor". Współczesne procesory graficzne mają ponad tysiąc rdzeni, ale stosunkowo mało pamięci, więc ogólnie rzecz biorąc oznacza to coś, co nie wymaga zbyt dużej ilości pamięci.

G. Bach wspomniał o brutalnych atakach na przedmioty kryptograficzne w komentarzach, to dobry przykład. Symulacje naukowe są kolejnym dobrym przykładem. Kilka lat temu kilka instytucji badawczych (w szczególności NASA) miało grupy symulatorów Playstation 3. Artykuł Wikipedii na temat GPGPU informatyki lists several applications tej technologii.

1

Jednym z ograniczeń obecnego GPU jest to, że może on załadować jedną prostą metodę do każdego rdzenia i wykonać ją jednocześnie. Procesory ogólnego przeznaczenia mogą ładować więcej kodu i danych i wykonywać je niezależnie.

Istnieje kod stylu wektorowego, który może być szybszy na GPU i widzę, że jest to opcja pewnego dnia, ale większość kodu (według objętości, jeśli nie przez moc obliczeniową) będzie na procesorach.

3

Oprócz innych odpowiedzi: Istnieje również kilka funkcji Java, które nie są obsługiwane w celu tłumaczenia przez rootbeer.

  1. natywne metody
  2. odbicie
  3. metoda dynamiczna inwokacja
  4. spania a wewnątrz monitora.
  5. zbieranie śmieci (!)

Należy unikać kod z wykorzystywanych tych cech.

Aktualizacje Rootbeer są w trakcie produkcji, aby zapewnić odśmiecanie i inne brakujące funkcje Java.

+0

Pierwsze 4 punkty są jasne. Jeśli rozumiem problem z GC, wówczas kod powinien zawierać tylko metody statyczne lub singleton. Czy to jest poprawne? Nie powinno być często przydzielania obiektów, ponieważ obiekty nie mogą być śmieciami? – Horcrux7

+0

GC jest w drodze do dodania. Do tego czasu powinieneś poddać recyklingowi Obiekty zamiast ustawiania odniesień do 'null' i utworzyć nowy Obiekt. Lub używasz kodu ze stałą lub rosnącą liczbą obiektów. – Simulant

+0

Można użyć dynamicznego przydzielania pamięci, ale nie ma zbierania śmieci. Więc jeśli zabraknie pamięci na GPU, OutOfMemoryError jest przepychany do procesora. – pcpratts

2

Aby przyspieszyć pracę z procesorami graficznymi, należy wykonać wiele obliczeń na element danych, ponieważ transfer danych przebiega tak wolno. Zazwyczaj potrzebujesz 2 lub 3 zagnieżdżonych dla pętli działających na GPU z co najmniej 1000 wątków.