CUDA разделяет память - PullRequest
       6

CUDA разделяет память

3 голосов
/ 17 февраля 2011

Мне нужно кое-что узнать об общей памяти CUDA.Допустим, я назначил 50 блоков по 10 потоков на блок в карте G80.Каждый процессор SM G80 может обрабатывать 8 блоков одновременно.Предположим, что после выполнения некоторых вычислений общая память полностью занята.

Какими будут значения в разделяемой памяти, когда появятся следующие 8 новых блоков?Будут ли предыдущие значения там находиться?Или предыдущие значения будут скопированы в глобальную память, а общая память обновлена ​​для следующих 8 блоков?

Ответы [ 2 ]

6 голосов
/ 17 февраля 2011

В нем говорится о квалификаторах типа:

  1. Переменные в регистрах для потока, остается только в ядре
  2. Переменные в глобальной памяти для потока, остаются только в ядре
  3. __device__ __shared__ переменная типа в разделяемой памяти для блока, остается только в ядре
  4. __device__ переменная типа в глобальной памяти для сетки, сохраняется до выхода из приложения
  5. __device__ __constant__ переменная типа для сетки, остается до выхода из приложения

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

2 голосов
/ 16 апреля 2011

Для блоков ядра порядок выполнения и SM назначаются случайным образом.В этом смысле, даже если старое значение или адрес сохраняются, трудно отслеживать вещи.Я сомневаюсь, что есть даже способ сделать это.Связь между блоками осуществляется через микросхему памяти.Задержка, связанная с не чиповой памятью, снижает производительность, что усложняет программирование на GPUВ картах Ферми блоки разделяют некоторый кэш L2, но нельзя изменить поведение этих кешей.

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