我正在编写使用大量图形操作的代码;许多更高级别的算法迭代所有图边并对它们进行一些处理。有一个迭代器方法可以返回一批边,如下所示:
G.get_edges(edges,iterator,num_edges);
for (k = 0; k < num_edges; k++) {
i = edges[k,0];
j = edges[k,1];
// Do something to (i,j)
}
在程序的其他地方,有一个称为参数的参数batch_size,它是调用此算法时要操作的标准边数。目前,我已经batch_size硬编码为 64,认为缓存行可以在我的计算机上保存 128 个整数。
自动调整批量大小的明智方法是什么?我想做一些类似于ATLAS如何选择块大小而无需阅读 ATLAS 源代码的事情。
我对这应该如何工作的最佳猜测:
编译代码的初始版本,在运行时选择批处理大小
使用不同的批量大小多次运行测试套件。
选择测试套件运行最快的批量大小
b。生成一个
.h包含预处理器指令的新文件,该指令将批处理大小设置为b.编译其余的代码,现在在编译时知道批量大小。