OpenCL - synchronizacja wielu buforów GPU

Mam jądro OpenCL, które oblicza całkowitą siłę na cząstce wywieranej przez inne cząstki w systemie, a następnie inną, która integruje pozycję / prędkość cząstek. Chciałbym zrównoważyć te jądra na wielu GPU, w zasadzie przypisując pewną ilość cząstek do każdego GPU. Jednak muszę uruchamiać jądro wiele razy, a wynik z każdego GPU jest wykorzystywany na każdym innym. Pozwólcie, że wyjaśnię to nieco dalej:

Powiedzmy, że mamy cząstkę 0 na GPU 0 i cząstkę 1 na GPU 1. Siła na cząstce 0 jest zmieniana, podobnie jak siła na cząstce 1, a następnie ich położenie i prędkości są odpowiednio zmieniane przez integratora. Następnie te nowe pozycje muszą być umieszczone na każdym GPU (oba GPU muszą wiedzieć, gdzie są zarówno cząstka 0, jak i cząstka 1), a te nowe pozycje są używane do obliczenia sił na każdej cząstce w następnym kroku, który jest używany przez integrator, którego wyniki służą do obliczania sił itp. itd.Zasadniczo, wszystkie bufory muszą zawierać te same informacje do czasu, gdy obliczenia siły będą się toczyć.

Pytanie brzmi:Jaki jest najlepszy sposób synchronizacji buforów na GPU, biorąc pod uwagę, że każdy GPU ma inny bufor? Nie mogą mieć jednego wspólnego bufora, jeśli chcę zachować równoległość,jak na moje ostatnie pytanie (jeśli jednak istnieje sposób na utworzenie wspólnego bufora i wciąż trzymanie wielu GPU, jestem za tym wszystkim). Podejrzewam, że kopiowanie wyników każdego kroku spowoduje większe spowolnienie niż warto zrównoważyć algorytm na GPU.

Znalazłemten wątek, ale odpowiedź nie była zbyt definitywna i dotyczyła tylko pojedynczego bufora dla wszystkich GPU. Chciałbym wiedzieć, w szczególności dla procesorów graficznych Nvidia (a dokładniej Tesla M2090).

EDYTOWAĆ: Właściwie, jak zaten wątek na forach KhronosPrzedstawiciel grupy roboczej OpenCL mówi, że pojedynczy bufor we współdzielonym kontekście rzeczywiście rozprzestrzenia się na wiele GPU, a każdy z nich upewnia się, że ma najnowsze informacje w pamięci. Jednak nie widzę tego zachowania w procesorach graficznych Nvidia; kiedy używamwatch -n .5 nvidia-smi podczas gdy mój program działa w tle, widzę, że jedno użycie pamięci GPU zwiększa się na chwilę, a następnie zmniejsza się, gdy wzrasta zużycie pamięci innego GPU. Czy jest ktoś, kto może wskazać mi właściwy kierunek? Może to tylko ich wdrożenie?

questionAnswers(1)

yourAnswerToTheQuestion