Я написал фрагмент кода, в котором данные:
unsigned char buf[4096]; // data in chunks of size 4k
unsigned counter[256];
Я складываю данные i / p для каждых 3 смежных байтов и сохраняю ans.
напр .: темп [4096]; temp [0] = buf [0] + buf [1] + buf [2]; ... до 4096
Затем гистограмма генерируется из результатов temp с использованием кода:
for(i = 0; i < 4096; i++)
counter[temp[i]]++;
Гистограмма сортируется (пузырьковая сортировка), а затем берутся верхние 8 наиболее повторяющихся значений. Код запускается в ядре Linux (2.6.35)
Проблема, с которой я сталкиваюсь, заключается в том, что, если я удаляю часть сортировки, время, затрачиваемое на выполнение кода, очень быстро (6 мкс на моем ноутбуке, измеряется с помощью функции gettimeofday). Но после введения сортировки процесс значительно замедляется (44 мкс). Сама функция сортировки занимает 20 микросекунд, я не могу понять, почему время так сильно увеличивается. Я сделал анализ памяти, используя cachegrind, результаты нормальные, и я даже попытался отключить выгрузку, но все же это не показывает никакой разницы. Если кто-нибудь может помочь мне здесь. Спасибо!