Почему std :: find_if значительно ускоряет функцию только на процессорах Intel?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему std :: find_if значительно ускоряет функцию только на процессорах Intel?

Сообщение Anonymous »

Переписывание следующей функции с использованием std :: find_if дает примерно 2x ускорение, но только при предоставлении ЦП Intel. < /p>
bool process_update_range_based(int treeId, int newHeight, bool tall,
std::vector& vec, std::vector& updateSet) {
for (auto &hr : vec) {
if (hr.treeId == treeId) {
if (hr.height == newHeight)
return false;
else {
hr.height = newHeight;
updateSet.push_back(treeId);
return true;
}
}
}
vec.emplace_back(treeId, newHeight, tall);
return true;
}

< /code>
Были проведены следующие измерения: моделируйте 10 раз, измеряйте среднее и минимальное время для выполнения n итераций. Минимальное значение является наиболее надежным, особенно в браузере, когда нет данных о внешних часах ЦП (значения Godbolt сильно различаются). Флаги компилятора были -o3 -march = x86-64-V3 < /p>



cpu < /th>
для цикла Avg < /th>
find_if avg < /th>
для цикла мин < /th>
find_if min < /th>
< /tr>
< /thead>


Godbolt venuineIntel
n/a
n/a
0.0275
0.0136
< /tr>

odbolt autenticamd < /td>
n/a
n/a
0.0245
0.0212
< /tr>

Apple M2 < /td>
0.0258
0.0235
0.0216
0.0216
< /tr>

amd 5600h < /td>
0.0288
0.0287
0.02444
0.0217
< /tr>

Intel I5-1335U < / td>
0.0294
>0.0152
0.0223
0.0125



исходный код Godbolt & Clarkmark < /p>
Как видите, на CPUS std :: find_if почти в 2 раза по сравнению с базовыми петля. Тем временем процессоры AMD/Apple либо 10-20%, либо совершенно одинаковы. Такое поведение последовательно между несколькими компиляторами (G ++, Clang ++, MSVC) < /p>
Особенно сбивает с толку, поскольку ускорение происходит только при замене цикла на основе диапазона на библиотечную функцию. .asm Code выглядит как некоторые простые движения и сравнения. Godbolt с функциями только сборка (без эталона) < /p>
Что вызывает эту разницу? Что такого особенного в процессорах Intel? Почему они выполняют ту же сборку в 2 раза быстрее, чем процессор AMD/Apple?

Подробнее здесь: https://stackoverflow.com/questions/794 ... intel-cpus
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»