Ubuntu Suomen keskustelualueet
Muut alueet => Yleistä keskustelua => Aiheen aloitti: ilkant - 09.04.21 - klo:02.53
-
Tein yhden Julia-ohjelmointikielellä suoritetun totient (https://en.wikipedia.org/wiki/Euler%27s_totient_function) laskennan kahdella koneella, suoritusajoissa oli 184,6 -kertainen nopeusero! Tässä ei nyt vertailla prosessoreja, vaan myös laskentaympäristöjä toisiinsa. Kummassakin koneessa Kubuntu 20.10.
Kone 1: Intel i3-2100 (4 x 3,1 GHz) prosessori 8 GB muistilla ja pyCharm ympäristöllä Julia-pluginilla (versio 0.40), HP 8200. Julia versio 1.4.1 Kubuntun pakettivarastosta.
Kone 1-k: Sama kuin edellä, mutta ohjelma ajettu konsolissa: julia totient.jl.
Kone 1-t: Sama kuin edellä, mutta säikeistettynä. Julia 1.4.1 ei hyväksynyt -t auto -parametria. Ajettu ilman sitä julia totient-threaded.jl.
Kone 2: Intel Core i5-10400F (6 x 2,9 GHz) prosessori 32 GB muistilla ja Juno-ympäristöllä Julia-versio 1.6.0. Julia-sivustolta.
Kone 2-k: Sama kuin edellä, mutta ohjelma ajettu konsolissa: julia totient.jl.
Kone 2-t: Sama kuin edellä, ajettu konsolissa säikeistettynä: julia -t auto totient-threaded.jl.
Kone 1: 1421.575038 seconds (5.80 G allocations: 128.892 GiB, 0.57% gc time). Reilu 23 minuuttia. (Kone ollut ilmeisen solmussa ennen testiä.)
Kone 1-k: 13.153197 seconds (44.12 M allocations: 1.941 GiB, 0.82% gc time).
Kone 1-t: 14.075111 seconds.
Kone 2: 7.721857 seconds (34.12 M allocations: 1.792 GiB, 3.33% gc time).
Kone 2-k: 7.553358 seconds (34.12 M allocations: 1.792 GiB, 0.79% gc time).
Kone 2-t: 1.882751 seconds (35.14 M allocations: 1.851 GiB, 16.19% gc time, 26.17% compilation time).
Ohjelma totient.jl
import Pkg; Pkg.add("Primes")
using Primes
@time for k=1:10000000 totient(k) end
Ohjelma totient-threaded.jl
import Pkg; Pkg.add("Primes")
using Primes
@time Threads.@threads for k = 1:10000000 totient(k) end
-
Juno asentuu näillä ohjeilla (http://docs.junolab.org/latest/man/installation/).
-
Kone 1: 1421.575038 seconds (5.80 G allocations: 128.892 GiB, 0.57% gc time). Reilu 23 minuuttia.
Tuossa on kyllä jotain hämminkiä. Oliko suoritettava koodi varmasti täsmälleen sama molemmilla koneilla? Mitä Julian versiota tuo PyCharmin liitännäinen käytti?
Tässä pari tulosta pelkällä julia-tulkilla/kääntäjällä ajettuna. Versio 1.6.0, haettu täältä: https://julialang.org/downloads/
julia-1.6.0/bin/julia totient.jl
Intel Core 2 Quad Q9550: 4 cores @ 2.83 GHz
16.732192 seconds (20.77 M allocations: 1.249 GiB, 2.91% gc time)
AMD Ryzen 7 1700X: 8 cores, 16 SMT threads @ 3.4 Ghz
7.845718 seconds (34.12 M allocations: 1.792 GiB, 0.92% gc time)
Säikeistettynä:
import Pkg; Pkg.add("Primes")
using Primes
@time Threads.@threads for k = 1:10000000 totient(k) end
julia-1.6.0/bin/julia -t auto totient-threaded.jl
Intel Core 2 Quad Q9550
7.767300 seconds (21.91 M allocations: 1.299 GiB, 12.80% gc time, 0.65% compilation time)
AMD Ryzen 7 1700X
2.301439 seconds (35.14 M allocations: 1.851 GiB, 28.37% gc time, 32.81% compilation time)
-
Tuossa on kyllä jotain hämminkiä. Oliko suoritettava koodi varmasti täsmälleen sama molemmilla koneilla? Mitä Julian versiota tuo PyCharmin liitännäinen käytti?
Muistaakseni asensin sen Julian Kubuntun repositorystä. Se ei ole ainakaan niin uusi kuin 1.6.0, jolla se toinen testi on tehty. Kun tulee aikaa, voin asejntaa 1.6.0:n tuolle HP:n koneelle. Ihan testausmielessä. Sillä en enää ohjelmoi varsinaisesti.
-
Julia-versio on 1.4.1 ja se on asennettu Kubuntun pakettivarastosta. PyCharm prof ei antanut suorittaa uusintatestiä eikä hyväksynyt salasanaa, joten uudelleen testaus jäi tekemättä. Uskon, että se olisi samoja lukemia kuin aiemmin. Voisin tietysti asentaa Community-version pyCharmista ja kokeilla sillä. Ehkä joskus.
Julia on vielä uusi ohjelmointikieli ja ilmeisen kehitysvaiheessa. Versioilla 1.4.1 ja 1.6.0 voi olla tehokkuuseroja. Lisäksi pyCharmin plugin on versioltaan noin 0.4.0. PyCharm vaati salasanaa vanhalla koneella, eikä hyväksynyt antamaani. Aika kovaa politiikkaa, jos maksullisen ohjelman käyttöä on rajoitettu vain yhteen koneeseen.
-
Julia-versio on 1.4.1 ja se on asennettu Kubuntun pakettivarastosta. PyCharm prof ei antanut suorittaa uusintatestiä eikä hyväksynyt salasanaa, joten uudelleen testaus jäi tekemättä. Uskon, että se olisi samoja lukemia kuin aiemmin. Voisin tietysti asentaa Community-version pyCharmista ja kokeilla sillä. Ehkä joskus.
Julia on vielä uusi ohjelmointikieli ja ilmeisen kehitysvaiheessa. Versioilla 1.4.1 ja 1.6.0 voi olla tehokkuuseroja.
Yhden säikeen koodilla 1.4.1 näyttää suoriutuvan vajaat 10% hitaammin:
julia-1.4.1/bin/julia totient.jl
AMD Ryzen 7 1700X:
8.543814 seconds (44.12 M allocations: 1.941 GiB, 0.81% gc time)
PyCharm vaati salasanaa vanhalla koneella, eikä hyväksynyt antamaani. Aika kovaa politiikkaa, jos maksullisen ohjelman käyttöä on rajoitettu vain yhteen koneeseen.
Maksullisen PyCharm Professionalin käyttöä ei ole rajoitettu yhteen koneeseen. Ilmeisesti samanaikaisia instansseja ei kuitenkaan voi ajaa ainakaan eri koneilla, vaan PyCharm herjaa, että toinen pitää sulkea.
https://sales.jetbrains.com/hc/en-gb/articles/206544319-Can-I-use-my-personal-license-on-multiple-machines-
https://intellij-support.jetbrains.com/hc/en-us/articles/207241005-Using-IDE-on-different-machines-and-operating-systems-with-the-same-license
-
Tein uudelleen kokeen koneella 1 ja konsolissa. Julian versio on nyt siis 1.4.1 ja asennettu Kubuntun pakettivarastosta.
julia totient.jl
Tulos:
13.153197 seconds (44.12 M allocations: 1.941 GiB, 0.82% gc time)
Tästä voi päätellä, kuinka paljon oheiskrääsää pyCharm-ympäristö Julia-plugineillaan on tuonut. On se kone voinut olla muutenkin kohtalaisen solmussa ennen ensimmäistä kokeilua.
-
Maksullisen PyCharm Professionalin käyttöä ei ole rajoitettu yhteen koneeseen. Ilmeisesti samanaikaisia instansseja ei kuitenkaan voi ajaa ainakaan eri koneilla, vaan PyCharm herjaa, että toinen pitää sulkea.
Ei ollut auki kahdella koneella. Toisella koneella olen kyllä rekisteröinyt sen uudelleen. Pitää tutkia asiaa. Tosin en enää käytä sitä vanhalla koneella kuin ihan vain kokeiluina. Sen verran liukkaammin tämä uusi kone toimii, että ei viitsi vanhalla työskennellä.
-
Ajoin vielä tuon totient-ohjelman uuden koneen konsolissa. Päivitin tulokset alkuperäiseen viestiin. Konsolilla oli noin 2,2 % nopeampi suoritus Junolla ajettuun verrattuna.
-
IntelliJ:n (PyCharmin) Julia-liitännäinen asettaa oletuksena Julian komentoriville valitsimen --inline=no, joka hidastaa suoritusta, jos ohjelma tekee paljon funktiokutsuja. Tässä totient-esimerkissä vaikutus on erityisen voimakas.
julia-1.4.1/bin/julia --inline=no totient.jl
887.922084 seconds (5.80 G allocations: 128.892 GiB, 0.52% gc time)
julia-1.6.0/bin/julia --inline=no totient.jl
137.351292 seconds (923.54 M allocations: 31.895 GiB, 1.59% gc time, 0.06% compilation time)
Inline on luultavasti kytketty pois päältä, jotta debuggausominaisuudet toimisivat paremmin. Liitännäisen käyttämä oletuskonfiguraatio on määritelty lähdekoodissa:
https://github.com/JuliaEditorSupport/julia-intellij/blob/0.4.1/src/org/ice1000/julia/lang/execution/julia-run-config.kt
https://github.com/JuliaEditorSupport/julia-intellij/blob/0.4.1/src/org/ice1000/julia/lang/execution/julia-executors.kt
-
Tässä on vertailu prosessorien tehoista. Huomaa, että koneen nopeuteen vaikuttaa paljon myös muistin määrä ja levyjen liitännät (SATA, M.2, jne.) ja tekniikat (SATA, DRR, ...).
CPU-vertailu (https://cpu.userbenchmark.com/)
-
IntelliJ:n (PyCharmin) Julia-liitännäinen asettaa oletuksena Julian komentoriville valitsimen --inline=no, joka hidastaa suoritusta, jos ohjelma tekee paljon funktiokutsuja. Tässä totient-esimerkissä vaikutus on erityisen voimakas.
Kiitos tiedosta. Tuo antaakin selityksen sille ensimmäiselle testitulokselle. Sitä on ihmetelty yhdellä toisella foorumilla.
-
Tässä on vertailu prosessorien tehoista. Huomaa, että koneen nopeuteen vaikuttaa paljon myös muistin määrä ja levyjen liitännät (SATA, M.2, jne.) ja tekniikat (SATA, DRR, ...).
Yleisesti ottaen joo, mutta tässä kyseisessä esimerkkiohjelmassa ratkaisee oikeastaan pelkkä raaka suoritinteho. Muistin määrällä ei ole merkitystä, kunhan sitä on vapaana se muutama sata megaa, jonka Julia ja tehtävään tarvittavat kirjastot varaavat. Levyn nopeus vaikuttaa Julian kirjastojen latautumiseen, mutta tässä sitä aikaa ei mitattu.
-
Tässä on vertailu prosessorien tehoista. Huomaa, että koneen nopeuteen vaikuttaa paljon myös muistin määrä ja levyjen liitännät (SATA, M.2, jne.) ja tekniikat (SATA, DRR, ...).
Yleisesti ottaen joo, mutta tässä kyseisessä esimerkkiohjelmassa ratkaisee oikeastaan pelkkä raaka suoritinteho. Muistin määrällä ei ole merkitystä, kunhan sitä on vapaana se muutama sata megaa, jonka Julia ja tehtävään tarvittavat kirjastot varaavat. Levyn nopeus vaikuttaa Julian kirjastojen latautumiseen, mutta tässä sitä aikaa ei mitattu.
Totean, että Samsungi 950 EVO M.2 levy olisi 3 kertaa nopeampi kuin tämä levy. Tämäkin on nopea. :)
-
Tässä on juttua GPU (https://nextjournal.com/sdanisch/julia-gpu-programming):n ohjelmoinnista Julialla (https://julialang.org/). Kokeilin noita, mutta en saanut ohjelmia toimimaan Juno (Atom) -ympäristössä. En ole sitä aiemmin käyttänyt. Jonain päivänä nuo huimat erot saa näkyviin konkreettisesti kun osaa käyttää Junoa (https://junolab.org/).
-
Tässä on juttua GPU (https://nextjournal.com/sdanisch/julia-gpu-programming):n ohjelmoinnista Julialla (https://julialang.org/). Kokeilin noita, mutta en saanut ohjelmia toimimaan Juno (Atom) -ympäristössä. En ole sitä aiemmin käyttänyt. Jonain päivänä nuo huimat erot saa näkyviin konkreettisesti kun osaa käyttää Junoa (https://junolab.org/).
Juno ei vaikuta asiaan. Se on lopulta vain tekstieditori. Julia itse hoitaa mm. pakettien hallinnan ja muun varsinaisen työn.
CUDA-ohjelmointia ja sovellusten käyttöä varten CUDA pitää erikseen ladata ja asentaa Nvidian nettisivulta. Lisäksi tarvitset tietysti riittävän uuden Nvidian näytönohjaimen. Julian nykyinen CUDA.jl vaatii CUDA 10.1:n tai uudemman sekä vähintään Maxwell-arkkitehtuuriin perustuvan näytönohjaimen eli GeForce 900-sarja tai uudempi.
Kannattanee kokeilla ensin uusinta CUDA 11.3-versiota:
https://developer.nvidia.com/cuda-downloads
Tarvittaessa vanhempia versioita löytyy arkistosta:
https://developer.nvidia.com/cuda-toolkit-archive
Huomaa, että CUDA:n mukana järjestelmään asentuu tietty versio Nvidian suljetusta ajurista, etkä voi käyttää muita ajuriversioita.