ошибка: класс "cooperative_groups::__v1::thread_block" не имеет члена "is_valid"

Мы пытаемся использовать некоторые функции совместных групп в CUDA для написания небольшого приложения. Мы используем карту Tesla V100 с CUDA 11.0. Но при использовании метода is_valid() в thread_block наблюдается следующая ошибка:

      error: class "cooperative_groups::__v1::thread_block" has no member "is_valid"

В предоставленном CUDA образце simpleCooperativeGroups.cu, в ядре cgkernel() при использовании метода is_valid можно увидеть эту ошибку. Фрагмент кода из модифицированного примера выглядит следующим образом.

      __global__ void cgkernel(){


// threadBlockGroup includes all threads in the block
thread_block threadBlockGroup = this_thread_block();
int threadBlockGroupSize=threadBlockGroup.size();

// workspace array in shared memory required for reduction
extern __shared__ int workspace[];

int input, output, expectedOutput;

// input to reduction, for each thread, is its' rank in the group
input=threadBlockGroup.thread_rank();

// expected output from analytical formula (n-1)(n)/2
// (noting that indexing starts at 0 rather than 1)
expectedOutput=(threadBlockGroupSize-1)*threadBlockGroupSize/2;

// perform reduction
output=sumReduction(threadBlockGroup, workspace, input);

bool valid = threadBlockGroup.is_valid();
.
.
.
}

Любые предложения по решению этой проблемы будут очень полезны.

1 ответ

изучение cooperative_groups.h, похоже, что единственные классы cg, для которых is_valid()метод предоставляется grid_groupа также multi_grid_group.

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

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

Другие вопросы по тегам