gpt4 book ai didi

c# - 遍历后加速数组查找?

转载 作者:太空狗 更新时间:2023-10-29 19:45:40 25 4
gpt4 key购买 nike

我有一个 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 被多次调用(~50B 次),我想知道我是否(以及如何)加快它的速度。

我已经使用了 unsafe function with an fixed array这利用了所有的 CPU。它是 TwoPlusTwo 7 card evaluator by RayW 的 C# 端口. C++ 版本的速度微乎其微。

GPU 可以用来加速吗?

最佳答案

  1. 将数组引用缓存到局部变量中。由于多种原因,静态字段访问通常比本地访问慢(其中一个原因是该字段可能会更改,因此必须始终重新加载。JIT 可以更自由地优化本地)。
  2. 不要使用数组作为方法的参数。硬编码 7 个整数索引。这减少了数组分配、间接惩罚和边界检查。
  3. 使用不安全代码对数组进行索引。这将消除边界检查。使用 GCHandle 修复数组并将指针缓存在静态字段中(不要只使用固定 block - 我相信它有一定的(小)开销与输入它相关。不确定) .
  4. 作为固定数组的替代方法,使用 VirtualAlloc 分配 123MB 数组并使用大页面。这减少了 TLB 未命中。

所有这些都是硬核低级优化。它们仅在您需要最佳性能时适用。

我认为在优化此功能方面我们几乎已达到极限。如果您显示函数的调用者,以便将它们作为一个单元进行优化,我们可能只会做得更好。

关于c# - 遍历后加速数组查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14054557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com