Я верю, что нашел виновника.
Процессоры в разных экземплярах на самом деле не так уж отличаются по своим возможностям:
Сообщается Windows как (соответственно):
- «Процессор Intel® Core i5-2520M с тактовой частотой 2,50 ГГц и 2,50 ГГц»
- «Процессор Inter(R) Core(TM) i7-4650U с частотой 1,70 ГГц и 2,30 ГГц»
Судя только по скоростям процессора, можно ожидать некоторой разницы в скорости компиляции (пока не обращайте внимания на размеры кэша, наборы инструкций и т.д.). Но затем я запустил Performance Monitor во время сборки и проверил загрузку процессора и частоту:
При сборке частота процессора у Lenovo немного меняется, но в среднем составляет ~ 2,3 ГГц, в то время как у Surface Pro 3 она установлена на 759 МГц. Разделите два числа, и результат будет близок к 3 - что я и наблюдал изначально.
Я подумал, что может быть возможность заставить ЦП использовать более высокую частоту с помощью параметров электропитания, но в Surface Pro 3 настройка диапазона частот ЦП, похоже, отсутствует. Например, нет плана "Высокая производительность", и даже расширенные настройки в соответствии с пользовательским планом не учитывают связанные с процессором вещи. (И да, я измеряю все, что подключено). Я отправлю отдельный вопрос по этому конкретному вопросу.
Конечно, это может оказаться не связанным с процессором в конце концов, но сейчас я буду придерживаться этого пути.
Обновить:
Выключение InstantGo, кажется, сделало трюк! По-прежнему невозможно явно настроить регулирование скорости ЦП с помощью параметров электропитания, но при запуске MSBuild ЦП теперь работает на частоте 2,3 ГГц.
Это фактически приводит к небольшому (на 10-15%) сокращению времени сборки на Surface Pro по сравнению с X220T. Возможно, здесь поможет большой кэш L3 или SSD.
Примечание: чтобы отключить InstantGo, я включил Hyper-V на поверхности. Кажется, нет никакого явного способа отключить это, как я выяснил.
Примечание 2. Отключение InstantGo не обходится без цены - IIUC означает медленное возобновление, отсутствие активности в режиме ожидания и более высокое энергопотребление. Меньше поверхности, больше обычного ПК. Вы должны решить для себя, каковы ваши приоритеты.
Обновление 2:
Хорошо, так что это может быть глупо, как глупо. Позвольте мне немного уточнить мои выводы. Важной деталью, которую я не упомянул с самого начала, было то, что я подключаюсь к Surface с помощью удаленного рабочего стола. Сейчас я верю в то, что:
- Когда я делал свои оригинальные тесты, Surface уже был в режиме Instant Go . Экран был отключен.
- В этом режиме процессор, кажется, "блокируется" на частоте 759 МГц независимо от нагрузки.
- Windows 8.1 на Surface Pro не может распознать наличие активного пользователя, подключенного через RDP, и переводит систему в режим InstantGo, когда экран отключается таймером или пользователем (мной), нажимающим кнопку питания.
Таким образом, при запуске "эталонных" сборок, фактически не делая ничего, кроме того, чтобы убедиться, что дисплей Surface включен, я получаю даже немного более быструю сборку, чем увеличение на 10-15% при включении Hyper-V на машине - примерно еще 5- 10%. Это, вероятно, связано с тем, что процессор теперь иногда использует Turbo Boost во время сборок.
При этом включение Hyper-V, похоже, "блокирует" процессор до 2,3 ГГц независимо от того, включен дисплей Surface или нет. Не удивительно, учитывая, что в этой конфигурации устройство никогда не переключается в режим InstantGo .