2016-11-14 1 views
0

Возможно ли запрашивать количество исполняемых модулей/портов на ядро ​​и аналогичную информацию о процессоре Intel?Запрос информации о процессоре Intel CPU, порт и т. Д.

У меня есть программа сборки и заметила, что производительность отличается от разных процессоров. Например, на Core i5 4570 некоторые функции выполняются последовательно 25% циклов для завершения, чем на Core i7 4970HQ. Они оба основаны на Хасуэлле, из того же поколения. В части программы не учитывается движение памяти. Поэтому я думаю, что, может быть, разница связана с деталями, такими как количество исполнительных блоков, количество портов и т. Д. Тест измеряет одноядерные циклы процессора, поэтому частоты/HT и т. Д. Не вступают в игру.

Могу ли я предположить такое объяснение различий в производительности? Если да, где я могу найти такую ​​информацию для конкретных процессоров. И можно ли запросить его динамически? Если это возможно, то я могу динамически рассылать данные на основе такой информации и распределять более равномерно и аналогичные методы для оптимизации программы для нескольких процессоров.

+0

Почему вы не предоставляете ссылку на свой тест или не публикуете полный код, чтобы мы могли попробовать его сами? В противном случае мы просто принимаем удары в темноте. – BeeOnRope

ответ

2

Было ли время циклов ссылки (RDTSC) вместо основных тактовых циклов (с первыми счетчиками)? Это объясняет ваши наблюдения.

Турбо имеет большое значение, и соотношение между максимальным и турбо макс поддерживается/номинальная тактовая частота (т.е. опорного цикла скорости клещ) отличается от различных процессоров. например see my answer on this related question

Чем ниже TDP процессора, тем больше отношение между устойчивым и максимальным. Haswell wikipedia article имеет таблицы:

  • 84W рабочего стола i5 4570: устойчивый 3.2GHz = частота RDTSC, макс турбо 3,6 ГГц (скорость ядра, вероятно, на самом деле работает для большинства из вашего теста, если это было время, чтобы подняться из маломощная холостая скорость).

  • 47W ноутбук i7-4960HQ: 2.6 ГГц устойчивый = частота RDTSC против 3,8 ГГц максимальная турбонаддува.

Время вашего кода с счетчиками производительности, и посмотрите на количество тактов ядра. (И много других аккуратных вещей).


Каждого Хасуэлл ядро ​​идентично от Core-M 5watt процессоров для мощных четырехъядерных процессоров до 18 ядра Xeon (который на самом деле имеет одно ядра силового бюджета больше похож на портативном CPU); это только кеши L3, количество ядер (и межсоединений) и поддержка или нет для HT и/или Turbo, которые отличаются. В основном все вне самих ядер может быть другим, в том числе и графическим процессором. Они не отключают порты выполнения, и даже кеши L1/L2 идентичны. Я думаю, что отключение портов выполнения потребует значительных редизайнов в планировщике вне порядка и тому подобное.

Что еще более важно, каждый порт имеет хотя бы один исполнительный блок, который не найден ни на одном другом порту: p0 имеет делитель, p1 имеет целочисленный блок умножения, p5 имеет блок перетасовки, а p6 - единственный порт, могут выполнять предсказанные ветви. На самом деле, p2 и p3 являются одинаковыми портами нагрузки (и могут обрабатывать адрес хранилища uops) ...

См. Agner Fog's microarch pdf для получения дополнительной информации о внутренних устройствах Haswell, а также David Kanter's writeup с диаграммами различных блоков.

(Однако не совсем верно, что все ядро ​​идентично: процессоры Haswell Pentium/Celeron не поддерживают AVX/AVX2 или BMI/BMI2.Я думаю, что они это делают, отключив декодирование префиксов VEX в декодерах. Это все еще имеет место для Skylake Pentiums/Celerons, поэтому благодаря Intel задержка времени, когда мы можем взять на себя поддержку новых наборов команд. Предположительно, они делают это, поэтому процессоры с дефектами в одной только верхней или нижней половине своих блоков векторного исполнения могут быть проданы как Celeron или Pentium, так же как процессоры с дефектом в некоторых из их L3 могут продаваться как i5 вместо i7)

+0

Спасибо за подробный ответ. Это должно быть 4960HQ, это была опечатка. Это номер модели, требуемый CPUID. Я приурочен к RDTSC. Точнее, одна запись, количество циклов считывается с CPUID в качестве барьера, а за ним следует RDTSC. И при выходе счетчик считывается с помощью RDTSCP, а затем CPUID в качестве барьера. –

+1

@YanZhou: 'rdtsc' не измерялся в циклах для нескольких поколений ЦП –

+0

После некоторого испытания я считаю, что самый простой способ - просто отключить турбобус и, возможно, другое недетерминированное поведение ЦП при оптимизации кода, когда мне нужно точное количество циклов. Я попробовал PMC и подобные методы, но когда-то они просто не получают надежных результатов. Кроме того, я так и не нашел счетчиков без привилегированного доступа. –

Смежные вопросы