- 主题:求一个矩阵原地转置的并行算法
连续内存大小一样的
【 在 here080 的大作中提到: 】
: 非方阵如何“原地”转置?
: 【 在 leslin (我心有约) 的大作中提到: 】
: : 标 题: Re: 求一个矩阵原地转置的并行算法
: ...................
--
FROM 221.222.21.*
二维数组内存也是连续的,和一维数组内存布局是一样的。高性能计算出于内存性能考虑一般都要求内存连续,转置与否也有内存性能差异
【 在 here080 的大作中提到: 】
: 这不是算法的问题,而是存储的问题。
: 如果你是二维数组,那就不可能“原地”转置。
: 如果你是一维数组通过指标换算,那显然直接改这个换算关系就可以了。
: ...................
--
FROM 221.222.21.*
abc
def
转置变成
ad
be
cf
内存不一样的。
我不太熟悉这个领域,一般用 eigen3 库处理矩阵,可以用 transposeInPlace 方法。自己实现的话我会考虑看看百科上提及的文献
https://en.m.wikipedia.org/wiki/In-place_matrix_transposition
【 在 here080 的大作中提到: 】
: 二维数组是否一定是连续的取决于语言。
: C++标准应该不保证二维数组内存连续吧?
:
: ...................
--
修改:milksea FROM 221.222.21.*
FROM 221.222.21.*
问题描述的上下文不清楚,问题本身还是那样:
非稀疏矩阵,内存连续存储,行优先排列与列优先排列原地互相转换。
【 在 here080 的大作中提到: 】
: 总之这算是一个API或者内存的问题,却不是一个算法问题。
: 单纯讨论矩阵原地转置算法的问题是没有意义的。最起码要先明确是哪个矩阵库,数据存储方式是什么样的。
: 【 在 milksea (肥了,又肥了 >>>_<<<) 的大作中提到: 】
: ...................
--
FROM 221.222.21.*
题外话,c++标准保证数组内存连续。二维数组是数组的数组,也必须连续。
不过矩阵一般不会直接用原生二维数组实现。
【 在 here080 的大作中提到: 】
: 二维数组是否一定是连续的取决于语言。
: C++标准应该不保证二维数组内存连续吧?
:
: ...................
--
FROM 221.222.21.*
可以的,多数情况是这样,不过访存次序变化影响效率,所以有时候也需要转置。
【 在 here080 的大作中提到: 】
: 直接换指标函数不行吗?
: 【 在 milksea (肥了,又肥了 >>>_<<<) 的大作中提到: 】
: : 标 题: Re: 求一个矩阵原地转置的并行算法
: ...................
--
FROM 221.222.21.*
原生数组当然就是 int[3][5] 这样的静态确定大小的数组。大小固定所以用得少。
【 在 lorinsz 的大作中提到: 】
: 好奇 什么是cpp的原生二维数组?还是你是说vector<vector<T>>? 数值计算里一般不会这样声明二维数组 都是一维数组 然后加坐标变换
: 【 在 milksea 的大作中提到: 】
: : 题外话,c++标准保证数组内存连续。二维数组是数组的数组,也必须连续。
: ...................
--
修改:milksea FROM 221.222.21.*
FROM 221.222.21.*