Я понимаю, что общая память на GPU не сохраняется в разных ядрах. Однако сохраняется ли кеш L1 при разных вызовах ядра?
Сохранение кэша L1 в ядрах CUDA
Ответы (1)
Кэш SM L1 становится недействительным между всеми операциями в одном и том же потоке или пустом потоке, чтобы гарантировать согласованность. Но на самом деле это не имеет значения, потому что кэш L1 на графических процессорах на самом деле не предназначен для улучшения временной локальности в данном потоке выполнения. В массивно-параллельном процессоре важна параллельная пространственная локальность. Это означает, что вы хотите, чтобы потоки, которые выполняются рядом друг с другом, имели доступ к данным, которые находятся рядом друг с другом.
Когда выполняется загрузка кэшированной памяти, это делается для одного варпа, и в кеше хранятся строки(и) кеша, к которым обращаются потоки в этом варпе (в идеале только одна строка). Если следующий варп обращается к той же строке (строкам) кеша, то кеш сработает, и задержка уменьшится. В противном случае кеш будет обновляться разными строками кеша. Если доступ к памяти очень разбросан, то более поздние варпы, вероятно, вытеснят строки кэша из более ранних варпов, прежде чем они будут использованы повторно.
К тому времени, когда запустится другое ядро, маловероятно, что данные в кеше будут действительными, потому что многие деформации, вероятно, были запущены этим SM для предыдущего ядра, поэтому на самом деле не имеет значения, сохраняются ли они.