2010-07-29 16 views
5

Fiziksel işlemci (çekirdek) belirli bir iş parçacığı ile iş parçacığı tarafından kullanıldığını belirlemek mümkün olup olmadığını bilmek isterim? Örneğin, 2 iş parçacığı (örneğin, threadid = 10 ve threadid = 20) olan çok iş parçacıklı bir uygulamam var. Uygulamayı çift çekirdekli işlemci (çekirdek 1 ve çekirdek 2) olan bir sistemde çalıştırıyorum. Yani, çekirdek sayısını bilmek için nasıl threadid = 20 ile iplik kullanılır?Tanımlama işlemcisi (çekirdek) belirli bir iş parçacığı tarafından kullanılır

P.S. Windows platformları.

Teşekkür ederiz,

Denis.

cevap

3

Thread-afinite kullanmıyorsanız, threadler belirli çekirdeklere atanmamışlardır. Her zaman diliminde, iplik farklı çekirdeğe uygulanabilir. Bu, bir iş parçacığının özünü elde etmek için bir işlev varsa, dönüş değerini aldığınız zaman, iş parçacığının zaten başka bir çekirdek üzerinde yürütme şansı olduğu anlamına gelir.

Eğer thread-afinite kullanıyorsanız, Windows thread-afinite fonksiyonlarına bakabilirsiniz (http://msdn.microsoft.com/en-us/library/ms684847%28v=VS.85%29.aspx).

+0

Cevabınız için teşekkür ederiz, Patrick! Başka bir soru ortaya çıkıyor - belirli bir iş parçacığının belirli bir çekirdek üzerinde ne kadar süre çalıştığını bilmek mümkün mü? (örneğin, bazı iş parçacıkları zaman diliminin% 20'sini çekirdek 1'de ve zaman diliminin% 80'i çekirdek 2'de çalışır) – DenisL

+0

Denis'in farkında olmadığımdan. Yapabildiğiniz, bir özneyi belirli çekirdeklerle sınırlandırmasıdır (buna iş parçacığı ilişkisi denir). Belki de işleminizi, her bir iş parçacığının bir çekirdeğe atandığı birden çok iş parçacığında bölebilirsiniz. Asıl sorunun ne olduğunu açıklayabilir misiniz? (asıl soruya yol açar) Belki senin problemin başka bir şekilde çözülebilir. – Patrick

+0

İki işlev oluşturmakla görevlendirildim: 1. İlk işlev, belirli iş parçacığı kimliğine göre toplam çok çekirdekli işlemci kullanımını döndürür. Performans Sayaç İşlevlerini kullanarak işlevi uyguladı. 2. İkinci işlev, belirli iş parçacığı kimliğine göre belirli çekirdek kullanımını döndürür. Fonksiyonu nasıl oluşturacağımı bilmiyorum, imkansız gibi görünüyor. – DenisL

2

GetCurrentProcessorNumber (Server 2003 ve Vista'dan beri kullanılabilir) ve GetCurrentProcessorNumberEx (Server 2008 R2 ve Windows 7'den itibaren kullanılabilir) işlevler vardır.

Daha fazla ilgili seçenekler ve düşünceler için (ayrıca, Windows XP dahil - başta this answer describing the use of cpuid instruction) this question's answers'a da bakın.

Elbette çekirdek numarası programlayıcı tarafından her zaman değiştirilebilir. Eğer emin olmanız gerekiyorsa, o zaman hem bir şeyden önce hem de sonra bir çekirdek numarayı kontrol ederseniz, makul bir miktar için yardımcı olur. zaman miktarı, ve eğer çekirdek numarası hala aynı ise o zaman ara kodun da büyük ihtimalle hangi çekirdeğin yürütüldüğünü bilirsiniz.

İlgili konular