Lista pecet@man.lodz.pl
[Lista archiwów] [Inne Listy]

Re: [PECET] Algorytmy gier na procesory wielordzeniowe - jak?

To: pecet@man.lodz.pl
Subject: Re: [PECET] Algorytmy gier na procesory wielordzeniowe - jak?
From: Robert Winkler <noone@nowhere.org>
Date: Sun, 01 Dec 2013 17:44:56 +0100
W dniu 2013-12-01 11:42, Ghost pisze:

Użytkownik "Robert Winkler" <noone@nowhere.org> napisał w wiadomości
news:529b0ec5$0$2169$65785112@news.neostrada.pl...
W dniu 2013-11-24 09:58, Marcin N pisze:
Mamy nowe konsole i coraz więcej procesorów 6-8 rdzeniowych.

Jak tworzy się algorytmy gier, które potrafią ogarnąć tyle rdzeni?
Nie potrafię sobie tego wyobrazić. Powiedzcie w skrócie, jaką drogą idą
te algorytmy.



Jeśli dla ciebie 8 rdzeni to dużo to co powiesz
ma produkt firmy Adapteva.
Obecnie pzryjmują zamówienia na swój produkt o nazwie Epiphany-IV,
jest to moduł obliczeniowy stworzony na bazie procesora
posiadającego 64 niezależne rdzenie typu RISC,
każdy wykonujący swój własny kod.
Ich celem jest przygotowanie do roku 2018 procesora
posiadającego 64 tyś. rdzeni.
Czy im się uda, zobaczymy już za kilka lat.


Jeśli chodzi o zwykłe komputery PC, poczytaj sobie o OpenMP dostępnym
obecnie w wiekszości kompilatorów C++.
Z mojego podwórka mogę ci podrzucić Task Parallel Library (TPL)
które jakiś czas temu weszło w skład .NET Framework
http://msdn.microsoft.com/en-us/library/dd537608%28v=vs.110%29.aspx

Czytja ze zrozuminiem. Pytanie dotyczylo rdzeni na potrzeby gier (i to
niegraficznych rdzeni).

Po pierwsze OpenMP to co innego niż OpenCL.
OpenMP pozwala co za pomocą "#pragma" określasz przykładowo,
że kod danej pętli ma zostać zrównoleglony automatycznie
przez kompilator i runtime.
Dotyczy to oczywiście kodu CPU a nie GPU.
O ile zapewni się synchronizacje przy dostępie do współdzielonych danych
można ten mechanizm z powodzeniem użyć do detekcji kolizji,
lub obliczania fizyki, czy też AI postaci.
We wszystkich przypadkach pracujemy przecież na listach obiektów
i pętlach kolejno je przetwarzających.
Piszesz wieć:
#pragma omp parallel for
for (int x = 0; x < imageWidth; x++) {
    for (int y = 0; y < imageHeight; y++) {
        Color shadedColor = shootRay(x,y);
        image.SetPixel(x, y, shadedColor);
    }
}
i masz zrównoleglony kod, podzielony na wątki,
a kod znajdujący się za pętlą zostanie uruchomiony
kiedy wszystkie wątki skończą już prace.

/Robert

<Pop. w Wątku] Aktualny Wątek [Nast. w Wątku>