Alat Diagnostik Paralel (Runtime Konkurensi)

Visual Studio menyediakan dukungan ekstensif untuk penelusuran kesalahan dan pembuatan profil aplikasi multi-utas.

Awakutu

Debugger Visual Studio mencakup jendela Tumpukan Paralel, jendela Tugas Paralel, dan jendela Parallel Watch. Untuk informasi selengkapnya, lihat Panduan: Men-debug Aplikasi Paralel dan Cara: Menggunakan Jendela Pengawasan Paralel.

Pemrofilan

Alat pembuatan profil menyediakan tiga tampilan data yang menampilkan informasi grafis, tabular, dan numerik tentang bagaimana aplikasi multi-utas berinteraksi dengan dirinya sendiri dan dengan program lain. Tampilan memungkinkan Anda mengidentifikasi area perhatian dengan cepat, dan menavigasi dari titik pada tampilan grafis ke tumpukan panggilan, situs panggilan, dan kode sumber. Untuk informasi selengkapnya, lihat Visualizer Konkurensi.

Pelacakan Peristiwa

Runtime Konkurensi menggunakan Pelacakan Peristiwa untuk Windows (ETW) untuk memberi tahu alat instrumentasi, seperti profiler, ketika berbagai peristiwa terjadi. Peristiwa ini termasuk ketika penjadwal diaktifkan atau dinonaktifkan, ketika konteks dimulai, berakhir, blok, buka blokir, atau hasil, dan ketika algoritma paralel dimulai atau berakhir.

Alat seperti Visualizer Konkurensi menggunakan fungsionalitas ini; oleh karena itu, Anda biasanya tidak perlu bekerja dengan peristiwa ini secara langsung. Namun, peristiwa ini berguna saat Anda mengembangkan profiler kustom atau saat Anda menggunakan alat pelacakan peristiwa seperti Windows Performance Toolkit.

Runtime Konkurensi hanya menaikkan peristiwa ini saat pelacakan diaktifkan. Panggil fungsi konkurensi::EnableTracing untuk mengaktifkan pelacakan peristiwa dan fungsi concurrency::D isableTracing untuk menonaktifkan pelacakan.

Tabel berikut ini menjelaskan peristiwa yang dinaikkan runtime saat pelacakan peristiwa diaktifkan:

Event Deskripsi Nilai
konkurensi::ConcRT_ProviderGuid Pengidentifikasi penyedia ETW untuk Runtime Konkurensi. f7b697a3-4db5-4d3b-be71-c4d284e6592f
konkurensi::ContextEventGuid Menandai peristiwa yang terkait dengan konteks. 5727a00f-50be-4519-8256-f7699871fecb
concurrency::P PLParallelForEventGuid Menandai pintu masuk dan keluar untuk memanggil algoritma konkurensi::p arallel_for . 31c8da6b-6165-4042-8b92-949e315f4d84
konkurensi::P PLParallelForeachEventGuid Menandai pintu masuk dan keluar untuk memanggil algoritma konkurensi::p arallel_for_each . 5cb7d785-9d66-465d-bae1-4611061b5434
konkurensi::P PLParallelInvokeEventGuid Menandai pintu masuk dan keluar untuk memanggil algoritma konkurensi::p arallel_invoke . d1b5b133-ec3d-49f4-98a3-464d1a9e4682
konkurensi::SchedulerEventGuid Menandai peristiwa yang terkait dengan Penjadwal Tugas. e2091f8a-1e0a-4731-84a2-0dd57c8a5261
konkurensi::VirtualProcessorEventGuid Menandai peristiwa yang terkait dengan prosesor virtual. 2f27805f-1676-4ecc-96fa-7eb09d44302f

Runtime Konkurensi mendefinisikan, tetapi saat ini tidak menaikkan, peristiwa berikut. Runtime mencadangkan peristiwa ini untuk digunakan di masa mendatang:

Enumerasi konkurensi::ConcRT_EventType menentukan kemungkinan operasi yang dilacak peristiwa. Misalnya, di pintu masuk parallel_for algoritma, runtime meningkatkan PPLParallelForEventGuid peristiwa dan menyediakan CONCRT_EVENT_START sebagai operasi. parallel_for Sebelum algoritma kembali, runtime kembali menaikkan PPLParallelForEventGuid peristiwa dan menyediakan CONCRT_EVENT_END sebagai operasi.

Contoh berikut mengilustrasikan cara mengaktifkan pelacakan untuk panggilan ke parallel_for. Runtime tidak melacak panggilan pertama karena parallel_for pelacakan tidak diaktifkan. Panggilan untuk EnableTracing mengaktifkan runtime untuk melacak panggilan kedua ke parallel_for.

// 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();
}

Runtime melacak berapa kali Anda memanggil EnableTracing dan DisableTracing. Oleh karena itu, jika Anda memanggil EnableTracing beberapa kali, Anda harus memanggil DisableTracing frekuensi yang sama untuk menonaktifkan pelacakan.

Baca juga

Runtime Konkurensi