Szukałem sposobu na prawidłowe kodowanie algorytmiczne za pomocą .NET z wszystkimi zaletami nowoczesnych języków (np. Lubię silne sprawdzanie typu, przeciążanie operatorów, lambdy, ogólne algorytmy). Zwykle piszę moje algorytmy (głównie prozessing obrazu) w C++. Ponieważ F # jako język wydaje się dość interesujący, trochę grałem, ale wydaje mi się to bardzo powolne. Jako najbardziej prostego testu Właśnie zrobiłem jakieś manipulacje Array -> Zwiększenie jasności obrazu:Optymalizacja kodu F # czy jest naprawdę tak wolno?
let r1 = rgbPixels |> Array.map (fun x -> x + byte(10))
Wydaje się być czynnikiem co najmniej 8 razy wolniej niż w porównaniu C++ realizacji - co gorsza dla bardziej złożonych algorytmów na przykład Splot 2D. Czy jest jakiś szybszy sposób, czy też brakuje mi jakichkolwiek konkretnych ustawień kompilatora (tak, budowanie wersji z optymalizacją na ...)? Jestem skłonny zapłacić za ładną i wysoką abstrację, ale takie obciążenie nie jest miłe (muszę zrównoleglić na 8 rdzeniach, aby to zrekompensować :)) - przynajmniej niszczy motywację do dalszej nauki ... Moje inne opcją byłoby opuścić moje cięższe algos w C++ i interfejs ze sprzężonym C++, ale to nie jest miłe, ponieważ obsługa zarządzanego opakowania byłaby sporym obciążeniem.
Możliwe, że zostałby wstawiony, ale można zacząć od zastąpienia wywołania "bajtem" przez '10uy'. – Daniel
Czy możesz umieścić swoją implementację C++ na [ideone] (http://ideone.com/), więc mamy coś do pracy? – Daniel
Czy [te wyniki] (http://ideone.com/Z4Gvj) są porównywalne z twoimi? – Daniel