Dostęp do pamięci GPU z jądra systemu operacyjnego

Pracujemy nad prototypem badawczym, w którym zamierzamy wykorzystać pamięć GPU jako „dysk RAM GPU”. W tej chwili mamy moduł trybu użytkownika, który wykorzystuje OpenCL do kopiowania danych do i z pamięci GPU.

Wolelibyśmy sposób dostępu do pamięci GPU bezpośrednio z jądra systemu Windows (w ten sposób zmniejszając obciążenie wprowadzane np. przez przełącznik kontekstu). Jaki jest najlepszy sposób, aby to osiągnąć?


person user1201791    schedule 10.02.2012    source źródło
comment
O ile mi wiadomo, nie ma interfejsu trybu jądra dla procesora graficznego, ale można łatwo przydzielić pamięć w trybie użytkownika, przekazać referencję do trybu jądra i tam używać pamięci. Ale dlaczego miałbyś zrobić coś takiego? Dysk RAM nie ma sensu, a dysk RAM w pamięci GPU ma jeszcze mniej sensu.   -  person Christopher    schedule 10.02.2012
comment
@Christopher: Sterownik GPU działa w trybie jądra i kontroluje wszystkie transfery do i z GPU. Interfejsy API trybu użytkownika, takie jak OpenGL i DirectX, komunikują się z instancjami urządzeń udostępnianymi przez sterownik jądra. Inne sterowniki mogą równie dobrze komunikować się z tymi instancjami urządzeń. Ale są one specyficzne dla dostawcy.   -  person Ben Voigt    schedule 25.02.2012
comment
@BenVoigt Oczywiście chodzi o interfejs sterownika jądra do sterownika jądra. I o ile wiem, nie ma takiego udokumentowanego.   -  person Christopher    schedule 26.02.2012


Odpowiedzi (1)


Funkcja, której szukasz, nazywa się pamięć zerowej kopii. Obsługują ją najnowsze procesory graficzne firm AMD i NVIDIA. Nie jestem osobiście zaznajomiony z obsługą kopii zerowej firmy NVIDIA w OpenCL (wiem, że jest ona dobrze obsługiwana w CUDA). Obsługa zerowej kopii AMD jest dobrze udokumentowana w przewodniku programowania OpenCL: http://developer.amd.com/sdks/AMDAPPSDK/assets/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf

Zobacz Tabela 4.2 (Właściwości obiektu pamięci OpenCL), aby uzyskać opis flag, które należy przekazać do clCreateBuffer. Najprawdopodobniej będziesz chciał użyć CL_MEM_USE_PERSISTENT_MEM_AMD, który przydziela pamięć w pamięci urządzenia (GPU), która jest dostępna z hosta.

person Michael Boyer    schedule 24.02.2012