Autor Wątek: CUDA + rendering - spadek wydajności, znowu multi GPU i takie tam  (Przeczytany 695 razy)

Offline _OskaR

  • Użytkownik

# Styczeń 18, 2010, 00:45:34
Od pewnego czasu bawię się trochę w wykorzystanie GPU i zrobiłem takiego potworka - renderuję sobie terenik, przesuwając go co klatkę w CUDAch. Ten konkretny przypadek jest oczywiście głupawy, bo zrobienie tego na shaderach to kwestia dopisania paru rzeczy w vs, a wpływ na wydajność będzie praktycznie żaden, ale nie o to chodzi. Bardzo nie zdziwił spadek fps - z 300 do ok. 150 - nie wiem, czy to normalne, czy nie. Doszło jedynie:
Kod: (cpp) [Zaznacz]
cutilSafeCall(cudaGLMapBufferObject((void**)&verticesGPU2, g_vertices));
CUDAtestVBO(verticesGPU2,timer2, N2, block_size, n_blocks);
cutilSafeCall(cudaGLUnmapBufferObject(g_vertices));
gdzie verticesGPU2 to zaalokowana pamięć (przez cudaMalloc). Czy mam rozumieć, że Map/UnmapBufferObject kopiuje sobie dane z jednej tablicy do drugiej i na odwrót, co może być jednym z głównych powodów spadku wydajności?

Wracając do użycia wielu GPU - dalej nie wiem, jak to możliwe, że raz obliczenia są teoretycznie wykonywane na jednym GPU, a innym razem na dwóch. Oczywiście w tym przypadku, dodatkowe obliczenia przy użyciu CUDA dotyczą zupełnie innych danych. Po długich poszukiwaniach, stwierdziłem, że coś takiego powinno zadziałać:
Kod: (cpp) [Zaznacz]
cutilSafeCall(cudaSetDevice(1));
cutilSafeCall(cudaGLSetGLDevice(0));
ale też nie działa (tj. tak jak powinno). Użycie innych parametrów też niczego nie zmienia. Jakoś nie chce mi się wierzyć, żeby znaczenie parametrów było losowe.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Khaine

  • Użytkownik

# Styczeń 18, 2010, 02:42:06
kopiowanie danych z ramu karty graficznej do ramu komputera bardzo zarzyna wydajnosc gpgpu. W aplikacjach realtime nie powinno sie tego robic w kazdej klatce, szczegolnie jesli sa to duze porcje danych. Jesli nie wiesz co robia funkcje, ktorych uzyles to lepiej sie dowiedz, bo jest bardzo mozliwe, ze to wlasnie chodzi o kopiowanie.