Piszę kernel OpenCL, który zawiera kilka barier w pętli. Przetestowałem jądro na procesorze (8-rdzeniowy FX8150), a wynik pokazuje, że te bariery zmniejszyły prędkość działania o 50-100 razy (dodatkowo zweryfikowaliśmy to przez ponowne wdrożenie jądra w Javie przy użyciu wielowątkowości + CyclicBarrier) . Podejrzewam, że powodem tego jest fakt, że bariera w zasadzie uniemożliwia procesorowi wykorzystanie niecałkowitej realizacji, więc jestem trochę zaniepokojony, że zaobserwowałbym taką samą redukcję prędkości na GPU. Sprawdziłem kilka oficjalnych dokumentów i trochę goograłem, ale jest niewiele dostępnych informacji na ten temat.Czy współczesny procesor graficzny (np. Fermi/Evergreen) obsługuje realizację poza kolejnością?
5
A
Odpowiedz
7
Aktualny stan-karty graficzne sztuki są rzędu potokowym procesorem. Procesory GPU efektywnie wypełniają potoki, przeplatając instrukcje z różnych osnów (wavefronts). W porównaniach procesory wykorzystują spekulacyjne wykonanie poza kolejnością, aby wypełnić potok. Istnieją różne jednostki funkcjonalne, takie jak jednostki ALU i SFU, które mają oddzielone potoki. Ale zauważ, że zależność od instrukcji zatrzyma odkształcenie. Więcej informacji na temat rozwiązywania zależności instrukcji na układach GPU można znaleźć na stronie this NVIDIA patent.
2
NVIDIA Next Generation
CUDA Compute i architektura graficzna, o nazwie kodowej „Fermi”:
Nvidia GigaThread Engine ma możliwości (na stronie 5)
- 10x szybsze kontekście aplikacji przełączania
- Równoczesne wykonywanie jądra
- Zlecenie bloku wątków poza kolejnością :)
- podwójnego przesyłania zachodzą na siebie silniki pamięci
Oczywiście, że ma. Powinieneś niejednorodnie rozdzielać czasowe obliczenia FpU za pomocą kodu, aby mógł wykonywać całkowitą kalkulację. podczas robienia unoszenia się w tym samym czasie –
@ tuğrulbüyükışık Thanks. Czy możesz wskazać mi oficjalny dokument, który to potwierdza (w celach referencyjnych)? – aaronqli