Kirjoittaja Aihe: Testi totient-laskennan nopeudesta  (Luettu 2806 kertaa)

ilkant

  • Käyttäjä
  • Viestejä: 1273
  • Kubuntu
    • Profiili
Testi totient-laskennan nopeudesta
« : 09.04.21 - klo:02.53 »
Tein yhden Julia-ohjelmointikielellä suoritetun totient 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
Koodia: [Valitse]
import Pkg; Pkg.add("Primes")
using Primes
@time for k=1:10000000 totient(k) end

Ohjelma totient-threaded.jl
Koodia: [Valitse]
import Pkg; Pkg.add("Primes")
using Primes

@time Threads.@threads for k = 1:10000000 totient(k) end
« Viimeksi muokattu: 10.04.21 - klo:18.39 kirjoittanut ilkant »

ilkant

  • Käyttäjä
  • Viestejä: 1273
  • Kubuntu
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #1 : 09.04.21 - klo:02.55 »
Juno asentuu näillä ohjeilla.

nm

  • Käyttäjä
  • Viestejä: 16240
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #2 : 09.04.21 - klo:19.02 »
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/

Koodia: [Valitse]
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ä:

Koodia: [Valitse]
import Pkg; Pkg.add("Primes")
using Primes
@time Threads.@threads for k = 1:10000000 totient(k) end

Koodia: [Valitse]
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)

ilkant

  • Käyttäjä
  • Viestejä: 1273
  • Kubuntu
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #3 : 10.04.21 - klo:01.05 »
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.

ilkant

  • Käyttäjä
  • Viestejä: 1273
  • Kubuntu
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #4 : 10.04.21 - klo:13.54 »
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.
« Viimeksi muokattu: 10.04.21 - klo:14.00 kirjoittanut ilkant »

nm

  • Käyttäjä
  • Viestejä: 16240
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #5 : 10.04.21 - klo:14.44 »
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:

Koodia: [Valitse]
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
« Viimeksi muokattu: 10.04.21 - klo:14.48 kirjoittanut nm »

ilkant

  • Käyttäjä
  • Viestejä: 1273
  • Kubuntu
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #6 : 10.04.21 - klo:14.47 »
Tein uudelleen kokeen koneella 1 ja konsolissa. Julian versio on nyt siis 1.4.1 ja asennettu Kubuntun pakettivarastosta.

Koodia: [Valitse]
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.
« Viimeksi muokattu: 10.04.21 - klo:15.05 kirjoittanut ilkant »

ilkant

  • Käyttäjä
  • Viestejä: 1273
  • Kubuntu
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #7 : 10.04.21 - klo:15.12 »
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ä.

ilkant

  • Käyttäjä
  • Viestejä: 1273
  • Kubuntu
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #8 : 10.04.21 - klo:16.26 »
Ajoin vielä tuon totient-ohjelman uuden koneen konsolissa. Päivitin tulokset alkuperäiseen viestiin. Konsolilla oli noin 2,2 % nopeampi suoritus Junolla ajettuun verrattuna.

nm

  • Käyttäjä
  • Viestejä: 16240
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #9 : 11.04.21 - klo:15.46 »
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.

Koodia: [Valitse]
julia-1.4.1/bin/julia --inline=no totient.jl
887.922084 seconds (5.80 G allocations: 128.892 GiB, 0.52% gc time)

Koodia: [Valitse]
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
« Viimeksi muokattu: 11.04.21 - klo:16.08 kirjoittanut nm »

ilkant

  • Käyttäjä
  • Viestejä: 1273
  • Kubuntu
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #10 : 11.04.21 - klo:20.55 »
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

ilkant

  • Käyttäjä
  • Viestejä: 1273
  • Kubuntu
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #11 : 11.04.21 - klo:20.58 »
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.

nm

  • Käyttäjä
  • Viestejä: 16240
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #12 : 12.04.21 - klo:02.20 »
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.

ilkant

  • Käyttäjä
  • Viestejä: 1273
  • Kubuntu
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #13 : 14.04.21 - klo:20.39 »
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.  :)

ilkant

  • Käyttäjä
  • Viestejä: 1273
  • Kubuntu
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #14 : 24.04.21 - klo:06.47 »
Tässä on juttua GPU:n ohjelmoinnista Julialla. 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.

nm

  • Käyttäjä
  • Viestejä: 16240
    • Profiili
Vs: Testi totient-laskennan nopeudesta
« Vastaus #15 : 24.04.21 - klo:13.18 »
Tässä on juttua GPU:n ohjelmoinnista Julialla. 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.

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.