Что может повлиять на производительность обхода плоского массива?

#c #memory #c 14 #benchmarking

#c #память #c 14 #сравнительный анализ

Вопрос:

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

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

 void stackalloc_benchmark(const current_type* data, std::size_t size)
{
    stack_allocator<131072, alignof(current_type)> allocator; //exactly to fit size elements
    block memory = allocator.allocate(sizeof(current_type) * 8);

    for (std::size_t i = 0; i < size;   i)
    {
        if (memory.size < sizeof(int) * i)
        {
            allocator.reallocate(memory, memory.size * 2);
        }

        *(to_type(memory.ptr)   i) = *(data   i); //to avoid wordy cast
    }

    allocator.deallocate(memory);
}
 

data гарантируется правильное выравнивание, потому что оно происходит от std::vector<current_type> . В распределителе также нет смещений, ошибка была исправлена вчера.

Я использую этот код для определения времени:

 template <typename ... ArgTypes>
void measure(ArgTypesamp;amp; ... args)
{
    auto start = std::chrono::high_resolution_clock::now();
    functor(std::forward<ArgTypes>(args)...);
    auto end = std::chrono::high_resolution_clock::now();
    timings.push_back(end - start);
}
 

Настройка:
current_type = long long , size = 8096 , runcount = 512 , VC 19.0024215.1, процессор: intel i7 2600, не уверен в частоте оперативной памяти. Выпуск сборки, x64, / 02, (максимальная скорость), Windows 10.

Цифры в основном составляли около 9-10 микросекунд, иногда доходя до 14. В одном месте это заняло до 72 микросекунд.

Мой вопрос: что может вызвать такое сильное падение производительности?

Комментарии:

1. Что еще запущено на компьютере?

2. @EdHeal, ничего. Я пытался отключить все, перезагрузиться, подождать минуту, а затем выполнить измерения. Даже без подключенного к нему отладчика MSVS есть некоторые проблемы. Программа печатает в файл csv.

3. @Olzhas если вы используете Windows 10, никогда ничего не запускается.

4. @CoffeeandCode, как я могу все отключить? Пока я далек от компьютерных лабораторий, попытаюсь протестировать его и на других машинах.

5. Вы измеряете такие малые времена — я бы подумал, что переключение контекста повлияет на эти тайминги.