Сколько я должен взволновать по поводу компилятора Intel C ++, испускающего субоптимальный код для AMD?

Добро пожаловать на борт.

Я удивлен, что вы хотите сделать расчет внутри коннекта. Это не так, как это работает. Пожалуйста, добавьте слот (метод), например,

void slotSetValue(int input)
{
  ui-progressBar->setValue(100 - input);
}

и подключите, например, connect(ui->horizontalSlider,SIGNAL(valueChanged(int)), this,slotSetValue(int)));

. Может потребоваться точная настройка для вашего кода.

пс. Я рекомендую использовать Qt5-connects, которые проверяются во время компиляции.

28
задан iH8 18 November 2014 в 18:04
поделиться

4 ответа

Купите коробку AMD и запустите ее на этом. Кажется, это единственная ответственная вещь, вместо того, чтобы доверять незнакомцам в Интернете;)

Кроме того, я считаю, что часть иска AMD против Intel основана на утверждении, что компилятор Intel специально создает код, который неэффективно работает на AMD. процессоры. Я не знаю, правда это или нет, но AMD, похоже, верит в это.

Но даже если они этого не делают преднамеренно, нет сомнений в том, что компилятор Intel оптимизирует его специально для процессоров Intel и ничего более.

Когда это сказано, я сомневаюсь, что это будет иметь огромное значение. Процессоры AMD будут по-прежнему пользоваться всеми автоматическими векторизацией и другими умными функциями компилятора.

17
ответ дан 28 November 2019 в 03:45
поделиться

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

Мой опыт:

Я работал в Intel и разработал собственное (C ++) приложение, где производительность была критичной. Мы пытались использовать компилятор Intel C ++, и он всегда не выполнял gcc - даже после выполнения профилей, перекомпиляции с использованием профилированной информации (которую icc предположительно использует для оптимизации) и повторного запуска с тем же самым набором данных ( это было в 2005-2007 годах, сейчас может быть иначе). Итак, исходя из моего опыта, вы можете попробовать gcc (в дополнение к icc и MSVC), возможно, вы улучшите производительность таким образом и обойдете вопрос. Сменить компиляторы не должно быть слишком сложно (если ваш процесс сборки разумен).

Сейчас я работаю в другой компании, а ИТ-специалисты проводят обширное тестирование оборудования, и какое-то время оборудование Intel и AMD было относительно сопоставимым. , но последнее поколение оборудования Intel значительно превзошло AMD. В результате я считаю, что они приобрели значительное количество процессоров Intel и рекомендуют то же самое для наших клиентов, которые используют наше программное обеспечение.

Но вернемся к вопросу о том, специально ли компилятор Intel нацелен на медленную работу оборудования AMD. Я сомневаюсь, что Intel этим занимается.

4
ответ дан 28 November 2019 в 03:45
поделиться

Извините, если вы нажали мою общую кнопку.

Это касается низкоуровневой оптимизации, поэтому имеет значение только для кода, в котором 1) счетчик программы тратит много времени, и 2) компилятор действительно видит. Например, если ПК проводит большую часть своего времени в библиотечных подпрограммах, которые вы не компилируете, это не имеет особого значения.

Выполняются ли условия 1 и 2, вот мой опыт оптимизации:

Сделано несколько итераций выборки и фиксации. В каждом из них выявляется проблема, и чаще всего дело не в том, где находится счетчик программы. Скорее всего, есть вызовы функций на средних уровнях стека вызовов, которые, поскольку производительность имеет первостепенное значение, могут быть заменены. Я делаю это, чтобы быстро их найти.

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

Теперь программа может быть во много раз быстрее, чем была вначале. Я никогда не видел ни одной крупной программы, независимо от того, насколько тщательно она написана, которая не могла бы выиграть от этого процесса. Если процесс не был завершен, не следует думать, что низкоуровневая оптимизация - единственный способ ускорить работу программы.

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

2
ответ дан 28 November 2019 в 03:45
поделиться
[

] Мы видели, что везде, где компилятор Intel должен сделать выбор времени выполнения о доступном наборе инструкций, если он не распознает Intel CPU, он идет в их "стандартном" коде (что, как и следовало ожидать, может быть неоптимальным)[

]. [

] Обратите внимание, что даже если я использовал слово "компилятор", приведенное выше, то в основном это происходит в поставляемых ими (предварительно скомпилированных) библиотеках и intrinsics, которые проверяют набор инструкций и вызывают лучший код.[

].
5
ответ дан 28 November 2019 в 03:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: