2016-12-28 1 views
-2

В Quiz: Thread и блоки «Вступление к параллельному программированию» в Udacity задается вопрос, является ли утверждение «Все потоки, которые выполняются на заданном SM , могут сотрудничать для решения проблемы» - это истина или ложь. Ответ неверен, но я думаю, что это должно быть правдой, потому что:Является ли утверждение «Все потоки, которые работают на заданном SM, могут взаимодействовать» true или false?

  • Он использует «может», а не «должен».
  • В некоторых документах речь идет о межблочном обмене графическими процессорами.

Есть ли у меня какое-либо недоразумение?

ответ

4

Это не так во всех случаях.

В типичном смысле взаимодействующих потоков CUDA взаимодействующие потоки должны принадлежать одному и тому же блоку (чтобы иметь возможность использовать кооперативные механизмы, такие как __syncthreads() и __shared__).

Однако SM может содержать несколько блоков, выполняемых одновременно.

Резьбы отдельных блоков, даже если они находятся на одном и том же SM, не могут взаимодействовать, в типичном смысле CUDA слова «взаимодействующие потоки».

+0

В статье предложена http://synergy.cs.vt.edu/pubs/papers/xiao-ipdps2010-gpusync.pdf между блоком ГПУ связи. Кажется, что в некоторых случаях «все потоки, которые работают на данном SM, могут взаимодействовать, чтобы решить проблему», не так ли? –

+0

Я определил, что я подразумеваю под взаимодействующие потоки. Я думаю, что это широко используемое определение потоков CUDA. Согласно моему определению, я считаю, что мой ответ правильный, и цитированная вами статья не позволяет потокам от отдельных блоков связываться, например. через память '__shared__', поэтому я не думаю, что ваш документ имеет какое-либо отношение к определению, которое я дал. Все потоки могут связываться друг с другом через глобальную память (даже без вашей бумаги), поэтому альтернативное определение может соответствовать вашей точке зрения. Я не согласен, что это правильно для общепринятого определения «взаимодействующих потоков» в CUDA –

Смежные вопросы