我有一个123MB的大int
数组,它基本上是这样用的:
private static int[] data = new int[32487834];
static int eval(int[] c)
{
int p = data[c[0]];
p = data[p + c[1]];
p = data[p + c[2]];
p = data[p + c[3]];
p = data[p + c[4]];
p = data[p + c[5]];
return data[p + c[6]];
}
eval()
用不同的c
调用很多次(约50次),我想知道是否(以及如何)加速它。
我已经使用了unsafe function with an fixed array来使用所有CPU。它是TwoPlusTwo 7 card evaluator by RayW的C#端口。 C ++版本的速度要快得多。
可以使用GPU加快速度吗?
答案 0 :(得分:2)
GCHandle
修复数组并将指针缓存在静态字段中(不要只使用固定块 - 我相信它具有与输入相关的一定(小)开销。不确定)。VirtualAlloc
分配123MB阵列并使用大页面。这减少了TLB的失误。所有这些都是硬核低级优化。它们仅适用于您需要最高性能的情况。
我认为在优化此功能方面我们几乎处于极限。如果您显示函数的调用者,我们可能只会做得更好,以便它们可以作为一个单元进行优化。