【发布时间】:2014-12-09 23:05:51
【问题描述】:
我正在尝试了解 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;
}
}
如果我启动一个网格大小为 32 x 32 和块大小为 16 x 16 的内核,并且矩阵为 500 x 500,那么有多少线程会遇到线程发散?
既然矩阵右边缘的每个线程块都会有线程发散,那么线程发散的warp数量不应该是256吗?
【问题讨论】:
标签: cuda warp-scheduler