在c ++中有效检查浮点数组中值的变化

时间:2013-11-23 16:01:38

标签: c++ arrays hash

我想优化一个OpenGL应用程序,一个热点是 做昂贵的处理(上传到显卡) 相对较小的数组(8-64值)有时候 价值观发生了变化,但大部分时间都保持不变所以最多 有效的解决方案是仅在上传数组时 它已经改变了。

当然最简单的方法是随时设置标志 数据已更改,但这需要许多代码 变化,为了快速测试我想知道 在需要做太多工作之前,可能会有性能提升 完成。

所以我想到了一个快速检查(如杂音哈希等) 在内存中,如果数据在帧与帧之间发生了变化 在这次检查后决定放弃。所以问题是,如何 我可以吗。 XOR像

这样的值数组

float vptr [] = {box.x1,box.y1,box.x1,box.y2,box.x2,box.y2,box.x2,box.y1};

一起检测可靠的价值变化?

Best&谢谢, 海纳

2 个答案:

答案 0 :(得分:1)

如果您正在使用英特尔,您可以查看英特尔内在函数。 http://software.intel.com/en-us/articles/intel-intrinsics-guide为您提供了一个可以探索的互动参考。在一条指令中有一堆用于比较多个整数或双精度的指令,这是一个很好的加速。

答案 1 :(得分:0)

@Ming,谢谢你的内在加速,我会看看这个。

float vptr[] = { box.x1,box.y1, box.x1,box.y2, box.x2,box.y2, box.x2,box.y1 };
unsigned hashval h = 0;
for(int i=...)
{
   h ^= (unsigned&) vptr[i];
}

死简单,适用于非常小的阵列。编译器应该能够自动矢量化,数组的大小是已知的。必须测试更大的阵列。 来源:Hash function for floats