【发布时间】:2014-03-19 19:22:47
【问题描述】:
我正在尝试将 3x2 矩阵转换为 4x4 方阵:
__kernel void padding(float* newM, int m, int n, int newlength)
{
}
矩阵“newM”是行主序的,m=3,n=2 和 newlength=4。 newM 中的元素在前面都是紧凑的,而矩阵的尾部只是 0。 我的困惑是如何在不丢失后续值的情况下移动元素。我会创建一个本地副本,但我正在处理的矩阵非常大,不适合私人内存。
这是一维外观:
[1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0] -> [1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0]
这是二维外观:
[1, 1, 1] [1, 1, 1, 0]
[1, 1, 1] -> [1, 1, 1, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
它在 2D 中的实际外观:
[1, 1, 1, 1] [1, 1, 1, 0]
[1, 1, 0, 0] -> [1, 1, 1, 0]
[0, 0, 0, 0] [0, 0, 0, 0]
[0, 0, 0, 0] [0, 0, 0, 0]
我在这里使用的所有数字仅用于此示例,实际上我在矩阵中有随机浮点数,并且尺寸超过 2000x2000。
有什么想法吗?谢谢
【问题讨论】:
-
您是否确实需要在设备上执行此操作,即仅需要在程序开始时执行此操作还是需要执行多次?
-
我想在 GPU 上执行此操作,但在 CPU 上执行此操作会在我的程序中造成主要瓶颈。我的程序的重点是将两个矩阵相乘。矩阵可以是任意长度。我创建了一个内核,它可以非常快地将两个方阵相乘。所以我现在要做的是将两个输入矩阵转换为具有相同的尺寸并且是正方形的。