我正在尝试理解CUDA线程束和线程分歧。假设我有一个简单的矩阵乘法内核,用于相乘n x n矩阵。
__global__ void matrix_multiply(float* a, float* b, float* c, int n)
{
int row = blockIdx.y + blockDim.y + threadIdx.y;
int col = blockIdx.x + blockDim.x + threadIdx.x;
if(row < n && col < n) {
float tmp = 0.0f;
for(int i = 0; i < n; ++i)
tmp += a[row * n + i] * b[i * n + col];
c[row * n + col] = tmp;
}
}
如果我使用32x32的网格大小和16x16的块大小启动内核,并且矩阵为500x500,那么将遇到线程分歧的线程有多少个warp?
由于矩阵右侧的每个线程块都会出现线程分歧,所以具有线程分歧的warp数量应该是256吗?