level 7
Abstract_cai
楼主
我刚入门,想写一个LU分解来熟悉CUDA,但是我卡住了。。。
我知道CUblas中有关于线性方程组的解的程序,但是我是想自己了解自己怎么写。
for(int i=0;i<n-1;i++)
{
int blockweith=n-i-1;
lu_decomp<<<blockweith,THREAD_NUM>>>(a_gpu,d,n,i);
}
__global__ void lu_decomp(double *a,double *d,int nn,int ii)
{int i=ii,n=nn;
int tid=threadIdx.x;
int bid=blockIdx.x;
int j=bid+i+1;double temp;
for(int k=i+tid;k<n;k+=THREAD_NUM)
{
if(i==k) a[j*n+i]=a[j*n+i]/a[i*n+i];__syncthreads();
if(i!=k) a[j*n+k]-=a[j*n+i]*a[i*n+k];__syncthreads();
}
}
这样会有问题吗。 如果目标是对称正定阵。
结果很是不对,希望得到帮助。I
2013年10月11日 13点10分
1
我知道CUblas中有关于线性方程组的解的程序,但是我是想自己了解自己怎么写。
for(int i=0;i<n-1;i++)
{
int blockweith=n-i-1;
lu_decomp<<<blockweith,THREAD_NUM>>>(a_gpu,d,n,i);
}
__global__ void lu_decomp(double *a,double *d,int nn,int ii)
{int i=ii,n=nn;
int tid=threadIdx.x;
int bid=blockIdx.x;
int j=bid+i+1;double temp;
for(int k=i+tid;k<n;k+=THREAD_NUM)
{
if(i==k) a[j*n+i]=a[j*n+i]/a[i*n+i];__syncthreads();
if(i!=k) a[j*n+k]-=a[j*n+i]*a[i*n+k];__syncthreads();
}
}
这样会有问题吗。 如果目标是对称正定阵。
结果很是不对,希望得到帮助。I