Как разгрузить конкретный поток одного приложения на конкретные ядра Xeon Phi?

Предположим, у меня на хосте запущено одно приложение c / c ++. на центральном процессоре работает несколько потоков, а на ядрах Xeon Phi — 50 потоков.

Как я могу убедиться, что каждый из этих 50 работает на своем собственном ядре Xeon Phi и никогда не удаляется из кеша ядра (учитывая, что код достаточно мал).

Может кто-нибудь, пожалуйста, обрисовать в общих чертах общую идею, как это сделать и какой инструмент / API будет более подходящим (для кода C / C ++)?

Какой самый быстрый способ обмена данными между хост-потоком-агрегатором и потоками 50 Phi?

Учитывая, что фактический параллелизм будет очень ограничен — это приложение будет больше похоже на приложение с плоскостью 51 потока с некоторой базовой многопоточной синхронизацией данных.

Могу ли я использовать обычный компилятор C / C ++ для создания такого приложения?

0

Решение

Вы подняли несколько вопросов:

  1. Да, вы можете использовать обычную программу на C и скомпилировать ее, используя обычные компиляторы Intel C / C ++ / Fortran (известный как Intel Composer XE), чтобы генерировать двоичные файлы, работающие на сопроцессоре Intel Xeon Phi в «родном» / «симметричном» или «разгрузочном» режимах. В простейшем случае — вы просто перекомпилируете свою программу на C / C ++ с -mmic и запускаете ее «изначально» на Phi «как есть».

  2. Какой API использовать? использование OpenMP4.0 стандартный или Intel Cilk Plus модели программирования (на самом деле набор прагм или ключевых слов, применимых к C / C ++). OpenCL, Intel TBB и, вероятно, OpenACC также возможны, но OpenMP и Cilk Plus имеют возможность выражать многопоточность, векторизацию и разгрузку (т. Е. 3 вещи, необходимые для программирования на Xeon Phi) без ре-факторинга или переписывания «обычной C / C ++ / Fortran» программы. ,

  3. Закрепление темы: может быть достигнуто через OpenMP сродство (см. более подробную информацию о MIC_KMP_AFFINITY ниже) или о сходстве Intel TBB.

  4. Самый быстрый способ обмена данными между хостом и целевым Phi — это .. избегать любого обмена, используя, например, симметричный подход MPI. Тем не менее, вы, кажется, спрашиваете о «разгрузке» модели программирования, поэтому асинхронная разгрузка Вы можете достичь наилучшей производительности. В то же время синхронный offload теоретически проще с точки зрения программирования, но хуже с точки зрения достижимой производительности.

В целом, вы склонны задавать несколько общих вопросов, поэтому я бы порекомендовал начать с самого начала, т. Е. Посмотреть на следующие ~ 10 страниц доктора Доббса. руководство или учитывая Intel вводный документ.


Закрепление тем — это более сложная тема, и в то же время она кажется «наиболее интересной» для вас, поэтому я объясню подробнее:

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]