У меня есть программное обеспечение для торговли финансами. Он декодирует сообщения fast/fix. Я запускаю одни и те же двоичные файлы на двух разных машинах с очень похожим набором данных. Программное обеспечение получает "сообщения" и декодирует их. Общее правило - более длинное сообщение требует больше времени для декодирования:

i7-860, Windows 7:

Debug 18:23:48.8047325 count=51 decoding take microseconds = 300
Debug 18:23:49.7287854 count=53 decoding take microseconds = 349
Debug 18:23:49.7397860 count=110 decoding take microseconds = 516
Debug 18:23:49.7497866 count=92 decoding take microseconds = 512
Debug 18:23:49.7597872 count=49 decoding take microseconds = 267
Debug 18:23:49.7717878 count=194 decoding take microseconds = 823
Debug 18:23:49.7797883 count=49 decoding take microseconds = 296
Debug 18:23:49.7997894 count=50 decoding take microseconds = 299
Debug 18:23:50.7328428 count=101 decoding take microseconds = 583
Debug 18:23:50.7418433 count=42 decoding take microseconds = 281
Debug 18:23:50.7538440 count=151 decoding take microseconds = 764
Debug 18:23:50.7618445 count=57 decoding take microseconds = 279
Debug 18:23:50.7738452 count=122 decoding take microseconds = 712
Debug 18:23:50.8028468 count=52 decoding take microseconds = 281
Debug 18:23:51.7389004 count=137 decoding take microseconds = 696
Debug 18:23:51.7499010 count=100 decoding take microseconds = 485
Debug 18:23:51.7689021 count=185 decoding take microseconds = 872
Debug 18:23:51.8079043 count=49 decoding take microseconds = 315
Debug 18:23:52.7349573 count=90 decoding take microseconds = 532
Debug 18:23:52.7439578 count=53 decoding take microseconds = 277
Debug 18:23:52.7539584 count=134 decoding take microseconds = 623
Debug 18:23:52.7629589 count=47 decoding take microseconds = 294
Debug 18:23:52.7749596 count=198 decoding take microseconds = 868
Debug 18:23:52.8039613 count=52 decoding take microseconds = 291
Debug 18:23:53.7400148 count=132 decoding take microseconds = 666
Debug 18:23:53.7480153 count=81 decoding take microseconds = 430
Debug 18:23:53.7570158 count=49 decoding take microseconds = 301
Debug 18:23:53.7710166 count=156 decoding take microseconds = 752
Debug 18:23:53.7770169 count=45 decoding take microseconds = 270
Debug 18:23:54.7350717 count=108 decoding take microseconds = 578
Debug 18:23:54.7430722 count=52 decoding take microseconds = 286
Debug 18:23:54.7540728 count=138 decoding take microseconds = 567
Debug 18:23:54.7760741 count=160 decoding take microseconds = 753
Debug 18:23:54.8030756 count=53 decoding take microseconds = 292
Debug 18:23:55.7411293 count=110 decoding take microseconds = 629
Debug 18:23:55.7481297 count=48 decoding take microseconds = 294
Debug 18:23:55.7591303 count=84 decoding take microseconds = 386
Debug 18:23:55.7701309 count=90 decoding take microseconds = 484
Debug 18:23:55.7801315 count=120 decoding take microseconds = 527
Debug 18:23:55.8101332 count=53 decoding take microseconds = 290
Debug 18:23:56.7341861 count=121 decoding take microseconds = 667
Debug 18:23:56.7421865 count=53 decoding take microseconds = 293
Debug 18:23:56.7531872 count=127 decoding take microseconds = 586
Debug 18:23:56.7621877 count=58 decoding take microseconds = 306
Debug 18:23:56.7751884 count=138 decoding take microseconds = 649
Debug 18:23:56.8021900 count=53 decoding take microseconds = 288
Debug 18:23:57.7392436 count=139 decoding take microseconds = 699
Debug 18:23:57.7502442 count=121 decoding take microseconds = 548
Debug 18:23:57.7582446 count=61 decoding take microseconds = 301
Debug 18:23:57.7692453 count=98 decoding take microseconds = 500
Debug 18:23:57.7792458 count=94 decoding take microseconds = 460
Debug 18:23:57.8092476 count=41 decoding take microseconds = 274

Xeon E3-1220, основа Windows Server 2008 R2:

Debug 18:28:57.5087967 count=117 decoding take microseconds = 255
Debug 18:28:57.5087967 count=85 decoding take microseconds = 187
Debug 18:28:57.5087967 count=55 decoding take microseconds = 155
Debug 18:28:57.5243967 count=86 decoding take microseconds = 189
Debug 18:28:57.5243967 count=53 decoding take microseconds = 139
Debug 18:28:57.5243967 count=52 decoding take microseconds = 153
Debug 18:28:57.5243967 count=55 decoding take microseconds = 146
Debug 18:28:57.5243967 count=103 decoding take microseconds = 239
Debug 18:28:57.5243967 count=83 decoding take microseconds = 182
Debug 18:28:57.5243967 count=85 decoding take microseconds = 180
Debug 18:28:57.5243967 count=80 decoding take microseconds = 202
Debug 18:28:57.5243967 count=58 decoding take microseconds = 135
Debug 18:28:57.5243967 count=55 decoding take microseconds = 140
Debug 18:28:57.5243967 count=81 decoding take microseconds = 183
Debug 18:28:57.5243967 count=74 decoding take microseconds = 172
Debug 18:28:57.5243967 count=80 decoding take microseconds = 174
Debug 18:28:57.5243967 count=88 decoding take microseconds = 175
Debug 18:28:57.5243967 count=55 decoding take microseconds = 131
Debug 18:28:57.5243967 count=80 decoding take microseconds = 182
Debug 18:28:57.5243967 count=80 decoding take microseconds = 183
Debug 18:28:57.5243967 count=101 decoding take microseconds = 231
Debug 18:28:57.5243967 count=58 decoding take microseconds = 134
Debug 18:28:57.5243967 count=57 decoding take microseconds = 126
Debug 18:28:57.5243967 count=57 decoding take microseconds = 134
Debug 18:28:57.5399967 count=115 decoding take microseconds = 234
Debug 18:28:57.5399967 count=106 decoding take microseconds = 225
Debug 18:28:57.5399967 count=108 decoding take microseconds = 241
Debug 18:28:57.5399967 count=84 decoding take microseconds = 177
Debug 18:28:57.5399967 count=54 decoding take microseconds = 141
Debug 18:28:57.5399967 count=84 decoding take microseconds = 186
Debug 18:28:57.5399967 count=82 decoding take microseconds = 184
Debug 18:28:57.5399967 count=82 decoding take microseconds = 179
Debug 18:28:57.5399967 count=56 decoding take microseconds = 133
Debug 18:28:57.5399967 count=57 decoding take microseconds = 127
Debug 18:28:57.5399967 count=82 decoding take microseconds = 185
Debug 18:28:57.5399967 count=76 decoding take microseconds = 178
Debug 18:28:57.5399967 count=82 decoding take microseconds = 184
Debug 18:28:57.5399967 count=54 decoding take microseconds = 139
Debug 18:28:57.5399967 count=54 decoding take microseconds = 137
Debug 18:28:57.5399967 count=81 decoding take microseconds = 184
Debug 18:28:57.5399967 count=136 decoding take microseconds = 275
Debug 18:28:57.5399967 count=55 decoding take microseconds = 138
Debug 18:28:57.5555968 count=52 decoding take microseconds = 140
Debug 18:28:57.5555968 count=53 decoding take microseconds = 136
Debug 18:28:57.5555968 count=54 decoding take microseconds = 139
Debug 18:28:57.5555968 count=55 decoding take microseconds = 138
Debug 18:28:57.5555968 count=57 decoding take microseconds = 134
Debug 18:28:57.5555968 count=53 decoding take microseconds = 136
Debug 18:28:57.5555968 count=80 decoding take microseconds = 174
Debug 18:28:57.5555968 count=74 decoding take microseconds = 175
Debug 18:28:57.5555968 count=57 decoding take microseconds = 133
Debug 18:28:57.5555968 count=57 decoding take microseconds = 149
Debug 18:28:57.5555968 count=100 decoding take microseconds = 262
Debug 18:28:57.5555968 count=56 decoding take microseconds = 156
Debug 18:28:57.5555968 count=55 decoding take microseconds = 165

Из этого теста я вижу, что E3-1220 в два раза быстрее, чем i7-860.

Это возможно? Потому что в рейтингах процессоров эти процессоры примерно одинаковы.

Возможно ли, что это из-за кеша или что-то? И если да, то какой процессор мне лучше купить, чтобы декодировать сообщения еще в два раза быстрее?

Я сравнил процессоры, используя инструмент вычисления Pi, результаты:

Pi 16k
Xeon 00.234 sec
i7-860 00.171s

Pi 512k digits
Xeon 5.31 sec
i7-860(no HT) 5.987 sec.
i7-860(HT)    5.982 sec

Pi 4M digits
Xeon          0.56 min
i7-860(no HT) 1.11 min
i7-860(HT)    1.05 min

Так что Xeon на самом деле немного быстрее, но определенно не в два раза быстрее

Отключение HT на i7-860 не меняет картину.

i7-860, Windows 7, без HT:

Debug 10:09:30.7436690 count=58 decoding take microseconds = 351
Debug 10:09:34.9269083 count=47 decoding take microseconds = 347
Debug 10:09:34.9959122 count=50 decoding take microseconds = 309
Debug 10:09:35.0359145 count=45 decoding take microseconds = 297
Debug 10:09:35.1469209 count=57 decoding take microseconds = 344
Debug 10:09:35.1979238 count=54 decoding take microseconds = 460
Debug 10:09:35.2179249 count=61 decoding take microseconds = 372
Debug 10:09:35.3009297 count=51 decoding take microseconds = 275
Debug 10:09:35.3479324 count=45 decoding take microseconds = 305
Debug 10:09:35.3779341 count=58 decoding take microseconds = 311
Debug 10:09:35.3879346 count=50 decoding take microseconds = 286
Debug 10:09:35.4379375 count=48 decoding take microseconds = 290
Debug 10:09:35.4789398 count=48 decoding take microseconds = 277
Debug 10:09:35.5089416 count=49 decoding take microseconds = 286
Debug 10:09:35.5589444 count=74 decoding take microseconds = 382
Debug 10:09:35.5679449 count=47 decoding take microseconds = 298
Debug 10:09:35.7389547 count=50 decoding take microseconds = 304

Сравнение процессоров: http://ark.intel.com/compare/52269,41316

Xeon имеет на 50% больше коэффициента ядра, на 100% больше системной шины, AVX, памяти ECC, Turbo Boost 2.0, AES, коммутации Intel® по требованию, технологий теплового мониторинга, Intel® Fast Memory Access, Intel® Flex Memory Access

i7-860 имеет HT и усовершенствованную технологию Intel SpeedStep®

Вероятно, из-за множества дополнительных технологий Xeon работает в 2 раза быстрее ....

3 ответа3

3

Ни один из двух процессоров разных поколений / производителей не может работать одинаково, независимо от количества ядер и тактовой частоты. E3-1220 - это процессор 2011 года, а i7-860 - процессор 2009 года с более старой архитектурой.

Даже в синтетических тестах E3-1220(ссылка) превосходит i7-860(ссылка)

Если вы готовы потратить несколько лишних долларов, чтобы получить E3-1230(ссылка), вы также получите гиперпоточность, которая обеспечит значительное повышение производительности по сравнению с E3-1220 без HT.

2

Две вещи, которые вы полностью упускаете.

Номер 1 является прямым ответом на ваш вопрос. Поколение Nehalem, aka i7 1.0, было огромным шагом вперед по сравнению с Core 2 Duo, но после Sandy Bridge Intel начала бороться за повышение производительности и оказалась в тупике. Ваш Xeon примерно на 20% быстрее в тактовой частоте в версии i7 того же поколения, и в несколько оптимизированных для L2 рабочих нагрузках, таких как эта, вы можете привязать это значение к 40%, потому что он имеет больший L3, чем его версия i7. Если это основной процесс, запущенный в этой системе в данный момент (поскольку у него есть львиная доля ресурсов), он становится еще лучше из-за меньшего количества других вещей, требующих некоторой памяти на процессоре.

Номер 2 и, вероятно, самый большой фактор здесь: размер кэша.

Корпорация Intel хорошо понимает, что только действительные рабочие нагрузки, меньшие, чем кэш-память второго уровня, на самом деле работают с истинной скоростью процессора, а все остальное работает со скоростью, которая требуется процессору для обмена битами из него в кэш-память второго уровня и из него. В некотором роде это положительно, потому что это дисциплинирует программистов, поэтому они видят гораздо больше преимуществ в создании меньшего, более эффективного кода, но я также подозреваю, что преднамеренный упор на потребительский класс; в качестве другого основного метода дифференцирования производительности обработки чисел от Xeon до i7 (другой, потому что подсчет ядер и AVX являются основными преимуществами). Любой другой аспект производительности, который Xeons имеет над i7s, связан с пропускной способностью ... в зависимости от других компаний, совершенствующих свои технологии (чтобы использовать эту новую пропускную способность) для Xeon, чтобы оправдать его ценность в общих рабочих нагрузках (не-AVX/2).

Вот почему ваш Xeon (и большинство Xeon) имеет гораздо больший кэш L2 объемом 1 МБ, а ваш i7 - 256 КБ L2 (вероятно, более медленная скорость также из-за возраста), и я бы предположил - потому что этот процесс выглядит как разрозненный, легко выполняемый набор задач, который, вероятно, записан в виде функции цикла, которая помещается в небольшой объем памяти - он будет очень склонен к преимуществам скорости кэш-памяти L2 и меньше поменяется местами в Xeon, что значительно повысит производительность. Конечно, по маркетинговым соображениям статистика кэш-памяти L2 была удалена из Intel Ark и заменена статистикой «SmartCache», которая в основном представляет собой кэш-память L3, то есть кеш, используемый для обмена данными между ядрами, и намного медленнее и менее значим для производительности.

0

Вы запускали какие-либо другие утилиты для измерения производительности? Было бы интересно получить обзор производительности для обеих систем. Может быть, есть разница с другим оборудованием или программным обеспечением.

На обоих компьютерах установлена 64-битная ОС?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .