c++ - 三个维度的行主存储和列主存储之间的就地转换
问题描述
我有一个程序以行优先(又名“C”)顺序接收三维数据作为平面数组作为输入。
我需要将这些传递给一个库,该库需要以列为主(又名“Fortran”)顺序的相同三维数据。
在我的程序之外预处理数组不是一种选择。
除了性能之外,在复制时转换数据没有问题——每个数组都有几百万个元素,分配和复制是我的主要瓶颈——所以我想就地进行转换,看看是否有帮助.
但是,我一直无法计算出这种转换背后的数学原理,而且我的谷歌搜索也没有什么帮助。
有没有一种有效的方法来就地执行这种转换?
解决方案
就地转换(如果可能)无论如何都会复制这些大数组的所有元素,因此它不会对缓存友好。
对于一个大数组(及其后续的长转换),每个分配都将完成一次,如果您必须处理此类数组的流,您可以重用旧数组以避免分配/释放重复。
我只是建议以可预测/缓存友好的行优先顺序加载数据,并依靠存储缓冲区机制来处理第二个(分配的)数组的列优先存储反模式。
推荐阅读
- javascript - 如何选择没有其他div的div
- python - 使用火花流读取脚本的输出输出
- javascript - 如何在 div 中提交来自某些表单的所有数据?
- azure - 天蓝色广告。授权流程是否需要从浏览器调用开始以获取桌面应用程序的授权令牌?
- reactjs - 使用 babel、nyc 和 istanbul 插件从 Cypress 获取代码覆盖率?
- r - 为什么我的一些小提琴图对于离散的音阶看起来“波浪状”?
- react-native - 如何在react-native中使用图像上方的加载指示器显示图像从一个到另一个的渐进变化
- verilog - 为什么在 DRAM 中执行代码后将 Rocket Chip 困在 FPGA 上
- postgresql - 如何减去两个总和列的结果
- swiftui - SwiftUI 页面控件实现