jak dostać się wstawkami asemblerowymi do rejestrów matematycznych do jednostki GPU , tylko cztery działania , dodawanie , odejmowanie , mnożenie i dzielenie ? jakieś przykłady w języku C++, wstawki asm?
assembler i programowanie GPU
- Rejestracja: dni
- Ostatnio: dni
- Postów: 678
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1020
Do GPU się nie dostajesz. GPU to osobny "komputer" do którego wysyłasz swoje dane (RAM -> VRAM), następnie wykonujesz program napisany dla GPU po czym tak zmodyfikowaną pamięć przesyłasz do swojego programu (VRAM -> RAM)
Poczytaj jak działa CUDA (interfejs dla NVIDII) https://developer.nvidia.com/blog/even-easier-introduction-cuda/ . Przy pomocy CUDA możesz napisać program, który jednocześnie pozwala:
- na pisanie zwykłego C++ wykonywanego na CPU
- pozwala pisać programy dla GPU w formie kodu C++ (to te funkcje z
__global__) - pozwala przesyłać pamięć w obie strony
- pozwala uruchamiać napisany program dla GPU z twojego kodu CPU
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: XML Hills
ogólnie rzecz biorąc, gpu nie zapewniają kompatybilności wstecznej na poziomie zestawu instrukcji. gdybyś napisał kod dla gpu w asemblerze korzystając instrukcji gpu bezpośrednio, to taki kod nie zadziałałby na kolejnej generacji gpu. to strzał w stopę, zarówno dla producentów oprogramowania (cały kod do wyrzucenia stałby się przestarzały, gdy tylko entuzjaści przeniosą się na nową generację gpu) jak i dla producentów gpu (cały wysiłek niskopoziomowych optymalizacji pod poprzednią generację sprawiłby, że nowa generacja miałaby trudniej z tym definitywnie wygrać, gdy jeszcze nie ma niskopoziomowych optymalizacji kompatybilnych z nową generacją gpu).
teoretycznie dałoby się (mniej lub bardziej heroicznym wysiłkiem) pisać bezpośrednio w asemblerze docelowej architektury gpu (tzn. korzystając z asemblera faktycznie tworzącego bezpośrednio docelowy kod maszynowy, a nie takiego operującego na formie pośredniej), ale wątpię, by ktokolwiek to ułatwiał w przypadku większości współczesnych gpu. jeśli już, to prędzej bym się takich możliwości (ułatwień) spodziewał w konsolach (playstation, xbox, konsole od nintendo, itp itd), bo tam dynamika współpracy twórców gier i sprzętu jest zupełnie inna. jeśli chodzi o gpu poza konsolami to raczej celowałbym w szukanie intrinsics specyficznych dla platformy czy kombinowanie z kodem pośrednim (typu spir-v czy nvidia ptx).
wilkwielki napisał(a):
jak dostać się wstawkami asemblerowymi do rejestrów matematycznych do jednostki GPU , tylko cztery działania , dodawanie , odejmowanie , mnożenie i dzielenie ? jakieś przykłady w języku C++, wstawki asm?
tutaj brakuje bardzo ważnej podstawowej kategorii operacji: odczyt i zapis do pamięci. to samo w sobie może być skomplikowane, bo rodzajów pamięci w gpu jest wiele. pamięci tylko do odczytu, tylko do zapisu, albo w obie strony. pamięć danych, pamięć tekstur albo może i inne osobne rodzaje. pamięć widoczna tylko lokalnie albo widoczna globalnie. bez takiego typu dostępu po stronie gpu niczego nie zrobisz, bo (z tego co się orientuję) z poziomu cpu nie możesz sterować rejestrami gpu (tzn. tymi używanymi w shaderach, nie tymi kontrolującymi tryb pracy gpu).
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3
Ponoć można programować sterowniki graficzne w Javie dzięki Java GPGPU. Java ma przecież natywny kompilator inny od JVM to czemu nie?
C++ 2.0 ze składnią Javy. James Gosling i Bjarne Stroustrup łącza siły i tworzą nowy język.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: XML Hills
franekos napisał(a):
Ponoć można programować sterowniki graficzne w Javie dzięki Java GPGPU. Java ma przecież natywny kompilator inny od JVM to czemu nie?
nie no, nie sterowniki graficzne. można pisać w javie compute shadery. autorzy javy pracują nad tym od lat. kiedyś prace nad javą kompilowaną do gpgpu były w ramach projektu https://openjdk.org/projects/sumatra/ a dzisiaj są w ramach projektu https://openjdk.org/projects/babylon/ i po wielu latach wszystko jest nadal w fazie wstępnego prototypu. jeśli ktoś jest koksem z zarówno javy jak i gpgpu to może dołączyć do projektu i dodać coś od siebie. w przeciwnym przypadku zostaje co najwyżej czekanie. myślę, że prędzej doczekamy się oficjalnych wersji https://www.w3.org/TR/webgpu/ i https://www.w3.org/TR/WGSL/ (tzn. standard / recommendation).