Hesaplamalar için kaç tane çekirdek kullanmalıyım? # çekirdek veya # çekirdek -1?


12

Yapmam gereken büyük bir hesaplama var. Tüm çekirdekleri kullanabilirken, 1 çekirdeği bırakıp kullanmamak için herhangi bir neden olduğunu düşündüm. (hesaplama cpu sadece IO yok). Ya da ben tüm çekirdekleri kullansam bile, uygun bağlam anahtarlama işlemek ve yapmak için bilemeyeceğini işletim sistemini küçümsüyor muyum?


8
Tüm çekirdeklerin kullanılması iyi bir başlangıçtır ve "-1 çekirdek" ile daha iyi davranan işletim sistemi hakkındaki bazı batıl inançlar muhtemelen sadece batıl inançtır, ancak aslında bunu hesaplamanız, donanımınız, işletim sisteminiz için nasıl davrandığını profillemelisiniz.
Doc Brown

Birçok durumda # çekirdek + 1 kullanmak çok mantıklıdır. Yalnızca # çekirdek kullanırsanız, beklenmedik engelleme (sayfa hatası gibi) gereksiz yere çekirdeği boşta çalışmaya zorlar.
David Schwartz

Yanıtlar:


28

Başlıca işletim sistemleri, mevcut her çekirdeği kullanan işlemlerin nasıl ele alınacağını bilecek kadar olgunlaşmıştır. Diğer süreçler etkilenebilir (ve genellikle de etkilenir), ancak mevcut her çekirdeği kullandığınız için hesaplama yavaşlamaz.

Çekirdek sayısının seçimi, hesaplama yapılırken başka bir şey yapma niyetinize bağlıdır.

Bir masaüstü makinesinde, hesaplama yapılırken web tarayıcınızı kullanabilmek veya bir video izlemek istiyorsanız, bir çekirdeği bunun için ücretsiz tutmanız daha iyi olacaktır. Aynı şekilde, sunucu iki şey yapıyorsa (hesaplama yapmak ve aynı zamanda metriklerini işlemek ve raporlamak gibi), yan görev için bir çekirdeği serbest tutmak iyi bir fikir olabilir.

Öte yandan, önceliğiniz hesaplamayı olabildiğince hızlı yapmaksa, tüm çekirdekleri kullanmanız gerekir.


7
Modern işletim sistemi zamanlayıcıları, yüksek CPU kullanımı olduğunda etkileşimli programları etkileşimli tutma konusunda oldukça iyidir, çünkü etkileşimli programlar çok fazla CPU kullanmıyorsa (ki, modern şişirilmiş web uygulamalarında bir sorun olabilir)
James_pic

Not: Sunucularda bile, ssh yapabilmek ve hızlı bir cevap almak istiyorsanız, core 0'ı yalnız bırakmak yararlı olabilir.
Matthieu M.

11

Değişir.

Makine bu hesaplamaya adanmışsa, tüm çekirdekleri kullanmalısınız - kullanılmayan bilgi işlem kaynakları işleri hızlandırmaz .

Gerçek zamanlı bir zamanlayıcı, önleyici olmayan bir zamanlayıcı veya işlemci benzeşimi kullanıyorsanız, biraz daha dikkatli olmalısınız, çünkü diğer tüm işlemlerden yanlışlıkla diğer işlemleri aç bırakmak kolaydır. Bununla birlikte, bir şeyin yanlış gitmesi için bu ayarları manuel olarak değiştirmeniz gerekir, bu nedenle varsayılan olarak burada çoğu işletim sisteminde sorun yoktur.

Makine hesaplamaya adanmamışsa, hesaplamaya% 100 vermek ideal olmayabilir. Örneğin, hesaplama çalışırken bir web tarayıcısı kullanıyorsanız. Makinenizin yükü bazen% 100'ün üzerine çıkacağından, halsiz hissedecektir. Hesaplama gibi verim odaklı görevler gerçekten yavaşlamaz, ancak GUI'ler gibi gecikmeye duyarlı görevler bu kadar hızlı tepki vermez. Daha sonra hesaplama için sadece NPROC-1 iş parçacıklarını / işlemlerini başlatmak mantıklıdır. Alternatif olarak, hesaplama için normal görevlere göre daha düşük bir öncelik kullanmak bu sorunu çözebilir, bu durumda hesaplama herhangi bir kaynağı israf etmemek için NPROC süreçlerini kullanmalıdır.


3
"Eğer hesaplama sırasında bir web tarayıcısı kullanıyorsanız […] halsiz hissedecektir. Hesaplama gibi verim odaklı işler gerçekten yavaşlamayacak, ancak GUI'ler gibi gecikmeye duyarlı görevler çok hızlı tepki vermeyecektir. [ …] Açıkça hesaplama için normal görevlere göre daha düşük bir öncelik kullanmak bu sorunu çözebilir "- Bu yüzden Unix'teki işlem önceliği değerine" niceness "adı verilir ve adlı bir yardımcı program kullanılarak yapılandırılır nice.
Jörg W Mittag

2
"kullanılmayan bilgi işlem kaynakları işleri hızlandırmaz" diyebilirler. Daha az çekirdek kullanılması, daha yüksek bir saat hızına izin verebilir ve işleri hızlandırabilecek veya etmeyecek senkronizasyonu azaltabilir.
Davidmh

2
@Davidmh notlarına ek olarak genellikle CPU tarafında L1 $ ve L2 $ konuları bir dereceye kadar iş parçacıkları arasında paylaşılır ve L3 $ tüm soketlerde paylaşılır, bu nedenle daha fazla iş parçacığının kullanılması artan $ misss yavaşlama işlemlerine neden olabilir. Özellikle işlem, işlemci yerine bellekle bağlıysa.
Maciej Piechotka

İş parçacığı / işlem önceliği düzeylerini uygun şekilde ayarlarsanız, arka plan çalışmasının etkileşimli işlemler üzerindeki etkisini azaltabilirsiniz. On yıldan fazla bir süredir kişisel bilgisayarımda dağıtılmış bilgi işlem uygulamaları çalıştırıyorum; CPU işlem görevleri düşük öncelikli olarak çalıştığında, tarayıcıları ve diğer normal masaüstü uygulamalarını kullanma yeteneğim bozulmaz. GPU'da kaynak paylaşımı o kadar gelişmiş değil ve arka planda GPU hesaplaması çalıştırırken GPU hızlandırmalı HTML5 video (akılsız oyunlar) ile ara sıra problemlerle karşılaştım. Çok iş parçacıklı oyunlar, hafif GFX ile bile sorunlu olabilir; win starves konuları 2+
Dan Is Fiddling By Firelight

1

Aşağıda, olumsuz oylarından dolayı, motoDrizzt ile anlaşmak konusunda biraz ihtiyatlıyım :), ama bu benim gerçek deneyimim oldu - daha fazla, gerçek çekirdek sayısının ötesinde (ama binlerce değil). Örneğin, http://www.forkosh.com/images/avoronoi.gif adresine bakın, burada bu 3D-voronoi_diagramın her 2B düzleminin bağımsız olarak oluşturulabileceğini. Ve program "eşzamanlı olarak" n düzlemine ilişkin hesaplamaları kaldırmak için bir nfork = n query_string özniteliği alır .

Dört çekirdekli bir işlemcide, diyagramı tamamlamak için (kullanıcı) süresi nfork ile neredeyse doğrusal olarak azalır, yaklaşık nfork = 8'e kadar (dört çekirdek hiper iş parçacıklı). Ancak 8'in ötesinde, daha yavaş da olsa zaman hala azalıyor. Ve yaklaşık 16'nın ötesinde, belirgin bir gelişme yok. Bu davranışı hiç analiz etmedim, ancak genel olarak boşta kalma süresini daha da azaltmak için hokkabazlık işlemlerini os (bu durumda linux slackware 14.2x64) ile ilişkilendiriyorum.


0

En iyi seçim sisteme bağlıdır. Yapmak istediğiniz şey, her iki sürümü de gerçek bir sistemde çalıştırmak ve ardından sistemin nasıl yanıt verdiğini kontrol etmektir. Hala sisteminizde tarayıcı, metin editörü ve diğer şeyleri kullanabilir misiniz? Ve n-1 yerine n iş parçacığı kullanırken performans daha mı iyi? Uygulamayı tüm CPU'ları kullanmaya çalışan başka bir uygulamayla birlikte çalıştırırsanız ne olur?

Ve sonra hiper iş parçacığını düşünmelisiniz. Dört çekirdekli artı hiper iş parçacığıyla 8 çekirdeği veya 7 çekirdeği kullanabilirsiniz. Yine, sistemin yanıt verebilirliğini ve bitirme zamanını deneyin.

Son olarak, çalışmanızı iş parçacıklarından daha fazla bloğa bölmeyi düşünün. Bunun nedeni, farklı iş parçacıklarının işi farklı zamanlarda bitirmesidir ve daha sonra bazı işlerin daha hızlı iş parçacıklarına teslim edilmesini istersiniz. Aksi takdirde, son iş parçacığı bitene kadar beklemeniz gerekir.

PS. "Hiper iş parçacığı, yalnızca bir FPU olduğu için FPU yoğun koduna yardımcı olamaz". Kesinlikle yanlış. FPU yoğun koduyla bile, gecikmelerden dolayı FPU'dan tam olarak yararlanmak inanılmaz derecede zordur. Hiper iş parçacığı yardımcı olur çünkü zamanlama için iki kat daha fazla bağımsız işlem vardır.


-4

Bunu "kulağa" kötü gelmeyecek şekilde nasıl yazacağımı bilmiyorum, bu yüzden sadece arkadaşça bir açıklama olarak al, tamam mı?

Ortalama bir bilgisayarın zaten genellikle bin veya daha fazla iş parçacığı olduğu göz önüne alındığında, 8'e 7'yi kullanmanın herhangi bir fark yaratacağını düşündüren nedir? :-)

Mümkün olduğunca çok iş parçacığı kullanın. İşletim sistemi yanıtını önemsemeniz gerekmiyorsa ve iş parçacıklarınız oldukça uzun bir süre (bir saniyeden fazla) çalışıyorsa, iki kat daha fazla çekirdek kullanmayı deneyebilirsiniz.


3
Ancak bu binlerce iş parçacığının çoğu% 100 CPU kullanmıyor, değil mi?
Andreas Rejbrand

1
Çekirdek sayısının iki katının kullanılması genellikle hesaplama sürelerini iyileştirmez. Aslında, daha fazla mantıksal çekirdeğiniz olsa bile (HyperThreading vb. Aracılığıyla) fiziksel çekirdek sayısından daha fazlasını kullanmak genellikle yararlı değildir. Kaynak: MATLAB Paralel İşleme kullanarak geçmişten gelen deneyim.
Sanchises

1
@Sanchises Hiper iş parçacığı yarı paralel komut serpiştirmeden yararlanıyor - dallı ve bellek ağır kod için etkilidir. Matris hesaplamaları çok FPU yoğundur ve fiziksel çekirdek başına yalnızca bir FPU vardır, bu nedenle hiper iş parçacığı size yardımcı olamaz.
J ...
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.