Przepraszamy za niewyraźne pytanie z tematu, ale pracuję nad niektórymi akademickimi procedurami przetwarzania wideo. Algorytmy są napisane w MATLAB-ie, i chociaż jest to dobre dla celów programistycznych, to przetwarza wideo o wartości około 60spf lub około 0,0166 fps. Nie trzeba dodawać, że to nie wystarczy na dema i takie, więc moja letnia praca polega na przekształceniu rutyny w coś, co będzie działać drastycznie szybciej.Jakie jest najlepsze rozwiązanie dla kłopotliwego problemu równoległego?
Napisałem najwolniejszą część kodu dla CUDA, rozwiązania GPGPU nvidii. Jednak istnieje również duża część kodu, która wydaje się być lepiej wykonana na procesorze, ponieważ jest względnie szeregowa. Problem polega na tym, że maszyna, którą dostałem, ma 2 procesory Xeon, z 8 rdzeniami logicznymi, i wydaje się wstydem zawężać kod GPU przez kodowanie tylko dla pojedynczego rdzenia. Proces konwersji wideo działa tak, że każda klatka nie zależy od innych klatek, więc pomyślałem, że najlepiej będzie jakaś asynchroniczna kolejka/strumień.
Oto kłamstwo moje pytanie: jaki byłby najlepszy sposób na osiągnięcie tego typu równoległości z najlepszym stosunkiem wysiłku do zwiększenia wydajności?
Niektóre z rozwiązań, na które patrzyłem to OpenMP, .NET TPL i tylko proste pthreads.
Mam tylko podstawową ekspozycję na programowanie asynchroniczne, więc wolałbym raczej korzystać z biblioteki lub czegoś, niż bawić się z muteksami i barierami i strzelać sobie w stopy kilka razy. Nie mam nic przeciwko uczeniu się, ponieważ jest to jeden z moich celów na lato, ale jednocześnie równoległość to ciężko. Jednakże, jeśli różnica prędkości jest rzeczywiście bardzo zauważalna, jestem skłonny wyciągnąć włosy na kilka tygodni. : P
Z góry dziękuję.
Jeśli możesz zepsuć problem na wiele części, nad którymi można pracować bez zakłóceń (z dobrze określonymi punktami synchronizacji), wówczas "biblioteka" powinna być po prostu cukrem ... jednym prostym sposobem jest użycie pula wątków, równoległe kolejki (jedna dla danych wejściowych, druga dla danych wyjściowych) i tylko obiekty/dane dostępu, które ten wątek "posiada" (to można powiększyć do niezmiennych struktur zewnętrznych). –