Program bilgisayar donanımlarını neden etkin kullanamaz?

CheyLoaN

Hectopat
Katılım
30 Haziran 2015
Mesajlar
189
Makaleler
4
Merhabalar.

Çok genel bir soru sormak istiyorum. Buna bir de örnek ekliyorum. Neden görev yöneticisinde gördüğümüz programlar işlemci vb. donanımları %100 olarak kullanamazlar. Buna Windows mu engel koyuyor? Ya da programlamanın bir eksiği mi? Oyunların donanımları %100 kullanabilmesi nedendir?

Verdiğim bu örnekte setup işlemcimin %9, 4'ünü kullanmak yerine neden %100'ünü kullanıp işini daha çabuk bitiremiyor? Disk okumayı bekliyor cevabı yanlış olacaktır çünkü kullandığım disk bir NVMe. Yani 128 MB okuma/yazmadan çok daha fazlasını vadediyor.
 

Dosya Ekleri

  • Ekran Alıntısı.JPG
    Ekran Alıntısı.JPG
    61,2 KB · Görüntüleme: 48
Son düzenleyen: Moderatör:

El Hesap

Centipat
Katılım
24 Haziran 2021
Mesajlar
1.162
İşlemci elma değil. Birazını ısırıp işinizi göremiyorsunuz. İşlemcilerde thread'ler var, onlara göre değerlendiriyor olabilir. Ama muhtemelen bir baz süre alıyor (örneğin 1 ms) o sürenin ne kadarında o programın işlemlerinin yapıldığını not ediyor.

O yüzdelik değeri işlemcinin meşguliyeti gibi düşünebilirsin. Dakikada 10 elma yiyebilen birisine dakikada 2 elma verip durursan sadece %20 çalışmış olur. Tamamını kullanıp daha çabuk bitirememesinin sebebi bu. Bir de işlem sırası var. Sana 30 tane sayıyı topla dediğimde 2'şer 2'şer toplayıp sonra kalan 2 taneyi toplarsın. Direkt son işlemi yapamazsın çünkü elinde işleme girecek ürün yok.
Ben anlamadım hocam. ☹️
 

bitwise

Kilopat
Sosyal Tayfı
Katılım
22 Mart 2018
Mesajlar
5.007
Makaleler
1
Çözümler
43
Merhabalar.

Çok genel bir soru sormak istiyorum. Buna bir de örnek ekliyorum. Neden görev yöneticisinde gördüğümüz programlar işlemci vb. donanımları %100 olarak kullanamazlar. Buna Windows mu engel koyuyor? Ya da programlamanın bir eksiği mi? Oyunların donanımları %100 kullanabilmesi nedendir?

Verdiğim bu örnekte setup işlemcimin %9, 4'ünü kullanmak yerine neden %100'ünü kullanıp işini daha çabuk bitiremiyor? Disk okumayı bekliyor cevabı yanlış olacaktır çünkü kullandığım disk bir NVMe. Yani 128 MB okuma/yazmadan çok daha fazlasını vadediyor.

Cunku her is %100 paralelize edilemez.
Senin islemcini %100 kullanmak demek, islemcinin tum cekirdeklerini ve tum hyper threadleri aktif olarak kullanirsan olusacak senaryo.
Bir dosyayi A klasorunden B klasorune kopyalama islemi disk uzerinde calisan bir islem ve bunun icin islemci paralelize edilemez. Neden?

Cunku diskten okuma islemi icin verdigin assembly komutu disk driver'i uzerinde calisan bir islemi baslatacaktir. Burada driver derken Windows driver'i kastetmiyorum, SATA AHCI gibi BIOS level driver'lardan bahsediyorum. Her isi islemci yapmiyor, gidip disk surucusune "git bana sunu oku gel" diyor.

Ustte ornegini verdigim durumlar gibi disk bazli operasyonlarda islemciyi %100 utilize etmek mumkun degil. Cunku 1) Disk cok yavas , 2) I/O islemleri cok cok buyuk oranda sequential calisir, paralelize edilemez.

Senin nvmE diskin yuksek hizli olmasi da bir sey ifade etmiyor, cunku disk reklamlarinda hep sequential okuma yazma hizlari verilir. Yani bloklarin birbirinin pesi sira geldigi durum. Gercekte ise cogu islem random r/w iceriri. Yani senin diskin random okuma yazma hizi bottleneck yapiyor muhtemelen. Ayrica yazma genelde daha yavastir.

Buna ek olarak sektorler sabit buyukluktedir fakat yazilan veri farklilik gosterir. Genelde 4 KB lik segmentlere ayrilirlar ve sen 4.1 KB lik veri yazmak istersen diski verimsiz kullanmak zorunda kalirsin.
Burada detaylari var ( neden 4KB diye sorarsan ) -> Advanced Format - Wikipedia

Oyunlar disk temelli bottleneck i engellemek icin oncelikle her seyi memory e yuklerler. ( Loading ekrani )

Memory - CPU - GPU - VRAM uzerinde akan data uzerinde calisan oyunlarda CPU ve GPU kullanimini optimize etmek daha kolaydir. Yine de ben cogu modern oyunun 22 thread kullanabildigini sanmiyorum. Cogu oyunda network - audio - fiziksel hesaplamalar vs ayri threadlere paralelize edilir ve zaten goruntuyu GPU olusturacagi icin sistemi buyuk oranda kullanirsin.

Isletim sistemlerinde calisan programlar disk I/O yaptiklari icin CPU ve GPU kullanimini %100 e cekmek cok zor. Genelde I/O beklersin. Zaten bu yuzden HDD 'den SSD'ye geciste insanlar windows cok hizlandi diye yorumlar yapiyor. Aslinda calisan her sey arkada buna muhtac.
 
KS
KS
CheyLoaN

CheyLoaN

Hectopat
Katılım
30 Haziran 2015
Mesajlar
189
Makaleler
4
Cunku her is %100 paralelize edilemez.
Senin islemcini %100 kullanmak demek, islemcinin tum cekirdeklerini ve tum hyper threadleri aktif olarak kullanirsan olusacak senaryo.
Bir dosyayi A klasorunden B klasorune kopyalama islemi disk uzerinde calisan bir islem ve bunun icin islemci paralelize edilemez. Neden?

Cunku diskten okuma islemi icin verdigin assembly komutu disk driver'i uzerinde calisan bir islemi baslatacaktir. Burada driver derken Windows driver'i kastetmiyorum, SATA AHCI gibi BIOS level driver'lardan bahsediyorum. Her isi islemci yapmiyor, gidip disk surucusune "git bana sunu oku gel" diyor.

Ustte ornegini verdigim durumlar gibi disk bazli operasyonlarda islemciyi %100 utilize etmek mumkun degil. Cunku 1) Disk cok yavas , 2) I/O islemleri cok cok buyuk oranda sequential calisir, paralelize edilemez.

Senin nvmE diskin yuksek hizli olmasi da bir sey ifade etmiyor, cunku disk reklamlarinda hep sequential okuma yazma hizlari verilir. Yani bloklarin birbirinin pesi sira geldigi durum. Gercekte ise cogu islem random r/w iceriri. Yani senin diskin random okuma yazma hizi bottleneck yapiyor muhtemelen. Ayrica yazma genelde daha yavastir.

Buna ek olarak sektorler sabit buyukluktedir fakat yazilan veri farklilik gosterir. Genelde 4 KB lik segmentlere ayrilirlar ve sen 4.1 KB lik veri yazmak istersen diski verimsiz kullanmak zorunda kalirsin.
Burada detaylari var ( neden 4KB diye sorarsan ) -> Advanced Format - Wikipedia

Oyunlar disk temelli bottleneck i engellemek icin oncelikle her seyi memory e yuklerler. ( Loading ekrani )

Memory - CPU - GPU - VRAM uzerinde akan data uzerinde calisan oyunlarda CPU ve GPU kullanimini optimize etmek daha kolaydir. Yine de ben cogu modern oyunun 22 thread kullanabildigini sanmiyorum. Cogu oyunda network - audio - fiziksel hesaplamalar vs ayri threadlere paralelize edilir ve zaten goruntuyu GPU olusturacagi icin sistemi buyuk oranda kullanirsin.

Isletim sistemlerinde calisan programlar disk I/O yaptiklari icin CPU ve GPU kullanimini %100 e cekmek cok zor. Genelde I/O beklersin. Zaten bu yuzden HDD 'den SSD'ye geciste insanlar windows cok hizlandi diye yorumlar yapiyor. Aslinda calisan her sey arkada buna muhtac.
Gerçekten kapsamlı bir cevap olmuş. Özellikle teşekkür ederim.

Yani burada bottleneck yapan bir numaralı şüpheli nvmE'midir? Anlaşılan öyle. Çünkü şimdi kontrol ettiğimde benim nvmE'nin Random 4k yazma 330MB civarıymış. Q1T1 ise 90MB...

Peki nvmE bottleneck yapmasa işlemci-ram harici ne yapabilirdi? I/O'mu?
 

bitwise

Kilopat
Sosyal Tayfı
Katılım
22 Mart 2018
Mesajlar
5.007
Makaleler
1
Çözümler
43
Gerçekten kapsamlı bir cevap olmuş. Özellikle teşekkür ederim.

Yani burada bottleneck yapan bir numaralı şüpheli nvmE'midir? Anlaşılan öyle. Çünkü şimdi kontrol ettiğimde benim nvmE'nin Random 4k yazma 330MB civarıymış. Q1T1 ise 90MB...

Peki nvmE bottleneck yapmasa işlemci-ram harici ne yapabilirdi? I/O'mu?

Evet, genelde bilgisayar dunyasinda bir numarali bekleten unsur I/O. Bir seyi network ve disk'ten bagimsiz hale getirip sadece RAM ve CPU uzerinde isleyebilecek hale getirirsen cok fazla hizlandirirsin.

Ayrica bilgisayarin utlization olcme yontemini de dikkate alman gerek, Windows disk kullanim yuzdesini neye gore hesapliyor ben de bilmiyorum. Calistirdigin program 1 thread calisiyor ve ufak tefek 4K yi gecmeyen okuma yazma yapiyorsa hem islemci hem de disk kullanimini dusuk goreceksin ki sende de durum bu bence.
 
Yukarı