c# - 在 C# 中实现莫顿 Z 曲线的有效性
问题描述
我正在研究一个元胞自动机,它涉及每秒多次读取/写入二维数组,特别是相邻的单元格。我了解数据局部性减少了缓存未命中,并且在我的情况下应该会大大提高性能,所以我听说过。我决定实现一个morton z-curve,它似乎最快地将其在“z-curve 数组”中的索引转换为 2d 数组中相应的 x,y 坐标。但是,我已经分析了许多算法,但似乎没有一个能够访问数组中的每个单元格并在接近c# 支持的标准二维数组类型的任何地方编辑其邻居(最多半速,并且最差速度的 1/10)。
我已经尝试过越来越快的算法将 x/y 坐标转换为 z 索引,但强大的二维数组仍然更快。这些包括“魔术位”和查找表方法,如下所示:here。这没有道理。缓存未命中和数据局部性是否根本不是什么大问题,并且被 z 数组和 2d 数组之间转换所需的处理所抵消?请记住转换实际上是多么简单,只需将 x 和 y 坐标的二进制文件交错即可产生 z 索引。
这是徒劳的努力吗?C# 在这种情况下根本就没有能力吗?
解决方案
推荐阅读
- python - 将堆积的表格绘制成条形图 - Pandas
- visual-studio-code - vscode ctrl+p 显示匹配字符串:显示文件但文件路径较长时看不到匹配的字符串
- php - MySQL 和 PDO 查询差异
- android - Tensorflow Lite 无法检测到从相机加载的对象
- windows - 如何使用 PuTTY 一键打开 1000 多个 SSH 会话?
- reactjs - 用 Yarn 和 PM2 反应和烧瓶
- wordpress - Wordpress plugin ABSPATH or die
- wordpress - Wordpress 在自定义模板文件中需要一个 php 文件
- amazon-web-services - EC2 和 Lightsail 之间的数据流量是否免费(在 EC2 计费中)?
- c++ - 运行时错误:引用绑定到“int”类型的空指针 (stl_vector.h)