24
最快的固定长度6 int数组
在回答另一个堆栈溢出问题(这个问题)时,我偶然发现了一个有趣的子问题。对6个整数数组进行排序的最快方法是什么? 由于问题非常低: 我们不能假设库可用(并且调用本身有成本),只能使用普通C语言 为了避免排空指令流水线(具有非常高的成本),我们也许应该尽量减少分支机构,跳跃,和所有其他类型的控制流断裂(像那些隐藏在背后的序列点&&或||)。 房间受到限制,尽量减少寄存器和内存使用是一个问题,理想情况下,最好在适当的位置进行排序。 确实,这个问题是一种高尔夫,其目标不是最小化源代码长度,而是执行时间。我将其称为“ Zening”代码,如Michael Abrash所著的《Zen of Code Optimization》及其续集的书名中所用。 至于为什么有趣,它分为几层: 该示例简单易懂,易于度量,不涉及太多C技能 它显示了针对该问题选择良好算法的效果,还显示了编译器和基础硬件的效果。 这是我的参考(天真,未优化)实现和测试集。 #include <stdio.h> static __inline__ int sort6(int * d){ char j, i, imin; int tmp; for (j = 0 ; j < 5 ; j++){ imin = j; for (i = j + 1; i < …