Код C - доступ к памяти / приоритетное прерывание

Я написал фрагмент кода, в котором данные:

unsigned char buf[4096]; // data in chunks of size 4k
unsigned counter[256];

Я складываю данные i / p для каждых 3 смежных байтов и хранение ans. пример: temp [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 func). Но после введения сортировки процесс сильно замедляется (44 мкс). Сама функция сортировки занимает 20 микросекунд, я не могу понять, почему время так сильно увеличивается. Я сделал анализ памяти с помощью cachegrind, результаты нормальные, я даже попытался отключить приоритетное прерывание, но все равно никакой разницы не показывает. Если кто-нибудь может помочь мне здесь. Спасибо!

6
задан randy7 5 July 2011 в 13:41
поделиться