32 ядра (каждое физическое ядро) 2,2 ГГц или 12 ядер (6 физических ядер) 3,0 ГГц?
Я работаю над многопоточным приложением (приложение для торговли на Forex, построенное на C#), и мне пришлось обновить клиента с 12-ядерного компьютера с частотой 3.0 ГГц (Intel) до 32-ядерного компьютера с частотой 2,2 ГГц (AMD). Результаты теста PassMark были значительно выше при использовании многоядерных вычислений, выполняющих целочисленные, плавающие и другие вычисления, в то время как для вычисления с одним ядром он был немного медленнее, чем пакет (другие, которые сравнивались с аналогичной конфигурацией, как 12-ядерный). О, это также идет с 64 ГБ ОЗУ (4 раза как другой) и намного более быстрый SSD.
Таким образом, после настройки и запуска приложения на этой машине оно не только не работало, но и было значительно медленнее. Мы говорим о 30 секундах - на 1 минуту медленнее в приложении, которое обычно завершает обработку в течение 5-20 секунд. Приложение использует MAX DEGREE of PARALLELISM (TPL), который я пытался установить на количество ядер, а также половину этого. Я также попытался запустить однопоточный и без установки каких-либо ограничений в параллельном потоке.
Хотя это может быть связано с некоторыми проблемами с оборудованием, мне интересно, является ли скорость обработки ЦП проблемой. Я могу разогнать до 3,0 ГГц. Но разве это хорошая идея?
Информация о сервере -
AMD http://www.passmark.com/forum/showthread.php?4013-AMD-Dual-6272-performance-is-60-lower-than-benchmarks Кажется, с самого начала тест был неверным - официально.
Intel i7 3930k
ОС (одинаковая в обеих) Windows 7 Professional 64-битная
Связанная проблема - https://stackoverflow.com/questions/7747573/net-performance-on-amd-processor
РЕДАКТИРОВАТЬ Я вижу много полезной информации. Сейчас я хочу немного изменить вопрос - на данный момент забудьте о процессоре Intel. Что можно сделать с системой AMD, чтобы извлечь из нее больше пользы? Мы работаем над профилированием. У нас был администратор базы данных, который изучал индексирование, фрагментацию и другие параметры, такие как ввод-вывод. Кажется, что чтения и записи намного больше, чем в процессорах Intel. Я видел ответ по оптимизации на основе AMD. Есть ли способ сделать это, кроме как использовать OpenCL? Как насчет разгона? Будет ли это готовить процессор? С точки зрения смирения - я вижу, что люди как-то разозлились на меня! ПК уже был в продаже, и я обсуждал вопрос о том, поможет ли нам увеличить производительность, используя имеющиеся ресурсы (в 4 раза больше оперативной памяти, почти в 3 раза больше процессоров и намного более быстрый драйвер SSD). Мы всегда стремимся настроить его со стороны программного обеспечения, за исключением того, что он (я не скажу, не сделал) оказался тем волшебным ударом по доллару, который мы искали / надеялись. Я чувствую себя немного несчастным по этому поводу - таким образом, длинный пост.
Подробнее Изменить Я просто хотел бы, чтобы некоторые представители AMD сказали, что это бык ****. Вы делаете это неправильно! Вы упустили это из виду и не использовали эту функцию. Чтобы усугубить ситуацию, я прочитал, что AMD понесла огромные убытки в этом году и ожидает спасения.:(
4 ответа
Позвольте мне получить это прямо. Вы обновили клиент, основываясь на догадке и единственном тесте?
Это ошибка Тесты являются полностью искусственными и не отражают, как программы реального мира будут работать. Я скажу, что они, тем не менее, дают представление о потенциальной производительности.
Во-первых, это еще не все, чтобы приложения хорошо работали на нескольких ядрах и эффективно использовали всю доступную память.
Многие приложения написаны не с учетом большого параллелизма, и не все проблемные области поддаются параллельным решениям. Узкое место в вашем приложении может быть связано с общей памятью.
Например, я видел графики параллельных приложений, которые, кажется, действительно хорошо масштабируются, скажем, до 4 потоков, но затем без видимой причины производительность падает линейно с увеличением количества потоков. Это признак истощения ресурса. Замки действительно дорогие. Рассмотрите возможность использования структур без блокировки или минимизируйте количество общих ресурсов и взаимодействие между потоками.
Другое замедление может быть вокруг кэшей. Действительно интересный пример - компрессор lz4. Более ранние версии были очень быстрыми, но другой более сложный компрессор (snappy) давал аналогичную производительность. Причина была в том, как используются тайники. Не стоит недооценивать это. Если вы знаете, что делаете, вы можете ускорить некоторые алгоритмы и структуры данных на многократные значения, что и сделал автор LZ4.
Для большей заинтересованности смотрите следующую ссылку: http://fastcompression.blogspot.co.nz/2011/06/lz4-improved-performance.html
Первое, что я хотел бы сделать, это запустить ваш код в 32-ядерной системе и посмотреть, сможете ли вы его профилировать, чтобы понять, на что он тратит свое время. Это наверное с замками. Кроме того, попробуйте уменьшить количество потоков и снова провести бенчмаркинг. Вы можете найти повышение производительности - на самом деле я бы сказал, что это вероятно.
Один способ думать об этом: вы перешли от 12 ядер x 2 потока на ядро (HT включен) x 3.0 ГГц = 72.0 к системе с 32 x 1 x 2.2 = 70.4.
Изменить: На основании вашей обновленной информации, 3930k, как описано в ARK, имеет 6x2 arch = 12 потоков, а не 12x2 arch, как я предлагал. ( http://ark.intel.com/products/63697/Intel-Core-i7-3930K-Processor-12M-Cache-up-to-3_80-GHz)
Упрощенное представление о системе в стороне - у Intel более эффективные физические ядра, в то время как "виртуальные" (HT) ядра менее эффективны, и есть много других переменных, которые следует учитывать - трехканальный контроллер памяти и т. Д.
Но одна вещь, вероятно, выделяется: блокировка потоков. Если есть потоки, которые блокируют / препятствуют выполнению других потоков, более высокие тактовые частоты + более эффективные архитектуры выиграют, имея просто большую пропускную способность. Это больше проблема оптимизации программного обеспечения.
Еще одна вещь, на которую стоит обратить внимание: используете ли вы оптимизированный для AMD компилятор для приложения C#, или вы все еще используете версию, оптимизированную для Intel? Изменить: Visual Studio и большинство других компиляторов имеют опции, которые позволяют вам ориентироваться на конкретные архитектуры ЦП, например, 32-битные или 64-битные, ARM, конкретные наборы инструкций (SSE2/SSE3/SSE4 и т. Д.). Интересно вслух, может ли это быть фактором в игре?
Есть много вещей, чтобы рассмотреть.
Является ли SSD единственным "дисководом" в системе? Если SSD - не единственный диск в системе, используется ли SSD только для операционной системы? Используете ли вы RAID для приложения и, если да, оно подключается к другим серверам, которые являются базами данных, на которых работает RAID? Было обнаружено, что RAID убивает некоторые аспекты извлечения данных из базы данных.
Что касается процессора, вам действительно нужен номер модели чипа, чтобы знать, что вы сравниваете яблоки с яблоками. Номер модели подскажет вам кэш-память чипа, число ядер и количество потоков, скорость процессора, тип шины на чипе, а также скорость конвейера между ядрами в гигабитах в секунду. Например, один процессор Intel может иметь пропускную способность 8,00 ГТ / с, а другой процессор может иметь пропускную способность 6,5 ГТ / с... и между ядрами, что очень важно. Если данные застряли на ядре процессора после выполнения его работы... это фактически блокирует всю систему, аппаратное и программное обеспечение.
Вы проверили, насколько велик набор данных и насколько велико приложение при работе в оперативной памяти? Как быстро ОЗУ между двумя сравниваемыми системами И поддерживает ли приобретенный вами чип скорость ОЗУ!!! Хорошо известно, что материнские платы поддерживают много разных скоростей оперативной памяти, но процессор, с которым вы заказали систему, может не работать. Таким образом, вы можете заказать систему с материнской платой, поддерживающей 1300 МГц, и из-за заказанного вами чипа вы получите менее 1000 МГц. Если в этой системе так много ядер, почему для новой системы на ней всего 64 ГБ ОЗУ. У меня есть Dell T-410 для домашней системы, и я приобрел его примерно в 2009 году, и его максимальная емкость составляет 64 ГБ, с 8 ядрами (2 четырехъядерных)... и более новая модель имеет 128 ГБ ОЗУ с 12 ядрами (2 x 6). Если вы переупорядочиваете систему с учетом большего объема оперативной памяти, если вам это нужно... черт, я использую 32 ГБ для 8-ядерной домашней системы под управлением VMware 5.0.
Я думаю, основываясь на том, как вы написали свой пост, и на том типе запроса, который вы сделали, вы не оценили аппаратные аспекты перед заказом. Если вы посмотрите на мелкий шрифт... вы можете вернуть его для другой системы. Просто скажите боссу, что производительность не такая, как ожидалось, в зависимости от того, какое приложение оно запускает, и не откладывайте, потому что возвращение может быть хорошим в течение недели или двух недель, и после этого ВЫ СВОИМ.
Не стыдитесь, просто признайте это и сообщите руководству, что цифры, которые вы получаете после первоначального тестирования, не соответствуют тому, что, как вы полагали, вы получите за расходы наличными... и мы должны обменяться это для другой системы.
Как уже отмечали другие, тесты не всегда являются хорошим руководством для выбора процессора. Особенно PassMark, безусловно, не то, что вы хотели бы посмотреть на не универсальные приложения.
Если у вас есть некоторое представление о том, какие ресурсы использует ваше программное обеспечение и где оно будет узким местом, вам, возможно, захочется взглянуть на "необработанные" данные о производительности, такие как задержка памяти, пропускная способность памяти, а также, возможно, на отдельные тесты эталонного теста Spec. набор в дисциплинах CINT ( Intel 3960, AMD 6274) и CFP ( Intel 3990, AMD 6274).
Помните, что результаты (а также воспринимаемая или измеренная производительность приложения) могут значительно различаться в зависимости от параметров компиляции или версии компилятора, используемой для создания конкретного фрагмента двоичного файла. Ситуация несколько отличается для.NET, поскольку компиляторы создают только метакод, который преобразуется в фактический код, зависящий от архитектуры, во время выполнения JIT. Но даже там вы также можете указать параметры оптимизации для конкретной архитектуры. Кроме того, ваш конкретный уровень исправлений ОС также может быть значительным - Microsoft выпустила исправления для исправления недостаточной производительности на некоторых процессорах AMD.