Почему обработка отсортированного массива происходит быстрее, чем обработка несортированного массива?
Ответ: предсказание ветвления
Затем я попытался воссоздать исходный вопрос и обнаружил, что он больше не актуален (или конкретный код там не актуален), поскольку компиляторы могут делать это без ветвления. как вы можете видеть в ответе, который я получил здесь:
Почему предсказание ветвления (промаха) не влияет на производительность (C++)?
Поэтому я подумал, что если в компиляторе есть специальная функция для сравнения + подсчета, чтобы воссоздать исходную проблему, я изменю код для сравнения и умножения, как вы можете видеть здесь:
Код: Выделить всё
#include
#include
#include
#include
#include
int main()
{
// Step 1: Allocate a vector of size 1 million
std::vector vec(100'000'000);
// Step 2: Fill it with random numbers between 0 and 10
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution dis(0, 10);
for (auto& val : vec)
{
val = dis(gen);
}
// Step 3: Count numbers above 5 (and measure time)
auto start = std::chrono::high_resolution_clock::now();
int sum_above_5 = 1;
for (size_t i = 0; i < vec.size(); i++)
{
if (vec[i] < 5)
{
sum_above_5*=vec[i];
}
}
auto end = std::chrono::high_resolution_clock::now();
auto duration_before_sort = std::chrono::duration_cast(end - start).count();
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79789561/why-processing-sorted-array-is-faster[/url]
Мобильная версия