OpenCL:并行化滞后向量运算(三角形距离矩阵)
我在创建此串行代码的内核时遇到问题:OpenCL:并行化滞后向量运算(三角形距离矩阵),opencl,distance,distance-matrix,Opencl,Distance,Distance Matrix,我在创建此串行代码的内核时遇到问题: void distlag(double *x, double *y,double *data, double *ncoord, double *res) { // x: x-coordinate // y: y-coordinate // data: value associated with x-y coordinate // ncoord: number of coordinates int i=0, j=0;
void distlag(double *x, double *y,double *data, double *ncoord, double *res)
{
// x: x-coordinate
// y: y-coordinate
// data: value associated with x-y coordinate
// ncoord: number of coordinates
int i=0, j=0;
double u=0.0, v=0.0, lags=0.0;
for(i=0;i<(ncoord[0]-1);i++)
for(j=(i+1); j<ncoord[0];j++)
{
// Pairwise distances
lags=hypot(x[i]-x[j],y[i]-y[j]);
u=data[i];
v=data[j];
*res+= u+v+lags;
}
}
int n
是x
的长度(x等于(1,2,3,4,5,6,7,8))。然后我应该有n(n-1)/2个值(本例共28个)。我将全局和本地工作大小设置为n
(8)。x
和xauto
的cl\u mem
缓冲对象的大小分别为n
和n(n-1)/2
(28)。但是当我把结果读回来时,我得到了28个值,但不是预期的值。我得到:(0,7,12,15,16,15,12,7,0,0,0…,0)。有什么帮助吗
__kernel void totexp(__global float *x, __global float *xauto, int n)
{
int num_wrk_items = get_local_size(0);
int local_id = get_local_id(0);
int group_id = get_group_id(0);
int j, gid = get_global_id(0);
float sum = 0.0;
for (j = 0; j < n; j++)
{
if ( ((gid+j)!= j) && ((gid+j) < n))
{
sum = fabs(x[j]-x[gid+j]);
}
else
continue;
}
xauto[gid] = sum;
}