ошибка: класс "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
.
Поэтому в настоящее время это единственные группы, для которых доступен метод, не следует пытаться использовать этот метод с другими типами групп; Я думаю, что лучшим предположением будет то, что другие типы групп всегда считаются допустимыми.
Я подозреваю, что логика здесь заключается в том, что грид- и многосетевые группы имеют правильную конфигурацию запуска и требования к платформе; они могут быть недействительными. Другие типы групп не могут быть недействительными (по крайней мере, в этих отношениях) для создания на любой поддерживаемой платформе или конфигурации запуска. Я не имею в виду это как пуленепробиваемое утверждение при любой возможной интерпретации, но как общее руководство или рассуждение.