Пусть nvidia K20c использует старый способ управления потоками?

От K20 различные потоки становятся полностью параллельными (раньше они были параллельными).

Однако моей программе нужен старый способ. Или мне нужно сделать много синхронизации, чтобы решить проблему зависимости.

Можно ли переключить управление потоком на старый способ?

2 ответа

Решение

Раздел Руководства по программированию CUDA C по асинхронному току

Поток - это последовательность команд (возможно, выданных разными потоками хоста), которые выполняются по порядку. С другой стороны, разные потоки могут выполнять свои команды не по порядку относительно друг друга или одновременно; такое поведение не гарантируется и поэтому не следует полагаться на правильность (например, связь между ядрами не определена).

Если приложение полагалось на реализацию потоков Compute Capability 2.* и 3.0, тогда программа нарушает определение потоков, и любое изменение в драйвере CUDA (например, постановка в очередь запросов на поток) или новое оборудование нарушит работу программы.

Если вам нужен временный обходной путь, я бы посоветовал перенести всю работу в один определенный пользователем поток. Это может повлиять на производительность, но, вероятно, это единственный временный обходной путь.

Можете ли вы выразить зависимости ядра с cudaEvent_t объекты?

На вебинаре Streams and Concurrency показаны несколько быстрых фрагментов кода о том, как использовать события. Некоторые детали этой презентации применимы только к аппаратному обеспечению, предшествующему Кеплеру, но я предполагаю, что из первоначального вопроса вы знакомы с тем, как все изменилось со времен Fermi, когда существует несколько очередей команд.

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