Chcę się dowiedzieć, czy kiedykolwiek pojawił się/był (a) rozwój Mono.SIMD (lub wsparcie SIMD ogólnie w Mono) odkąd wyszedł 5 (!) Lat temu. Osobiście uważam, że był to świetny krok do poprawy prędkości dla C#. Jednak używam go już od jakiegoś czasu i mam wrażenie, że Mono.SIMD pozostaje w tyle, ponieważ brakuje wielu funkcji.Czy jest jeszcze jakiś rozwój SIMD w Mono?
Niektóre z problemów stojących jestem obejmują:
- brak iloczynu skalarnego, które mogą być realizowane w 1 operacji odkąd SSE4.1 (który ukazał się w 2006 roku i jest obecnie obsługiwane w 70% komputerów), podczas gdy zajmuje 3 operacje wewnątrz Mono.SIMD. Oprócz tego programista musi napisać funkcję dla każdej wersji SSE, zadanie, które powinien wykonać JIT (ponieważ jest tworzone specjalnie po to, aby pozwolić programistom przestać martwić się o wersje CPU).
- Brak możliwości dodawania/mnożenia Vector4f i Vector4i (lub innych wektorów, które są różne).
- Brak prawidłowego rzucania wektorów (bity nie wydają się zmieniać w ogóle, więc wyniki są bardzo dziwne i prawie całkowicie bezużyteczne).
- Wiele innych funkcji, które nie są uwzględnione, takich jak zaokrąglanie.
Więc, czy ktoś wie, czy coś się dzieje z Mono.SIMD lub wsparcie SIMD w ogóle (a jeśli tak, co)? Lub, alternatywnie, czy ktoś zna dobre rozwiązanie dla któregokolwiek z wymienionych problemów?
Instrukcja produktu Dot w SSE4.1 jest prawie bezużyteczna.Na procesorach Intela dekoduje do 4 mikrooperacji (w wersji z jedną precyzją), a na najnowszych procesorach AMD ta instrukcja jest mikrokodowana. Nigdy nie widziałem żadnego kodu (nawet syntetycznego testu porównawczego), który korzysta z tej instrukcji. –
W .Net framework 4.6 i 4.5 (System.Numerics dla wektorów ops), a ponieważ RyuJIT z Microsoft.Bcl.Simd, SIMD jest teraz natywnie obsługiwany przez .Net. Może to zachęci zespół Mono do podążania za przykładem? – AFract