Mój program jest dobrze dostosowany do MPI. Każdy procesor wykonuje swoje własne, specyficzne (wyrafinowane) zadanie, generuje pojedyncze double
, a następnie używam MPI_Reduce
, aby pomnożyć wynik z każdego procesora.MPI + GPU: jak miksować obie techniki
Ale powtarzam to wiele, wiele razy (> 100 000). Tak więc przyszło mi do głowy, że GPU znacznie przyspieszyłoby działanie.
Mam google'd wokół, ale nie mogę znaleźć nic konkretnego. Jak radzisz sobie z mieszaniem MPI z procesorami graficznymi? Czy istnieje sposób na to, aby program zapytał i zweryfikował "oh, ten numer to procesor graficzny, a pozostałe to procesory"? Czy jest zalecany samouczek lub coś takiego?
Co ważne, nie chcę ani nie potrzebuję pełnego zestawu procesorów graficznych. Potrzebuję po prostu dużej liczby procesorów, a następnie pojedynczego procesora graficznego, aby przyspieszyć często używaną operację MPI_Reduce
.
Oto schematyczny przykład tego, co mówię:
Załóżmy, że mam 500 procesorów. Każdy procesor w jakiś sposób wytwarza, powiedzmy, 50 double
s. Muszę pomnożyć wszystkie 250,00 z tych double
s razem. Powtarzam to od 10 000 do 1 miliona razy. Gdybym mógł mieć jedno GPU (oprócz 500 procesorów), to mogłoby być naprawdę wydajne. Każdy procesor będzie obliczał swoje 50 double
s dla wszystkich ~ 1 miliona "stanów". Następnie wszystkie 500 procesorów wysłałoby swoje double
s do GPU. GPU będzie następnie pomnożyć 250 000 double
s dla każdego z 1 miliona "stanów", produkując 1 milion doubles
.
Te liczby nie są dokładne. Obliczenia są rzeczywiście bardzo duże. Próbuję tylko przekazać ogólny problem.
To nie brzmi jak bardzo dobre dopasowanie do obliczeń GPU Proponowany komponent GPU zawiera tylko kilkaset podwójnie precyzyjnych MFLops, to jest o rząd wielkości mniejszych niż jest to opłacalne dla GPU, i zostanie zasypane przez obciążenie sieci związane z transmisją danych przez kabel do węzła hostującego GPU i przez magistralę PCI-e do pamięci GPU – talonmies
@talonmies Przepraszamy za zwodniczy przykład schematu .. Będę aktualizował na moje pytanie W rzeczywistości jest on nieznacznie bardziej skomplikowane.Muszę pomnożyć między * O * (10k) 'duble' razem.Każdy procesor będzie produkować kilka tych' duble' (nie tylko jeden.) Liczba stanów będzie między ~ 10.000 a kilka milionów (nie 100 000) Cały ten proces będzie często powtarzany – cmo
Tak jak napisałem, to wciąż jest tylko kilkaset MFLops. ilość obliczeń, nawet dla procesora. – talonmies