MM with shared memory __global__ void mmkernel(float *a, float *b, float *c, int N, int M, int K) { int i = blockIdx.x * BLOCK_SIZE + threadIdx.x; int j = blockIdx.y; int tx = threadIdx.x; __shared__ float cb[BLOCK_SIZE]; float sum = 0.0f; for (int ks = 0; ks < M; ks+= BLOCK_SIZE) { cb[tx] = b[ks+tx+M*j]; // all BLOCK_SIZE threads parallel read for (int k = ks; k< ks+BLOCKINGSIZE; k++) sum += a[i+N*k] * cb[k-ks]; } c [i+N*j] = sum; } True dependence due to shared memory Anti-dependence
{}