我想优化一个OpenGL应用程序,一个热点是 做昂贵的处理(上传到显卡) 相对较小的数组(8-64值)有时候 价值观发生了变化,但大部分时间都保持不变所以最多 有效的解决方案是仅在上传数组时 它已经改变了。
当然最简单的方法是随时设置标志 数据已更改,但这需要许多代码 变化,为了快速测试我想知道 在需要做太多工作之前,可能会有性能提升 完成。
所以我想到了一个快速检查(如杂音哈希等) 在内存中,如果数据在帧与帧之间发生了变化 在这次检查后决定放弃。所以问题是,如何 我可以吗。 XOR像
这样的值数组float vptr [] = {box.x1,box.y1,box.x1,box.y2,box.x2,box.y2,box.x2,box.y1};
一起检测可靠的价值变化?
Best&谢谢, 海纳
答案 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