跨越CUDA内核的L1缓存持久性

gme*_*mon 5 cuda gpu cpu-cache

我知道GPU上的共享内存不会持久存在于不同的内核中.但是,L1缓存是否会在不同的内核调用中持续存在?

har*_*ism 8

SM L1高速缓存在同一流或空流上的所有操作之间无效,以保证一致性.但这并不重要,因为GPU上的L1缓存并非真正用于改善给定执行线程内的时间局部性.在大规模并行处理器上,重要的是并行空间局部性.这意味着您希望彼此相邻执行的线程访问彼此相邻的数据.

当执行高速缓存的内存加载时,它将针对单个warp完成,并且高速缓存存储由该warp中的线程访问的高速缓存行(理想情况下只有一行).如果下一个warp访问相同的缓存行,则缓存将命中并且延迟将减少.否则,将使用不同的缓存行更新缓存.如果内存访问非常分散,那么稍后warp可能会在重用之前从早期warp中逐出高速缓存行.

当另一个内核运行时,缓存中的数据不太可能是有效的,因为许多warp可能已经由该SM为前一个内核运行,因此如果它仍然存在则无关紧要.