У меня возникли проблемы с попыткой четко определить структуру моего кода CUDA. Мой код делится на две фазы: во-первых, мне нужно выполнить операции M * N, а результаты их используются в других N-операциях. Чтобы воспользоваться преимуществами CUDA, я задаюсь вопросом, можете ли вы иметь два уровня параллелизма. Во-первых, инструкция с dimGrid (N * M/dimBlock.x, N * M/dimBlock.y), а затем другая с dimGrid (N/dimBlock.x, N/dimBlock.y).Cuda: Изменение размера сетки во время выполнения
0
A
ответ
0
Да, вы можете запускать ядра с разными размерами сетки/конфигурациями на графическом процессоре. Это верно ли вы запускаете то же ядро:
dim3 dimBlock(block_x, block_y);
dim3 dimGrid1(N*M/dimBlock.x, N*M/dimBlock.y);
mykernel<<<dimGrid1, dimBlock>>>(...);
dim3 dimGrid2(N/dimBlock.x, N/dimBlock.y);
mykernel<<<dimGrid2, dimBlock>>>(...);
или разные ядра:
dim3 dimBlock(block_x, block_y);
dim3 dimGrid1(N*M/dimBlock.x, N*M/dimBlock.y);
mykernel1<<<dimGrid1, dimBlock>>>(...);
dim3 dimGrid2(N/dimBlock.x, N/dimBlock.y);
mykernel2<<<dimGrid2, dimBlock>>>(...);
Существует также то, что называется CUDA dynamic parallelism, который позволяет сделать следующее, но это требует GPU в вычислительных способность 3,5:
__global__ void kernel2(...){
...
}
__global__ void kernel1(...){
...
dim3 dimBlock(block_x, block_y);
dim3 dimGrid(N/dimBlock.x, N/dimBlock.y);
kernel2<<<dimGrid, dimBlock>>>(...);
...
}
и с динамическим параллелизмом это даже можно назвать и то же ядро рекурсивно:
__global__ void kernel1(...){
...
dim3 dimBlock(block_x, block_y);
dim3 dimGrid(N/dimBlock.x, N/dimBlock.y);
kernel1<<<dimGrid, dimBlock>>>(...);
...
}
+0
Большое спасибо за ваш быстрый ответ. Я использую TESLA C2075, поэтому я не могу использовать динамический параллелизм. – user2739435
Смежные вопросы
- 1. Изменение размера элементов сетки до размера окна во время выполнения
- 2. Изменение фона сетки во время выполнения
- 3. Изменение размера физиотерапии SpriteNode во время выполнения
- 4. Изменение размера символа [] во время выполнения
- 5. Изменение размера JPanel во время выполнения, java
- 6. Изменение размера JFrame непреднамеренно во время выполнения
- 7. Изменение размера изображения во время выполнения php
- 8. Изменение размера столбца JQGrid во время выполнения
- 9. Изменение размера массива во время выполнения
- 10. Изменение размера управления во время выполнения
- 11. Изменение размера виджета Android во время выполнения
- 12. Изменение размера карты во время выполнения
- 13. Изменение размера WinForm во время выполнения
- 14. Изменение размера DialogFragment во время выполнения
- 15. UserControl изменение размера во время выполнения
- 16. Изменение размера элементов управления во время выполнения
- 17. Автоматическое изменение размера UIButton во время выполнения.
- 18. Изменение размера стека во время выполнения
- 19. изменение размера TFrame во время выполнения
- 20. Изменение размера THREE.CubeGeometry во время выполнения
- 21. Время выполнения матрицы CUDA с изменением размера блока и сетки
- 22. Ограничения размера сетки Cuda
- 23. : непроизвольные CUDA изменение памяти во время ядер
- 24. Кендо MVC сетки набор шаблонов/изменение редактирования во время выполнения
- 25. Изменение непрозрачности сетки во время выполнения в Windows 8
- 26. Память передачи CUDA во время выполнения ядра
- 27. Изменение темы во время выполнения
- 28. Изменение Hashcode во время выполнения
- 29. Изменение appconfig во время выполнения
- 30. Изменение шрифта во время выполнения
Если «инструкция» означает «запуск ядра», вы можете запустить одно и то же ядро с разными блоками на каждую сетку и потоками на блок. – JackOLantern