Matrix Transpose
2026/6/6大约 1 分钟
Matrix Transpose
题目描述
编写一个 GPU 程序,对 32 位浮点数矩阵进行转置。矩阵转置即交换行和列:给定一个 的矩阵 ,其转置 的维度为 ,满足:
所有矩阵均以行优先(row-major)格式存储。
实现要求
- 不允许使用外部库。
solve函数签名必须保持不变。- 最终结果必须存储在输出矩阵中。
示例
示例 1
Input: 2×3 矩阵: [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]
Output: 3×2 矩阵: [[1.0, 4.0], [2.0, 5.0], [3.0, 6.0]]示例 2
Input: 3×1 矩阵: [[1.0], [2.0], [3.0]]
Output: 1×3 矩阵: [[1.0, 2.0, 3.0]]约束条件
- 。
- 性能测试在 的规模下进行。
解题思路
矩阵转置的核心挑战在于非合并内存访问(Uncoalesced Access):按行优先格式读取但按列方向写入(或反之),会导致全局内存事务效率大幅下降。标准优化是使用共享内存作为中间缓冲,先以合并方式读入共享内存,再从共享内存以合并方式写出。
更进阶的做法是使用bank-conflict-free 的 pad 技巧和向量化加载(float4)来减少内存事务数量。欢迎在 GitHub Discussions 分享你的解法。