Julia - język do obliczeń naukowych

0

Czy ktoś miał styczność z tym językiem? Ciekawi mnie jak wypada na tle C / C++ / Fortrana, jeśli chodzi o szybkość obliczeń. Niby na oficjalnej stronie Julii podają tabele z porównaniem dla tych języków, ale może to być trochę naciągane. Czy słyszał może ktoś, aby jakaś firma używała tego języka na produkcji? Czy raczej na razie poza sferę akademicką nie wykracza? Obecnie zmagam się z problemem pasania, a później "includowania" wydajnych fragmentów C++ do Pythona i zastanawiam się, czy nie przesiać się właśnie na Julie (z racji tego, że składnia wydaję się bardzo przyjemna i podobna do matlaba). Wiem, że numpy i inne biblioteki Python'owe są bardzo wydajne, jednak optymalizacja w nich tyczy się głównie obliczeń na macierzach. Czy taka "przesiadka" z C++ / Fortrana na Julie to dobry pomysł? Czy jednak lepiej walczyć z pointerami? Z góry dziękuję za odpowiedzi.

4

Nie pracuję z Julią, ale przesiadka z C++ to raczej zły pomysł - o ile dobrze znasz C++.

Krótka charakterystyka języków wg mnie:

  1. Fortran - bardzo rozwinięte przetwarzanie równoległe macierzowe i numeryczne (metoda elementów skończonych, płyny, astronomia)
    Dużo bibliotek - najstarszy język w stawce.
    Dużo ułatwień dla przetwarzania macierzy w samym języku.

Polecany dla naukowców ze względu na prostotę implementacji nowych rozwiązań.
Stosowany na superkomputerach.

  1. Python
    Sam w sobie wolny, ale ma kilka bardzo rozwiniętych bibliotek zewnętrznych. Jeśli chcesz używać gotowych rozwiązań zamiast je implementować np. w Machine Learning to Python jest dla Ciebie. Patrz numpy, scikit-learn, matplotlib, Jupyter, TensorFlow.
    W razie czego możesz pisać własne moduły C/C++/FPC do Pythona.

Polecany do interaktywnego rozwiązywania problemów - można bardzo szybko dostarczyć rozwiązanie oparte na gotowcach.

  1. Julia
    Język podobny w zastosowaniu co Fortran tylko nowocześniejszy. Wbudowana wydajność, bardzo przyjemna składnia, zwłaszcza dla naukowców.
    Nie ma za dużo bibliotek - to jest dość nowe środowisko.
    Polecane dla naukowców którzy nie boją się pisać własnych bibliotek.

  2. C/C++
    Polecane do implementacji docelowych rozwiązań (takich które mają działać wielokrotnie, pod dużym obciążeniem).
    Nie mają one zbyt wielu rozwiązań w samym języku wspierających obliczenia.
    Sytuację ratuje trochę Boost, TBB, OpenMP, OpenCL.
    https://www.boost.org/doc/libs/?view=category_math
    Niedawno znalazłem gdzieś opinię że na polach HPC (Fortran, C++) ten drugi wybiera się tam gdzie nie stosujesz obliczeń macierzowych.

O ile w Fortranie czy Julii "stricte naukowcy" jako-tako dają sobie radę, to w C/C++ raczej się gubią.
Z tego co wiem na porządku dziennym jest układ typu "naukowiec wymyśla eksperyment, programista go koduje". Pewnie właśnie w C/C++ tak się dzieje najczęściej.

Obecnie Pythona używam do ML, ale też do interaktywnej pracy z oprogramowaniem w C/C++ (ogólnie - jako tool a nie język). Może z czasem będę stosował więcej Julii do pracy interaktywnej. Julia wchodzi na te same pola co Python, tylko jest szybsza. Kwestia tego czy powstanie do niej wystarczająco wiele bibliotek to raczej po prostu kwestia czasu.

0

Hej,
generalnie odpuściłbym sobie chyba Julię ze względu na to, że nie jest to bardzo rozwijane... Jeżeli zależy Ci na szybkości obliczeń, to skupiłbym się na Pythonie (jak sugeruje przedmówca) lub na programie R... Ale, zająłbym się wykorzystaniem technologii Big Data (wykorzystuje się metody obliczania równoległego), np. Sparkiem... ma wbudowane m. in. metody Machine Learning... co więcej, można korzystać ze Sparka wykorzystując Pythona lub właśnie wspomniany R... :)

0

Julia wchodzi na te same pola co Python, tylko jest szybsza. Kwestia tego czy powstanie do niej wystarczająco wiele bibliotek to raczej po prostu kwestia czasu.

Julia jako język jest szybsza, ale jest także znacznie bardziej pamięciożerna. Zob: https://github.com/kostya/benchmarks

Poza tym jeżeli chodzi o obliczenia naukowe to Julia nie ma znaczącej przewagi nad Pythonem. Sam język Python jest wolniejszy, ale biblioteki stosowane w obliczeniach matematycznych są równie szybkie co kod Julii (są to de facto porty bibliotek z C i C++). Zob: https://www.ibm.com/developerworks/community/blogs/jfp/entry/Python_Meets_Julia_Micro_Performance?lang=en_us

0

A czy Julia nie kopiuje przypadkiem tego co daje nam Octave tylko w składni która nawet nie próbuje być kompatybilna z matlabem? Jakieś zalety Juli nad Octave?

Ja do obliczeń naukowych polecam właśnie Octave ze względu na kompatybilność (nie pełną) z matlabem, sporą ilość pakietów na octave.sourceforge, częste aktualizacje i dużą społeczność.

0

Jak w każdym języku tak i w Matlabie jest coś co się może nie podobać ale to już osobiste preferencje, natomiast jakby nie patrzeć to Matlab jest liderem jeżeli chodzi o soft do obliczeń naukowych i jeżeli jakiś język jest lub stara się być kompatybilny z matlabem to ma już na starcie plus.

Generalnie nie podoba mi się pomysł żeby w momencie gdy w jakimś języku czegoś brakuje (szybkość, pakiet-Spark.jl) był powodem to pisania kolejnego języka... nie łatwiej byłoby napisać kompilator /pakiet dla octave? Myślę że poświęciliby na to mniejsze zasoby niż na nowy język no ale wtedy nie mogliby sobie napisać w swoich cv magicznego "co-creator of the Julia programming language"...

0

Nie rozumiem w jaki sposób to co podlinkowałeś odnosi się do tego co napisałem, może to dlatego że uczepiłem się Octave? Ale mi nie chodzi konkretnie o Octave, podstaw pod Octave Scilab albo R i pytanie pozostaje to samo.

Kolejny język czyli taka sztuka dla sztuki czytaj "jeśli w IDE brakuje Ci jakiegoś pluginu to zamiast napisać brakujący plugin stwórz nowe IDE"

0

"Kolejny język czyli taka sztuka dla sztuki" Nie. Julia jest znacznie wygodniejsza od Fortrana i znacznie szybsza niż Matlab czy Octave. To język typowo do zastosowań naukowych i big data wspomagający obliczenia matematyczne na bardzo dużych zbiorach danych. O ile wykonywanie np. instrukcji print trwa tam o wiele dłużej niż w Pythonie o tyle skomplikowane obliczenia na wielkich liczbach trwają o wiele krócej. Gdybyś prowadził badania w których na wynik analizy danych musiałbyś czekać godzinę zamiast 8h to też pisałbyś "sztuka dla sztuki"?

0

Fajnie że autorom Juli udało się poprawić szybkość obliczeń bo tak jak wspomniałeś przy większych rzeczach jest to ważne żeby wyniki mieć jak najszybciej. Chodzi mi tylko o to że wolałbym dostać tą szybkość dla jednego z istniejących języków (Octave, Scilab, ...) czy to w formie poprawy interpretera czy jako kompilator jak to jest w przypadku matlaba.

Oczywiście wszystkie te języki są niekompatybilne więc jak masz jakieś skrypty to miłego przepisywania na Julie.

0

@Szczur parę aspektów:

  • Octave czy Matlab są bardziej przemyślane do celów inżynieryjnych niż naukowych. Różnice niewielkie, ale są.
  • Czasami sam język nakłada ograniczenia na możliwe optymalizacje

Więc to nie zawsze jest tak, że można "poprawić" obecne języki bez tworzenia nowych. Zwłaszcza jak chcesz wprowadzić nowe rzeczy jak np. typowanie, które jest obecne w Julii ale nie ma możliwości wprowadzenia go do Matlaba.

0

Julia to bardzo poważne środowisko stworzone w jednym z najlepszych ośrodków naukowych Massachusetts Institute of Technology w USA. Obecnie bardzo popularny w cywilizowanym świcie, szczególnie na rynkach finansowych, w badaniach genetycznych i wielu innych. Wykorzystuję go zarówno do analizy tekstu wielkich rozmiarów, typowej algebry, i praktycznie w każdej sytuacji łącznie z obróbką wideo i mp3. Doskonały do radzenia sobie z wielkimi porcjami danych na małych maszynach klasy desktop jak i do wielkich klasterów i pracy równoległej. Przeszedłem na Julię z R w sytuacji gdy obliczanie wartości i wektorów własnych macierzy kowariancji 310^4 na 310^4 okazało się w Juli setki razy szybsze! Obsługuje wszytko co wymyślono w matematyce w tym liczby zespolone itp.

0

W Juli trwają również prace nad differentiable programming - czyli natywny tensorflow, a i Gilbert Strang jest wielkim fanem tego języka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1