理解nvprof事件的结果“l2_subp0_write_sector_misses”和“l2_subp1_write_sector_misses”

时间:2014-01-17 17:39:04

标签: cuda nvidia profiler

通过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缓存写访问总是会丢失?

感谢。

1 个答案:

答案 0 :(得分:1)

发现L2是一个直写缓存,因此对L2的所有写访问都报告为L2未命中。