Я работаю над многопоточным приложением (торговое приложение Forex, построенное на C #) и обновил клиент с 12-ядерной машины 3,0 ГГц (Intel) до 32-ядерной машины 2,2 ГГц (AMD). Результаты теста PassMark были значительно выше при использовании многоядерных процессоров, выполняющих целочисленные, плавающие и другие вычисления, в то время как для одноядерных вычислений он был немного медленнее, чем пакет (другие, которые сравнивались с конфигурацией, аналогичной 12-ядерной). О, он также поставляется с 64 ГБ ОЗУ (в 4 раза больше, чем у другого) и гораздо более быстрым SSD.
Таким образом, после настройки и запуска приложения на этой машине оно не только не работало, но и стало значительно медленнее. Мы говорим о 30 секундах - на 1 минуту медленнее в приложении, которое обычно завершает обработку в течение 5-20 секунд. Приложение использует МАКСИМАЛЬНУЮ СТЕПЕНЬ ПАРАЛЛИЗМА (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 потоков, но затем без видимой причины производительность падает линейно по мере увеличения количества потоков. Это показатель истощения ресурса. Замки действительно дорогие. Рассмотрите возможность использования структур без блокировки или минимизируйте количество общих ресурсов и взаимодействие между потоками.
Еще одно замедление может быть связано с тайниками. Действительно интересный пример - компрессор lz4. Ранние версии были очень быстрыми, но другой, более сложный компрессор (мгновенный) давал аналогичные характеристики. Причина заключалась в том, как используются кеши. Не недооценивайте это. Если вы знаете, что делаете, вы можете во много раз ускорить некоторые алгоритмы и структуры данных, что и сделал автор 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 = 12 потоков, а не арку 12x2, как я предлагал. (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. сюита в ЦИНТ (Intel 3960, 6274 драм) и CFP (Intel 3990, 6274 драм) дисциплины.
Имейте в виду, что результаты (а также предполагаемая или измеренная производительность приложений) могут значительно отличаться. в зависимости от параметров компиляции или используемой версии компилятора для создания определенной части двоичного файла. Для .NET все несколько иначе, поскольку компиляторы создают только метакод, который транслируется в реальный архитектурно-зависимый код средой выполнения JIT. Но даже там можно указать параметры оптимизации для конкретной архитектуры. Кроме того, ваш конкретный уровень исправления ОС также может быть значительным - Microsoft выпустила исправления для исправления недостаточной производительности некоторых процессоров AMD.