Kirjoittaja Aihe: Vain osa prosessorista käytössä  (Luettu 2555 kertaa)

Snufkin

  • Käyttäjä
  • Viestejä: 454
    • Profiili
Vain osa prosessorista käytössä
« : 16.10.22 - klo:13.48 »
Mistä mahtaa johtua sellainen, että python-tulkki saa vain noin 25% prosessoritehosta käyttöönsä, vaikka muita (isoja) ohjelmia ei pyöri samaan aikaan? Eli Task Managerissa prossu käy vain 25% teholla ja koodin suoritus kesti 13 minuuttia.

Xubuntu 22.04 LTS, Fujitsu Lifebook E754

nm

  • Käyttäjä
  • Viestejä: 16445
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #1 : 16.10.22 - klo:13.58 »
Mistä mahtaa johtua sellainen, että python-tulkki saa vain noin 25% prosessoritehosta käyttöönsä, vaikka muita (isoja) ohjelmia ei pyöri samaan aikaan? Eli Task Managerissa prossu käy vain 25% teholla ja koodin suoritus kesti 13 minuuttia.

Onko prosessorissasi neljä ydintä (tai 2 ydintä ja HT/SMT, jolloin näkyvät neljänä)? Silloin säikeistämätön ohjelma kuormittaa yhtä ydintä 100% ja muut ytimet idlaavat, jolloin prosessorin kokonaiskuorma on 25%. Katso eri ydinten kuorma esim. Järjestelmänvalvonnassa (GNOME System Monitor).

Koodi pitää säikeistää, jos haluat hyödyntää useampaa ydintä samanaikaisesti. Joissain tapauksissa voi olla järkevämpää ajaa vain useita sovelluksen instansseja yhtä aikaa.

Snufkin

  • Käyttäjä
  • Viestejä: 454
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #2 : 16.10.22 - klo:15.48 »
Mistä mahtaa johtua sellainen, että python-tulkki saa vain noin 25% prosessoritehosta käyttöönsä, vaikka muita (isoja) ohjelmia ei pyöri samaan aikaan? Eli Task Managerissa prossu käy vain 25% teholla ja koodin suoritus kesti 13 minuuttia.

Onko prosessorissasi neljä ydintä (tai 2 ydintä ja HT/SMT, jolloin näkyvät neljänä)? Silloin säikeistämätön ohjelma kuormittaa yhtä ydintä 100% ja muut ytimet idlaavat, jolloin prosessorin kokonaiskuorma on 25%. Katso eri ydinten kuorma esim. Järjestelmänvalvonnassa (GNOME System Monitor).

Koodi pitää säikeistää, jos haluat hyödyntää useampaa ydintä samanaikaisesti. Joissain tapauksissa voi olla järkevämpää ajaa vain useita sovelluksen instansseja yhtä aikaa.

Ei löydy tuollaista ohjelmaa. Mulla on Xubuntu, jossa Task Manager.

CPU on i5, 2,5GHz: 1processor, 2 cores, 4 threads.

Eli säieteoria voi pitää paikkansa. 

Onko tuolle mitään tehtävissä?
« Viimeksi muokattu: 16.10.22 - klo:15.50 kirjoittanut Snufkin »
Xubuntu 22.04 LTS, Fujitsu Lifebook E754

LeHiX

  • Käyttäjä
  • Viestejä: 810
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #3 : 16.10.22 - klo:18.19 »
Löytyykö suomennettuna: "Järjestelmänvalvonta" menusta?
| Pros. AMD Phemon(tm) 9950 :) (4cores) | Emo: ASUS M3A78 | Mem 8GT
| x86_64, ubuntu xorg 22.04  | GeForce GTX 750 Ti/PC

nm

  • Käyttäjä
  • Viestejä: 16445
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #4 : 16.10.22 - klo:19.38 »
Onko tuolle mitään tehtävissä?

On:

Koodi pitää säikeistää, jos haluat hyödyntää useampaa ydintä samanaikaisesti. Joissain tapauksissa voi olla järkevämpää ajaa vain useita sovelluksen instansseja yhtä aikaa.

Snufkin

  • Käyttäjä
  • Viestejä: 454
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #5 : 17.10.22 - klo:15.38 »
Onko tuolle mitään tehtävissä?

On:

Koodi pitää säikeistää, jos haluat hyödyntää useampaa ydintä samanaikaisesti. Joissain tapauksissa voi olla järkevämpää ajaa vain useita sovelluksen instansseja yhtä aikaa.

Eli sitä Python-tulkkia pitäisi säikeistää? vai voiko asiaan jotenkin vaikuttaa itse skriptissä?
Xubuntu 22.04 LTS, Fujitsu Lifebook E754

Snufkin

  • Käyttäjä
  • Viestejä: 454
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #6 : 17.10.22 - klo:15.41 »
Löytyykö suomennettuna: "Järjestelmänvalvonta" menusta?

Mulla englannin kielinen käyttis. En ole löytänyt mitään, josta selviäisi enemmän kuin kokonaiskuormitus tuolla prosessorilla.
Xubuntu 22.04 LTS, Fujitsu Lifebook E754

nm

  • Käyttäjä
  • Viestejä: 16445
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #7 : 17.10.22 - klo:17.32 »
Eli sitä Python-tulkkia pitäisi säikeistää? vai voiko asiaan jotenkin vaikuttaa itse skriptissä?

Tulkki ei osaa säikeistää ohjelmaa automaattisesti, vaan skriptin ohjelmakoodia täytyy muuttaa siten, että se hyödyntää useita laskentasäikeitä. ThreadPoolExecutor on yksi vaihtoehto:

https://www.tutorialspoint.com/concurrency_in_python/concurrency_in_python_pool_of_threads.htm

https://superfastpython.com/threadpoolexecutor-in-python/

Numpy-koodia voi säikeistää mm. Numban avulla. Aihepiiri on kuitenkin aika monimutkainen, ja joissain tapauksissa koodia voi olla hyvin vaikea rinnakkaistaa algoritmitasolla. Joskus taas säikeiden synkronointi ja tulosten kerääminen syö suorituskykyhyödyn kokonaan.

Snufkin

  • Käyttäjä
  • Viestejä: 454
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #8 : 18.10.22 - klo:23.24 »
Eli sitä Python-tulkkia pitäisi säikeistää? vai voiko asiaan jotenkin vaikuttaa itse skriptissä?

Tulkki ei osaa säikeistää ohjelmaa automaattisesti, vaan skriptin ohjelmakoodia täytyy muuttaa siten, että se hyödyntää useita laskentasäikeitä. ThreadPoolExecutor on yksi vaihtoehto:

https://www.tutorialspoint.com/concurrency_in_python/concurrency_in_python_pool_of_threads.htm

https://superfastpython.com/threadpoolexecutor-in-python/

Numpy-koodia voi säikeistää mm. Numban avulla. Aihepiiri on kuitenkin aika monimutkainen, ja joissain tapauksissa koodia voi olla hyvin vaikea rinnakkaistaa algoritmitasolla. Joskus taas säikeiden synkronointi ja tulosten kerääminen syö suorituskykyhyödyn kokonaan.

Ok, kiitos. Menee sen verran yli osaamiseni, että pitänee tyytyä toistaiseksi tuohn varttitehoon.

Onko muuten C-kääntäjällä sama ominaisuus? Vai osaako se optimoida koodia useammalle ytimelle automaattisesti?
Xubuntu 22.04 LTS, Fujitsu Lifebook E754

nm

  • Käyttäjä
  • Viestejä: 16445
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #9 : 19.10.22 - klo:00.43 »
Onko muuten C-kääntäjällä sama ominaisuus? Vai osaako se optimoida koodia useammalle ytimelle automaattisesti?

Samalla tavalla menee C/C++:ssa, C#:ssa, Javassa ja useimmissa muissa kielissä. Ohjelmoijan on itse säikeistettävä koodinsa tai käytettävä apuna kielen tai kirjastojen tarjoamia rinnakkaislaskenta-abstraktioita. Tyypillisesti niillä voi vaikkapa jakaa silmukan suorittamisen rinnakkaisiin säikeisiin, jos suoritettavat osat eivät suoraan riipu toisistaan.

Echramath

  • Käyttäjä
  • Viestejä: 242
    • Profiili
    • http://iki.fi/ech/
Vs: Vain osa prosessorista käytössä
« Vastaus #10 : 22.10.22 - klo:10.11 »
"Sattuuhan sitä paremmissakin piireissä" eli Sid Meier's Civilization (kaikki osat) esimerkiksi pyörittää koko maailmaansa yhdessä säikeessä – ja mitenkäs muutenkaan, onhan se täysin vuoropohjainen eli kaikki mahdollinen tapahtuu peräkkäin. Käyttöliittymä sentään pyörii omassa säikeessään, mutta siitä huolimatta loppupelissä vuorot kestävät ja kestävät, samalla kun topin kuormitus prosessille pysyy 120%:ssa (tophan ilmoittaa 100% per ydin), eli neliydinlaitteessa pari ydintä ei tee käytännössä mitään asiaan liittyvää.

Snufkin

  • Käyttäjä
  • Viestejä: 454
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #11 : 22.10.22 - klo:12.49 »
Tämä ongelma tuli vastaan yhdessä opiskelujutussa, jossa testailtiin erilaisia algoritmeja. Tuossa oli joku 10^5 x 10^6 sisäkkäiset for-silmukat, miksi homma kesti.

Muualla ei ole tullut vastaan, että "tietokoneesta loppuu teho", vaikka n. 10v vanha läppäri käytössä. Tosin en pelaa enkä juurikaan pyöritä videokuvaa.

Jos tuota tehoa tarvitsee, niin ilmeisesti pitää perehtyä useamman ytimen rinnakkaiseen ohjelmointiin. Toistaiseksi vasta ohjelmointiuran alussa, joten jäänee myöhemmäksi. :)
Xubuntu 22.04 LTS, Fujitsu Lifebook E754

Vika/fiba

  • Käyttäjä
  • Viestejä: 661
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #12 : 22.10.22 - klo:17.08 »

Muualla ei ole tullut vastaan, että "tietokoneesta loppuu teho".

Jos tuota tehoa tarvitsee, niin ilmeisesti pitää perehtyä useamman ytimen rinnakkaiseen ohjelmointiin. Toistaiseksi vasta ohjelmointiuran alussa, joten jäänee myöhemmäksi. :)

Jos suunnittelet ohjelmoinnista itsellesi uraa, kannattaa tosiaan perehtyä säikeistämiseen. Jos aihetta ymmärtää, hommia riittää, ja jos osaat ratkaista säikeistyksen ongelmia, siitä myös maksetaan.

Tämä liittyy prosessoritehon kasvattamisongelmaan: yhden prossun suorituskykyä on kovin vaikea kasvattaa, mutta helppoa (ja siis halpaa), on lisätä prosessoriin ytimiä.

Monet vanhat, laajasti käytetyt ohjelmat, eivät pysty jakamaan tehtäviä useille ytimille, Adoben ohjelmat, varsinkin Photoshop hyvänä esimerkkinä runsaasti prosessoritehoa ( ja muistia myös) vaativina ohjelmina, jotka käyttävät vain yhtä (virtuaalista) säiettä monisäikeisen prosessorin tehosta.

Olen asiasta kiinnostunut, koska tässä käyttämässäni koneessa on 12 prosessorisäiettä, virtuaalisesti 24; silti monessa tehtävässä hyödynnetään vain yhtä (virtuaalista) säiettä. 11 tai 23 lepää, miten se nyt menee.

Snufkin

  • Käyttäjä
  • Viestejä: 454
    • Profiili
Vs: Vain osa prosessorista käytössä
« Vastaus #13 : 22.10.22 - klo:23.12 »

Jos suunnittelet ohjelmoinnista itsellesi uraa, kannattaa tosiaan perehtyä säikeistämiseen. Jos aihetta ymmärtää, hommia riittää, ja jos osaat ratkaista säikeistyksen ongelmia, siitä myös maksetaan.


En tiedä vielä. Olen +50v alanvaihtaja ja aloin nyt syksyllä opiskelemaan tietotekniikkaa kokopäiväisesti. Tavoitteena aluksi kandin tutkinto ja sitten pohdinnan paikka mihin suuntaan. Python on ollut tuo aloituskieli ja se sujuu sinänsä hyvin. Raha ei niinkään kiinnosta (merkitykseesä huippuosaaja) vaan enemmänkin että voisi tehdä töitä mökiltä tai vaikka Espanjasta.  Jonkinlainen mielekkäisen kokonaisuuksien hallinta, pienten sovellusten kehitystyö, tms. En ihan tiedä mitä töitä on tarjolla. :)
Xubuntu 22.04 LTS, Fujitsu Lifebook E754