Выделение глобальной памяти - PullRequest
2 голосов
/ 22 марта 2012

У меня есть следующий код, который выделяет глобальную память на GPU.

__global__ void mallocTest()
{
    char* ptr = (char*)malloc(123);
    //....
    free(ptr);
}

Будет ли каждый поток выделять память для отдельного ptr?
, поэтому, если у меня есть 2 блока из 10 потоков, то выделяется 20 массивов (т.е. каждый поток выделяет память для собственного использования)?Как я могу выделить память только на блок, а не на поток?т.е. если у меня есть 2 блока и 10 потоков, выделяются только 2 массива.Это возможно?

1 Ответ

3 голосов
/ 22 марта 2012

Если вы выполните этот код на устройстве с вычислительными возможностями 2.0 или 2.1, каждый поток выполнит выделение из кучи глобальной памяти во время выполнения. Таким образом, если ваша сетка выполнения содержит 20 потоков, вы получите 20 распределений: по одному на поток.

Если вам нужен массив на блок (и вы хотите, чтобы каждый поток в блоке имел доступ к одному и тому же массиву), то логичным подходом было бы использование разделяемой памяти, особенно если память используется только для жизни блока и не предназначен для повторного использования.

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