2016-10-04 40 views
6

Próbuję rozwiązywać problemy z kroplami w FPS. Widzę, że Metal Flushes są tym, co zajmuje większość czasu renderowania. Czy to dobrze?Co to jest "Metal Flush" w widoku statystyk SceneKit?

SceneKit stats display

+0

Zrozumiałeś? – ColdSteel

+0

W pewnym sensie ... Mam znaczną poprawę w tym dziale, zmniejszając rozmiar i rozdzielczość moich tekstur. Sądzę więc, że możemy wywnioskować, że "Metal Flush" to transfer danych obrazu z pamięci głównej do pamięci wideo lub coś podobnego. –

+0

ale nawet dla całej czarnej sceny bez niczego trwa 5-6 ms – ColdSteel

Odpowiedz

5

Jestem nie pewny na ten temat, ponieważ Apple nie wydaje się mieć udokumentowane co dokładnie „Metal Flush” jest wszędzie, ale ja odpowiem na podstawie wcześniejszych doświadczeń z OpenGL:

Podczas cyklu wykonania aplikacji zasilanej przez GPU, procesor przesyła dane do procesora graficznego, czeka na zakończenie pracy GPU na tych danych (ewentualnie wykonując inne prace w międzyczasie) i jak tylko GPU jest gotowe , popchnij więcej danych i poproś o więcej operacji. Zazwyczaj "płukanie" oznaczałoby, że procesor czeka na GPU, aby zakończyć operacje ("wypłukanie starych danych"), aby mógł przesłać więcej danych do GPU.

Tak więc, jeśli moja interpretacja jest poprawna, oznaczałoby to, że "Metal flush" mierzy czas, który CPU spędza czekając na pamięć wideo, aby zwolnić, aby mógł przesyłać więcej danych i żądać operacji na GPU. W takim przypadku może to być dobre lub złe:

Zawsze będzie jakiś narzut komunikacji między procesorem a GPU, więc jeśli większość czasu renderowania jest pobierana przez "Metal Flush", może to oznaczać, że twoja aplikacja działa wystarczająco szybko, że większość opóźnień między klatkami jest tylko komunikatem narzutowym. W takim przypadku byłaby to dobra rzecz.

Z drugiej strony, możesz przesłać wiele danych do procesora graficznego i czas potrzebny na skopiowanie danych i proces, który może powodować opóźnienia. W takim przypadku byłaby to zła rzecz.

Na koniec ważne jest, aby zapewnić wysoki poziom FPS. Jeśli Twój FPS spadnie z powodu "Metal Flush", możesz spróbować spakować swoje transfery danych - na przykład przechowywanie tekstur w porcjach i/lub użycie tekstur o niższej rozdzielczości prawdopodobnie by im w tym pomoże.