最近在做基于GPU的并行BitonicSort排序,中间用到了矩阵转置。觉得矩阵转置虽然简单,但一个好的矩阵转置优化却很好表达了GPU程序优化的几个基本要素。所以记录下。这里GPU接口还是用Directx11的DirectCompute,然后为了便于着重算法重点,这里我们只讨论HLSL的代码。
最简单的GPU矩阵转置大家应该可以想到了,就是把X和Y做一个对换。
//Matrix Transpose Code
StructuredBuffer<int> inData;
RWStructuredBuffer<int> outData;
[numthreads(TRANSPOSE_BLOCK_SIZE,TRANSPOSE_BLOCK_SIZE,1)]
void MatrixTra