我已经写了一段代码,其中一个数据:C代码 - 存储器访问/抢占
unsigned char buf[4096]; // data in chunks of size 4k
unsigned counter[256];
我添加了I/P数据为每3个连续的字节,并存储所述ANS。 ex:temp [4096]; temp [0] = buf [0] + buf [1] + buf [2]; ...直到4096
然后从临时的使用代码的结果生成的直方图:
for(i = 0; i < 4096; i++)
counter[temp[i]]++;
直方图排序(冒泡排序),然后顶部采取8最经常性值。代码运行在Linux内核(2.6.35)
我面临的问题是,如果我删除排序部分,执行代码所需的时间非常快(我的笔记本电脑上使用6微秒,测量使用gettimeofday func)。但是在引入分类之后,这个过程在很大程度上减缓了(44微秒)。排序功能本身需要20微秒,我不明白为什么时间增加这么多。我使用cachegrind进行了内存分析,结果是正常的,我甚至尝试禁用抢占ubut但它仍然没有显示任何区别。如果有人能帮助我在这里。谢谢!
为什么冒泡排序?为什么不'qsort()'? –
要获得8个最高值,您不需要进行完整排序。例如。 Heapsort可用于获取N个最高值(如果实现的话),它会比完整排序更快。 – osgx
甚至可以选择排序http://en.wikipedia.org/wiki/Selection_sort - 可以在获得前8个值后停止。 – osgx