Mam wątpliwości co do kategorii forum, ale nie bardzo wiedziałem gdzie to umieścić...
Do rzeczy, pytanie bardziej ogólne. Oglądałem program o superkomputerach (kilkaset procesorów, TB RAM itd...) tematy dla mnie czysto teoretyczne. Zastanowiła mnie jednak wypowiedź gościa, który stwierdził, że do programowania na takich maszynach uzywa się głównie C i Fortran. Nie wiem czemu ten ostatni mocno mnie zaskoczył.
Dlatego zadaje pytanie, może ktoś miał styczność z programowaniem na takie maszyny i podzieli się doświadczeniem. Nie chce jakiś szczegółów mega technicznych, ale dowiedzieć się więcej jak bardzo różni się to od "normalnego" programowania?
Z takich maszyn korzystają naukowcy, ludzie zajmujący się fizyką/chemią/... komputerową, obliczeniami i symulacjami. C i Fortran są dla nich wystarczająco proste i niegdyś powszechnie nauczane. Korzysta się z OpenMP i OpenMPI, mające świetne wsparcie w owych językach.
Myślę, że to kwestia przyzwyczajenia, pragmatyzmu i dostępności sprawdzonych narzędzi.
Od paru lat domowe komputery posiadają procesory wielordzeniowe – aby wykorzystać ich pełną moc programy w C, C++ należy pisać z wykorzystaniem OpenMP bo inaczej nasz program będzie korzystał tylko z jednego rdzenia.
http://www.embedded.com/design/mcus-processors-and-socs/4007154/Use-OpenMP-for-programming-parallel-threads-in-multicore-applications-Part-1
Używa się C/C++/Fortran.
Fortran to w sumie mogę tylko gdybać - pewnie ze względu na liczbę kodu który już jest w tej dziedzinie napisany.
C - ponieważ do tego najłatwiejszego do optymalizacji kodu wykorzystuje się głównie tablice i pętle. Taki kod można przyspieszyć na tej samej maszynie nawet 100x odpowiednio rekonfigurując i zrównoleglając kod.
C++, Python - też się stosuje - ale to już naprawdę trzeba się wysilić żeby zoptymalizować pod cluster. Im więcej klas tym będzie trudniej.
Intel ostatnio promuje swoją dystrybucję Pythona zrobioną pod tym kątem: https://software.intel.com/en-us/intel-distribution-for-python
Jakie rozwiązania poza językami?
- OpenMP - podstawa dla Fortran / C:
- wielowątkowość
- wektorowość: http://www.hpctoday.com/hpc-labs/explicit-vector-programming-with-openmp-4-0-simd-extensions/
- offload na GPU i Xeon Phi: https://gcc.gnu.org/wiki/Offloading
-
MPI (Intel MPI, OpenMPI, ETH MPI) - przetwarzanie na wielu kompach
-
Przetwarzanie na GPU lub mieszane:
- OpenACC
- OpenCL
- CUDA
- Intel TBB, Cilk
- Cilk został wciągnięty przez Intela, fajnie wspiera przetwarzanie całych tablic w kompilatorze C/C++ (bez dodatkowych dyrektyw)
- Intel TBB - tego jeszcze dobrze nie poznałem, ale wielowątkowa pula pamięci wygląda obiecująco
Jak interesuje Cię ta tematyka to Colfax prowadzi darmowe wykłady z 2-tygodniowym dostępem do prawdziwego (chociaż minimalnego) clustra zawierającego Xeon E5 i Xeon Phi.
Jest jeszcze otwarta rejestracja na maj.
Możesz też się tym pobawić w domu na PC lub na Raspberry Pi:
Używa się przede wszystkim Fortrana i C w wersjach rozszerzonych, umożliwiających zrównoleglenie obliczeń i wielowątkowość. Na superkomputerach Cray wykorzystuje się również język Chapel.