2013-10-22 11 views
7

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ą:

  1. 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).
  2. Brak możliwości dodawania/mnożenia Vector4f i Vector4i (lub innych wektorów, które są różne).
  3. 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).
  4. 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?

+2

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. –

+0

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

Odpowiedz

4

AFAIR rozwój nie jest w toku. Projekt jest open source i maszyny nie są zbyt skomplikowane, więc można poprawić bieżącą realizację. Zastanawiałem się nad dodaniem instrukcji, ale jak zwykle nie było wystarczająco dużo czasu, aby to zrobić (również aplikacja została ostatecznie anulowana). Być może zainteresuje Cię temat: http://lists.ximian.com/pipermail/mono-devel-list/2012-February/038632.html

1

Inna odpowiedź powstała kilka lat temu. Tak więc napisałem ten list, aby wyszczególnić wszystkie niezbędne bity dla 2018 czytelników.

Kiedy Mono zaczął wspierać SIMD, oni zostali poproszeni przez Unity facetów,

http://tirania.org/blog/archive/2008/Nov-03.html

To wydawało się być w pośpiechu, więc ogólny projekt API nadal ma miejsca na rozbudowę.

Microsoft rozpoczął pracę na pełniejszą i standaryzowanego SIMD obsługującym biblioteki, i to było kilka lat później w 2014 roku,

https://www.infoq.com/news/2014/04/SIMD-CLR

Dlatego należy zwrócić uwagę na to nowszych opcji.

Microsoft Open Source .NET Core w 2015 r., A od tego czasu prace nad SIMD zostały przyspieszone.

To było w ubiegłym roku, że Mono 5.0 ogłosił obsoleteness z Mono.SIMD na rzecz pracy Microsoft,

http://www.mono-project.com/docs/about-mono/releases/5.0.0/ (rozdział wsparcie Przyspieszenie SIMD).