Julia - język do obliczeń naukowych

Odpowiedz Nowy wątek
2018-07-07 00:01
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.

Pozostało 580 znaków

2018-07-07 09:16
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.

2) 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.

3) 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.

4) 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.


Szacuje się, że w Polsce brakuje 50 tys. programistów
edytowany 2x, ostatnio: vpiotr, 2018-07-07 09:42
to Ty nie jesteś Javowcem? :O - Tenonymous 2018-07-07 23:30
@Tenonymous: w razie wątpliwości na profilu możesz zobaczyć statystyki postów ("Posty na forum"). - vpiotr 2018-07-07 23:41

Pozostało 580 znaków

2018-07-16 10:38
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... :)

edytowany 1x, ostatnio: hurgadion, 2018-07-16 10:39
Ostatnio słyszałem, że wyszła Julia 1.0 więc chyba rozwijają :) - Pipes 2018-08-22 08:02
Może chodziło mu o to, na tej zasadzie że jest TypeScript który jest rozwijany, ale czy zdobędzie rynek? Nie sądzę, prędzej czy później czeka go los, jak porzuconych technologii od google. - sanny 2019-08-17 18:26

Pozostało 580 znaków

2018-07-24 07:52
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/developer[...]_Micro_Performance?lang=en_us


edytowany 1x, ostatnio: siloam, 2018-07-24 07:58
Proszę, nie przytaczaj tego benchmarka. Gościu testuje na kulkuset bajtowym pliku, w środku testu robi flushe, mierzy czas uruchomienia, Kotlin wyszedł mu pierwszy. Na przyszłość polecam większą ostrożność w linkowaniu benchmarków gdzie C/C++ jest nie na pierwszym miejscu. - vpiotr 2018-07-24 08:35
A jeśli chodzi o Pythona to chyba nie doczytałeś mojego posta do końca. - vpiotr 2018-07-24 08:41
O czym konkretnie piszesz? Ten benchmark składa się z kilku testów. Dla Matmul, czyli operacji na macierzach też Kotlin pierwszy? Julia obiektywnie jest bardziej pamięciożerna niż Python, ponieważ korzysta z JIT'a, który jest ładowany do pamięci. - siloam 2018-07-24 11:59
@siloam: ten zestaw "benchmarków" jest po prostu bardzo słabo napisany, bo autor zna parę z nich, a reszty co najwyżej się uczył w czasie pisania i "na żywca" przepisał ze znanych mu języków. Na ten przykład mnożenie macierzy w Ruscie jest strasznie słabo napisane, i bez większego wysiłku można uzyskać zdecydowanie lepszy wynik. - hauleth 2019-08-18 18:36

Pozostało 580 znaków

2018-08-20 11:57
Szczur
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ść.

Jakieś zalety Juli nad Octave? - tak, jedna. Szybkość. - vpiotr 2018-08-20 12:00
Julia posiada bibliotekę Spark.jl, nie wiem jak Matlab/Octave... - hurgadion 2018-08-20 12:07
IIRC ideą Julii jest zaoferować to co R i Octave, ale w jednym pakiecie i szybsze niż obecne implementacje (JIT). Dodatkowo składnia Matlaba do najprzyjemniejszych nie należy. - hauleth 2018-08-20 12:16

Pozostało 580 znaków

2018-08-20 21:14
Szczur
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"...

2018-08-20 21:39
Szczur
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"

Pozostało 580 znaków

2018-08-22 07:45
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"?


edytowany 1x, ostatnio: siloam, 2018-08-22 07:45

Pozostało 580 znaków

2018-08-23 12:33
Szczur
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.

Pozostało 580 znaków

2018-08-28 13:28
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.

Pozostało 580 znaków

2019-08-17 15:01
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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