通过this帖子,我能够理解“l2_subp0_read_sector_misses”和“l2_subp1_read_sector_misses”。现在我有关于事件“l2_subp0_write_sector_misses”和“l2_subp1_write_sector_misses”的类似问题。
让我们首先采用与给定链接相同的例子(向量添加)
内核代码:
__global__ void AddVectors(const float* A, const float* B, float* C, int N)
{
int blockStartIndex = blockIdx.x * blockDim.x * N;
int threadStartIndex = blockStartIndex + threadIdx.x;
int threadEndIndex = threadStartIndex + ( N * blockDim.x );
int i;
for( i=threadStartIndex; i<threadEndIndex; i+=blockDim.x ){
C[i] = A[i] + B[i];
}
}
在这里,我还将数组C从主机复制到设备。因此,C阵列必须位于L2缓存中(3个阵列的总大小小于L2缓存的大小)。但是我仍然看到根据nvprof结果,所有对C的写访问都是L2缓存未命中。
这是预期的行为吗? 是否有任何情况我们可以预期L2写缓存命中或L2缓存写访问总是会丢失?
感谢。
答案 0 :(得分:1)
发现L2是一个直写缓存,因此对L2的所有写访问都报告为L2未命中。