Wpis z mikrobloga

#komputery #programowanie #cpp

Mireczki mam taki plan ambitny, bądź nie - jeszcze nie mam pewności jakie to trudne. Będę miał do przetwarzania ogromne ilości danych, mówimy tutaj np. o 8 albo 10 milionach danych typu double, czasem pewnie i więcej nawet. No i na tych danych trzeba będzie cośtam liczyć. No i tak sobie pomyślałem, że może by przyszpanować (o ile będę w stanie) i spróbować nawet nie tyle przygotować te obliczenia pod wielowątkowość, co wręcz odpalić je na GPU. No każdy wie, że wiatraki z kompa pourywa przy takiej różnicy szybkości przetwarzania jaka jest na współczesnym GPU vs współczesne CPU. Tam nawet najbardziej chore gówna mogą być a się wykona w milisekundy.

No i pierwszym, co mi przychodzi do głowy, aby zrobić coś takiego jest OpenCL. Miał ktoś do czynienia? Jak jest z wieloplatformowością? Czy działa po ludzku na AMD i nVidii? Czy ogółem używanie tego to kosmos, czy będzie szło to jakoś ogarnąć nie będąc #!$%@?? Jakieś książki fajne do tego?
  • 14
@Khaine: Co ile te dane napływają? Robiliście jakieś performance testy? Skąd wiesz że zwykły procesor nie wyrobi?
Czy te obliczenia da się zrównoleglić na tyle żeby dało się w pełni wykorzystać potencjał GPU?
@M4ks: No nie, ale po co czekać ( ͡° ͜ʖ ͡°) Poza tym 8 czy 10 milionów w jednym wektorze danych. A może być ich 10 albo 12 przykładowo. I miej to wszystko liczyć, to trochę zejdzie.
@lerner: Dane są statyczne tak naprawdę. W założeniu nie będą napływać w locie. Po prostu POTENCJALNIE to mogą być dane archiwalne z kilku lat pomiarów dla połowy fabryki z których trzeba będzie liczyć różne rzeczy. Tego jest zwyczajnie dużo. To można policzyć na CPU, ale jak mówiłem - to raczej dla szpanu niż z prawdziwej konieczności.

Ja miałem do czynienia z pierwowzorem tego co ja robię i tam liczenie było jednowątkowe,
Ja miałem do czynienia z pierwowzorem tego co ja robię i tam liczenie było jednowątkowe


@Khaine: Wiesz na jakim procesorze to było?
Po drugie, jeżeli obliczenia nie były wielowątkowe, może po prostu nie da się tego tak łatwo zrównoleglić? W przypadku GPU może być o wiele trudniej.
Poza tym, czy te dane są sortowane?
http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array

Jak skomplikowane są te obliczenia, co musisz z tego wektora doubli wyliczyć?
@lerner: Na moim. i5 4690k wykręcony na 4.5 GHz :D

To jest na potrzeby automatyki. Tworzenie modeli na podstawie danych pomiarowych. Powiem szczerze, że nie wiem co tam w środku jest. Nie jestem jeszcze na tym etapie aby analizować jak faktycznie ten model powstaje, natomiast jest to zajebiście złożona sprawa. Jak masz model który ma np. 4 wejścia i 2 wyjścia, i takie dane pomiarowe mu wrzucasz (czyli np. 6 wektorów
Po prostu się zastanawiam, czy opłaca się próbować zrobić to po szpanersku, czy zrobimy na #!$%@? tak jak jest teraz xD


@Khaine: Wektory + typ double sugeruje, że nadaje się do GPU. Ale bez wiedzy, co trzeba z tymi liczbami robić nikt Ci nie pomoże. Poza tym i tak najlepsze IMHO podejście to napisać to elegancko na normalne CPU (może obecna implementacja jest nieefektywna) a potem część obliczeń, która ładnie się
@erwit: Java odpada, to jest robione w C++ i będzie robione w C++. Nie ma nawet śladu możliwości, że będziemy to robić w Javie. Poza tym mamy Qt, możemy wszystko w banalny sposób wielowątkowić. I pewnie będzie chodzić o połowę szybciej niż analogiczny program w Javie.