Краткий вопрос о доступе к памяти CUDA - PullRequest
0 голосов
/ 17 мая 2011

Привет, если у меня проблема в том, что каждый поток вычисляет что-то (считывает некоторые параметры из постоянной памяти и использует их для вычисления), а затем сохраняет это в матрице глобальной памяти.эта матрица никогда не читается, а только записывается доступ ... есть ли сейчас смысл сначала использовать общую память для хранения всех вычисленных значений, а затем записывать их в глобальную память?Я думаю, что нет, потому что записи в глобальную память остаются такими же в полном объеме, поэтому записи в общую память просто добавляют записи, которые у меня уже были раньше ... Спасибо!

1 Ответ

3 голосов
/ 17 мая 2011

Может быть, в зависимости от шаблонов доступа в коде ядра. Использование буфера общей памяти для «вывода» вывода может быть полезным способом обеспечения слияния записей, когда наивная запись не будет объединена. Это было очень важно для производительности в первых двух поколениях совместимого с CUDA оборудования (G80 / G90). В более новом оборудовании аргументы за это гораздо менее убедительны. Карты Fermi имеют довольно эффективную схему кэширования L1 и L2, которая (в разумных пределах) может приблизиться к тому, что раньше было достижимо только при использовании общей памяти без какого-либо дополнительного кода.

Нет общего ответа на этот вопрос, потому что он зависит от многих особенностей того, что делает данный код, и от того, на каком целевом оборудовании он должен хорошо работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...