2014-01-17 18 views
0

我通過this後可以瞭解「l2_subp0_read_sector_misses」和「l2_subp1_read_sector_misses」。現在我有關於事件「l2_subp0_write_sector_misses」和「l2_subp1_write_sector_misses」的類似問題。瞭解nvprof事件的結果「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

發現L2是寫入緩存,因此所有對L2的寫入訪問都被報告爲L2未命中。