Paralel Tanılama Araçları (Eşzamanlılık Çalışma Zamanı)
Visual Studio, çok iş parçacıklı uygulamalarda hata ayıklama ve profil oluşturma için kapsamlı destek sağlar.
Hata ayıklama
Visual Studio hata ayıklayıcısı Paralel Yığınlar penceresini, Paralel Görevler penceresini ve Paralel İzleme penceresini içerir. Daha fazla bilgi için bkz . İzlenecek Yol: Paralel Uygulamada Hata Ayıklama ve Nasıl Yapılır: Paralel İzleme Penceresini Kullanma.
Profil Oluşturma
Profil oluşturma araçları, çok iş parçacıklı bir uygulamanın kendisiyle ve diğer programlarla nasıl etkileşime geçtiğini gösteren grafik, tablosal ve sayısal bilgiler görüntüleyen üç veri görünümü sağlar. Görünümler, önemli alanları hızla tanımlamanızı ve grafik ekranlardaki noktalardan çağrı yığınlarına, çağrı sitelerine ve kaynak koduna gitmenizi sağlar. Daha fazla bilgi için bkz . Eşzamanlılık Görselleştiricisi.
Olay İzleme
Eşzamanlılık Çalışma Zamanı, çeşitli olaylar gerçekleştiğinde profil oluşturucular gibi izleme araçlarını bilgilendirmek için Windows için Olay İzleme 'yi (ETW) kullanır. Bu olaylar bir zamanlayıcı etkinleştirildiğinde veya devre dışı bırakıldığında, bağlam başladığında, sona erdiğinde, bloklarda, engellemelerde veya verimde olduğunda ve paralel algoritmanın ne zaman başladığı veya sona erdiğinde içerir.
Eşzamanlılık Görselleştiricisi gibi araçlar bu işlevselliği kullanır; bu nedenle genellikle bu olaylarla doğrudan çalışmanız gerekmez. Ancak bu olaylar, özel bir profil oluşturucu geliştirirken veya Windows Performans Araç Seti gibi olay izleme araçlarını kullanırken kullanışlıdır.
Eşzamanlılık Çalışma Zamanı bu olayları yalnızca izleme etkinleştirildiğinde tetikler. İzlemeyi devre dışı bırakmak için olay izlemeyi ve concurrency::D isableTracing işlevini etkinleştirmek için concurrency::EnableTracing işlevini çağırın.
Aşağıdaki tabloda, olay izleme etkinleştirildiğinde çalışma zamanının tetiklediği olaylar açıklanmaktadır:
Olay | Açıklama | Değer |
---|---|---|
eşzamanlılık::ConcRT_ProviderGuid | Eşzamanlılık Çalışma Zamanı için ETW sağlayıcı tanımlayıcısı. | f7b697a3-4db5-4d3b-be71-c4d284e6592f |
concurrency::ContextEventGuid | Bağlamlarla ilgili olayları işaretler. | 5727a00f-50be-4519-8256-f7699871fecb |
concurrency::P PLParallelForEventGuid | Concurrency::p arallel_for algoritmasına yapılan çağrılara girişi ve çıkışı işaretler. | 31c8da6b-6165-4042-8b92-949e315f4d84 |
eşzamanlılık::P PLParallelForeachEventGuid | Concurrency::p arallel_for_each algoritmasına yapılan çağrılara girişi ve çıkışı işaretler. | 5cb7d785-9d66-465d-bae1-4611061b5434 |
concurrency::P PLParallelInvokeEventGuid | Concurrency::p arallel_invoke algoritmasına yapılan çağrılara girişi ve çıkışı işaretler. | d1b5b133-ec3d-49f4-98a3-464d1a9e4682 |
concurrency::SchedulerEventGuid | Görev Zamanlayıcı ile ilgili olayları işaretler. | e2091f8a-1e0a-4731-84a2-0dd57c8a5261 |
concurrency::VirtualProcessorEventGuid | Sanal işlemcilerle ilgili olayları işaretler. | 2f27805f-1676-4ecc-96fa-7eb09d44302f |
Eşzamanlılık Çalışma Zamanı aşağıdaki olayları tanımlar ancak şu anda tetiklemez. Çalışma zamanı bu olayları gelecekte kullanmak üzere ayırır:
concurrency::ConcRT_EventType numaralandırması, bir olayın izlediği olası işlemleri belirtir. Örneğin, algoritmanın girişinde parallel_for
çalışma zamanı olayı yükseltir PPLParallelForEventGuid
ve işlem olarak sağlar CONCRT_EVENT_START
. parallel_for
Algoritma dönmeden önce çalışma zamanı olayı yeniden başlatır PPLParallelForEventGuid
ve işlem olarak sağlarCONCRT_EVENT_END
.
Aşağıdaki örnekte, çağrısı parallel_for
için izlemeyi etkinleştirme işlemi gösterilmektedir. çalışma zamanı, izleme etkinleştirilmediğinden ilk çağrıyı parallel_for
izlemez. çağrısı, EnableTracing
çalışma zamanının ikinci çağrıyı izlemesini parallel_for
sağlar.
// etw.cpp
// compile with: /EHsc
#include <ppl.h>
using namespace concurrency;
int wmain()
{
// Perform some parallel work.
// Event tracing is disabled at this point.
parallel_for(0, 10000, [](int i) {
// TODO: Perform work.
});
// Enable tracing for a second call to parallel_for.
EnableTracing();
parallel_for(0, 10000, [](int i) {
// TODO: Perform work.
});
DisableTracing();
}
Çalışma zamanı ve DisableTracing
çağrılarının EnableTracing
sayısını izler. Bu nedenle, birden çok kez ararsanız EnableTracing
izlemeyi devre dışı bırakmak için aynı sayıda aramanız DisableTracing
gerekir.