【发布时间】:2019-06-14 04:01:10
【问题描述】:
我需要用下面函数返回的值填充矩阵
__device__ float calc(float *ar, int m, float sum, int i, int j)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx < m)
{
ar[idx] = __powf(ar[idx], i + j);
atomicAdd(&sum, ar[idx]);
}
return sum;
}
矩阵设置为一维数组并通过此函数填充
__global__ void createMatrix(float *A, float *arr, int size)
{
A[threadIdx.y*size + threadIdx.x] = /*some number*/;
}
理论上应该是这样的
__global__ void createMatrix(float *A, float *arr, int size)
{
float sum = 0;
A[threadIdx.y*size + threadIdx.x] = calc(arr, size, sum, threadIdx.x, threadIdx.y);
}
但它不起作用,calc 总是返回 0。有什么方法可以使用 global 函数填充矩阵吗?提前致谢。
【问题讨论】: