【发布时间】:2015-06-15 07:37:07
【问题描述】:
我在 CUDA 中做矩阵乘法。以下设置有效:
int TILE = 8;
dim3 DimGrid((numCColumns - 1)/TILE + 1, (numCRows - 1)/TILE + 1, 1);
dim3 DimBlock(TILE, TILE, 1);
但是如果我对整个图像使用一个块,它会返回全零。这是什么原因?假设一个块可以包含整个图像(输入为 64x64)。
dim3 DimGrid(1,1,1);
dim3 DimBlock(numCColumns, numCRows, 1);
这是我在主函数中调用内核的方式:
matrixMultiply<<<DimGrid, DimBlock>>>(deviceA, deviceB, deviceC,
numARows, numAColumns,
numBRows, numBColumns,
numCRows, numCColumns);
和内核:
__global__ void matrixMultiply(float * A, float * B, float * C,
int numARows, int numAColumns,
int numBRows, int numBColumns,
int numCRows, int numCColumns) {
//@@ Insert code to implement matrix multiplication here
int Row = blockIdx.y * blockDim.y + threadIdx.y;
int Col = blockIdx.x * blockDim.x + threadIdx.x;
if ((Row < numCRows) && (Col < numCColumns))
{
float value = 0.0;
for (int i = 0; i < numAColumns; i++)
value += A[Row * numAColumns + i] * B[i*numBColumns + Col];
C[Row * numCColumns + Col] = value;
}
}
【问题讨论】:
标签: cuda