Несколько потоков запуск отдельных ядер CUDA и
для моей разработки CUDA я использую машину с 16 ядрами и 1 GTX 580 GPU с 16 SMs. Для работы, которую я делаю, я планирую запустить 16 хост-потоков (1 на каждом ядре) и 1 запуск ядра на поток, каждый с 1 блоком и 1024 потоками. Моя цель-запустить 16 ядер параллельно на 16 SMs. Возможно ли это/осуществимо?
Я попытался прочитать как можно больше о независимых контекстах, но, похоже, не слишком много информации доступно. Как я понимаю это, каждый поток хоста может иметь свой собственный контекст GPU. Но я не уверен, будут ли ядра работать параллельно, если я использую независимые контексты.
Я могу прочитать все данные из всех 16 хост-потоков в одну гигантскую структуру и передать ее GPU для запуска одного ядра. Тем не менее, это будет слишком много копирования, и это замедлит работу приложения.
2 ответов
хотя многопоточное приложение может содержать несколько контекстов CUDA одновременно на одном GPU, эти контексты не могут выполнять операции одновременно. При активном использовании каждый контекст использует только GPU и должен уступить другому контексту (который может включать операции с API рендеринга или дисплейным менеджером) доступ к GPU.
таким образом, одним словом, эта стратегия не может работать с любыми текущими версиями CUDA или оборудованием.
вы можете иметь только один контекст на GPU одновременно. Одним из способов достижения требуемого параллелизма было бы использование потоков CUDA. Вы можете создать 16 потоков внутри контекста и запустить memcopies и ядра в потоки по имени. Вы можете прочитать больше в быстром вебинаре по использованию потоков по адресу:http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf. Полная ссылка на API содержится в руководствах CUDA toolkit. Вес 4.2 руководство доступно в http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_Toolkit_Reference_Manual.pdf.