Я работаю над инструментом, позволяющим студентам самостоятельно оценивать производительность их программирования. В частности, программа, которую они пишут, имеет многопоточность, и у меня нет прямого способа повлиять на количество созданных потоков. Я бы хотел сравнить производительность своих программ с различным количеством ядер (и в идеале их программы должны ускоряться примерно пропорционально количеству ядер, которые разрешено использовать).Как определить, какие логические ядра имеют одно и то же физическое ядро?
Мы можем передать битмаску Process.SetAffinity, чтобы контролировать, какие ядра использует программа.
Это проблема на машинах i5 и i7, которые используют гиперпоточность и разделяют каждое физическое ядро на два логических. Я хочу, чтобы программа работала на двух/четырех различных физических ядрах. На моей машине i7 процесс с аффинностью, установленный в 3 (ядра 0 & 1), будет работать примерно так же быстро, как программа на одном ядре (указав, что эти логические ядра имеют одно и то же физическое ядро), но с аффинностью, установленной на 5 (ядра 0 & 3) он будет работать намного быстрее (указав, что эти ядра используют разные физические ядра). Тем не менее, я не нашел надежного способа (кроме проб и ошибок), чтобы определить это.
Как я могу (без экспериментов) определить, какие логические ядра имеют одно и то же физическое ядро?
(/ Proc/CPUInfo имеет информацию, мне нужно, но это не доступно на компьютерах Windows.)
Информация, доступная через [WMI (Windows Management Instrumentation)] (http://en.wikipedia.org/wiki/Windows_Management_Instrumentation) - или, по крайней мере, счет физических/виртуальных ядер, которые он * может * действительны для экстраполяции в перемешанную битовую маску. – user2864740
Похоже, я забыл упомянуть, что я специально ищу решение для C#. Я добавил тег C#, но я нигде не упоминал об этом. Я добавил C# в заголовок, который должен сделать его немного яснее, что я ищу. –
@TomvanderZanden Вы не должны добавлять 'C#' в заголовок. Тег должен быть достаточно. Если это не так, сделайте это ясно в своем вопросе. – MarcinJuraszek