Когда блок ядра запускается с хоста, он имеет размер основы 32. Является ли это тем же самым для дочерних ядер, запущенных с помощью динамического параллелизма? Мое предположение было бы да, но я не видел его в документах.Имеют ли ядра ядра ядра ядра такие же размеры основы, как ядра с запуском ядра?
Больший вопрос, конечно же, стоит ли: стоит ли?
__global__ void kernel(const int * vec, float * outvec){
int idx = threadIdx.x;
float random_sum=0;
for(int j=0; j<vec[idx]; j++){
random_sum+=threadsafe_rand_uniform();
}
outvec[idx] = random_sum;
}
Хорошо, этот пример является надуманным. Дело в том, что если у вас есть петля разной длины от потока к потоку, возникает соблазн попробовать и динамически распараллелить ее. Однако, если деформация все равно 32, вы в конечном итоге тратите много процессоров на искажения неравномерных размеров. В этом конкретном примере вы можете сначала отсортировать данные, а затем отправить динамически параллелизуемые индексы в одном ядре и индексы плохо сформированной формы в другой.
Вы уже ответили на свой второй/более крупный вопрос в вопросе, верно? –
Предполагая, что нет никакой гибкости в размере основы, для этого конкретного случая, я так думаю. – mmdanziger
Размер Warp - это аппаратное ограничение. Он не поддается изменению. –