所以我正在研究矩阵上的归约函数:我需要在矩阵中找到最大值。我已经实现了一个函数来获取数组的最大值并将其转换为矩阵版本应该很简单,但我无法让它工作。我想知道这是否是正确的方法。您可以在下面找到两个版本的代码:
对于数组:
__global__
void reduce_kernal_shared_mem(float *d_in, float *d_out){
int indx = blockDim.x * blockIdx.x + threadIdx.x;
int tindx = threadIdx.x;
extern __shared__ float sh_in[];
sh_in[tindx] = -99999.0f;
sh_in[tindx] = d_in[indx];
__syncthreads();
for(int i = blockDim.x / 2; i > 0; i >>= 1){
if(tindx < i){
sh_in[tindx] = fmax(sh_in[tindx], sh_in[tindx + i]);
}
__syncthreads();
}
if(tindx == 0){
d_out[blockIdx.x] = sh_in[0];
}
}
void reduce(float *d_in, float *d_int, float *d_out, const int ARRAY_SIZE, bool is_shared){
if(!is_shared){
reduce_kernal<<<1024, 1024>>>(d_in, d_int);
reduce_kernal<<<1, …Run Code Online (Sandbox Code Playgroud) cuda ×1