作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 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 可以用来加速吗?
最佳答案
GCHandle
修复数组并将指针缓存在静态字段中(不要只使用固定 block - 我相信它有一定的(小)开销与输入它相关。不确定) .VirtualAlloc
分配 123MB 数组并使用大页面。这减少了 TLB 未命中。所有这些都是硬核低级优化。它们仅在您需要最佳性能时适用。
我认为在优化此功能方面我们几乎已达到极限。如果您显示函数的调用者,以便将它们作为一个单元进行优化,我们可能只会做得更好。
关于c# - 遍历后加速数组查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14054557/
我是一名优秀的程序员,十分优秀!