cuda矩阵逆使用高斯约旦消除

时间:2015-04-02 23:30:56

标签: c matrix cuda

我正在尝试使用cuda中的高斯jordan消除来找到矩阵逆,这是我的内核代码将给定的n * n矩阵转换为对角矩阵:

__global__ void gaussjordan(float *A,  float *I,int n)
{
    int x = blockIdx.x * blockDim.x + threadIdx.x;
    int y = blockIdx.y * blockDim.y + threadIdx.y;
    float P;

        if(x!=y)
        {
            P=A[x*n+y]/A[y*n+y];
            for(int k=0;k<n;k++){
                I[x*n+k]-=I[y*n+k]*P;
                A[x*n+k]=A[x*n+k]-A[y*n+k]*P;
                }
             __syncthreads();
        }
}

这里的问题是矩阵A []没有使用修改后的值进行更新,并且线程正在采用初始值。

例如,如果n = 3,则考虑A [n * n] = [1 2 2 2 2 2 2 2 3],因此在线程迭代后x = 1; y = 0且x = 2; y = 0 A []变为[1 2 2 0 -2 -2 0 -2 -1]因此,对于下一个线程迭代x = 0; y = 1且x = 2; y = 1,线程应使用修改后的A []值,而是线程正在使用原始A值。任何人都可以帮我弄清楚如何更新vales,以便线程可以使用修改后的值。

0 个答案:

没有答案