2010-09-06 21 views
1

Можно ли использовать разные потоки на разных мультипроцессорах? похож на процессорные ядра?Различные потоки на разных многопроцессорных устройствах

Предположим, у меня есть 2 больших массива a, b, и я хочу вычислить как сумму, так и разницу. Допустим, у меня есть 2 мультипроцессора на моем устройстве. Можно ли одновременно запускать обе функции ядра (которые вычисляют сумму и разницу) на двух разных мультипроцессорах?

ответ

2

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

Предполагая, что это невозможно по какой-либо причине, тогда, если ваши массивы очень велики, то наилучшей производительностью может быть использование всего GPU (т. Е. Нескольких многопроцессоров) для вычисления результата, и в этом случае это не имеет большого значения что вы делаете один за другим.

Для обоих вышеуказанных случаев я настоятельно рекомендую вам ознакомиться с образцом в SDK, который проведет вас через наивную реализацию до довольно быстрой версии с хорошей документацией.

Сказав все, что, если объем работ достаточно небольшой, что вы не будете полностью использовать весь GPU для одного из ваших вычислений, то есть два способа запуска различных вычислений на различных многопроцессорных системах:

  1. Используйте «Параллельные ядра», где одновременно используются несколько ядер на одном и том же графическом процессоре. Дополнительную информацию см. В Руководстве по программированию CUDA и ознакомьтесь с образцом в параллельном примере в SDK, по сути, вы сообщите планировщику, что между ними нет зависимости (используя потоки CUDA), который позволяет одновременно выполнять m.
  2. Имейте переключатель на blockIdx, чтобы выбрать, какой код выполнить.

Первый из них гораздо предпочтительнее, если ваше оборудование поддерживает его (вам понадобится Compute Capability 2.0 или выше), поскольку его гораздо проще читать и обслуживать.

+0

Спасибо. Да, я искал параллельные ядра. – r00kie

0

Да, используя устройства Fermi и несколько потоков.

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