你有一个三(或四)个浮点数的向量.总结它们的最快方法是什么?
SSE(movaps,shuffle,add,movd)总是比x87快吗?SSE4.2中的水平加法说明值得吗?移动到FPU的成本是多少,然后是faddp,faddp?什么是最快的特定指令序列?
"尝试安排事情,这样你可以一次总结四个向量"将不被接受作为答案.:-)
给定一个可以旋转的排序数组,以最小的时间复杂度在其中找到一个元素.
例如:数组内容可以是[8,1,2,3,4,5].假设您在其中搜索8.
我没有在任何地方找到这个特定主题......
我在23个整数的std :: vector中的不同数据上调用nth_element()算法,每秒大约400,000次,更精确的"无符号短"值.
我想提高计算速度,这个特定的调用需要很大一部分CPU时间.现在我注意到,与std :: sort()一样,即使具有最高优化级别和NDEBUG模式(Linux Clang编译器),nth_element函数在探查器中也是可见的,因此比较是内联的而不是函数调用本身.好吧,更多的preise:不是nth_element()但是std :: __ introselect()是可见的.
由于数据的大小很小,我尝试使用二次排序函数PIKSORT,当数据大小小于20个元素时,它通常比调用std :: sort更快,可能是因为函数将是内联的.
template <class CONTAINER>
inline void piksort(CONTAINER& arr) // indeed this is "insertion sort"
{
typename CONTAINER::value_type a;
const int n = (int)arr.size();
for (int j = 1; j<n; ++j) {
a = arr[j];
int i = j;
while (i > 0 && a < arr[i - 1]) {
arr[i] = arr[i - 1];
i--;
}
arr[i] = a;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这比在这种情况下使用nth_element慢.
此外,使用统计方法是不合适的,比std :: nth_element更快
最后,由于值在0到约20000的范围内,因此直方图方法看起来不合适. …
assembly ×1
c++ ×1
inline ×1
nth-element ×1
optimization ×1
performance ×1
sorting ×1
sse ×1
x86 ×1