С# Получить счетчик производительности промаха кеша ЦП

Я знаю, что процессоры учитывают все промахи кеша L1/2/3, и эта информация в принципе доступна. Например. есть просмотрщик производительности от Intel. Я просто не могу найти пример на С#. Доступны ли эти данные из .NET?


person V.B.    schedule 13.09.2015    source источник
comment
Под средством просмотра производительности вы подразумеваете Intel Performance Counter Monitor?   -  person Evk    schedule 14.09.2015
comment
Для него нет встроенных счетчиков производительности. К ним слишком сложно добраться, только код звонка 0 может их прочитать. И они сильно зависят от марки и модели процессора. Конечно, причина для программного обеспечения Intel. Не запускайте его на процессоре AMD :)   -  person Hans Passant    schedule 14.09.2015


Ответы (1)


Что ж, вы можете сделать это (по крайней мере, в Windows), используя Intel Perfomance Counter. Монитор. В дополнение к другим инструментам, которые поставляются в комплекте с ним, он содержит PCM-Service - службу Windows, которая добавляет счетчики производительности Windows PCM. После того, как вы загрузили, скомпилировали и установили эту службу, вы можете получить доступ к промахам кеша L2 (например) так же просто, как это:

var pc = new PerformanceCounter("PCM Core Counters", "L2 Cache Misses", "total_"); // instead of total_ you can use number of core
var value = pc.RawValue; // or pc.NextValue() and so on.

Intel PCM добавляет гораздо больше интересных счетчиков, чем просто промахи кеша, конечно, все они доступны из .NET.

person Evk    schedule 13.09.2015
comment
Можно ли вызвать нативную библиотеку через P/Invoke? Я не хочу никаких системных зависимостей, таких как служба Windows, но меня устраивает собственная зависимость с возможностью xcopy. - person V.B.; 14.09.2015
comment
Библиотека написана на C++ и снабжена всеми исходниками. Поэтому я думаю, что там должна быть возможность p-invoke, хотя я лично не исследовал детали. По ссылке выше вы можете увидеть пример того, как они предлагают использовать свою библиотеку из кода (код C++), поэтому вы можете попробовать создать библиотеку C++\CLI для выполнения этой задачи. - person Evk; 14.09.2015