Инструменты тестирования параллельного алгоритма для тестирования на многоядерных процессорах x86 - PullRequest
2 голосов
/ 24 апреля 2011

Мы хотим создать лабораторию тестирования параллельных алгоритмов для многоядерных процессоров x86, и мы хотим знать, есть ли какие-либо предложения о том, как это сделать. Мы хотим, чтобы это давало нам сообщения как можно более детерминированные, поэтому мы исследовали несколько возможностей:

  • OS
  • Язык программирования
    • Низкий уровень: Ассемблер или C (это только 2 возможности, если используется BareMetal)
    • Высокий уровень: RT Python или RT Java

Мы думаем, что наиболее детерминированным вариантом будет BareMetal OS с Ассемблером, но если мы можем использовать языки более высокого уровня без значительного ухудшения результатов, мы бы предпочли это. Любые предложения о том, как получить наилучшие результаты при сохранении производительности программирования?

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 мая 2011

Я много тестировал параллельные программы для своей диссертации.Создал большой набор параллельных рабочих нагрузок и запустил его на реальных компьютерах с архитектурой x86 для измерения производительности.У меня такое ощущение, что вы выбираете язык для обучения параллельному программированию - если бы это было так, я бы просто пошел с Си и ассемблером.Сборка является слишком низким уровнем для многих элементов, но это ответ на запись для объяснения примитивов синхронизации.Я написал свои собственные потоковые примитивы в сборке, и это был полезный опыт.

Я могу ошибаться, но я думаю, что @Gabe прав насчет потоков Python, работающих на одном и том же ядре.

Я не согласен с @powerrox, что MPI - хорошая идея.Я однако люблю открытый депутат.Мои ученики всегда начинали с pthreads, а затем переходили на OpenMP.pthreads обеспечивает понимание того, что происходит внутри, а затем OpenMP обеспечивает элегантное и чистое кодирование без необходимости иметь дело с pthread (void **) (void *).

1 голос
/ 06 мая 2011

Самый популярный способ обеспечения наиболее продуктивной параллельной обработки в нескольких системах - это MPI.

Если вы говорите только о многоядерной, многоядерной однопроцессорной системе, использующей общую память, ориентируйтесь на OpenMP и pThreads. Честное предупреждение, плохо написанный OpenMP или pThreads не масштабируется. Программирование pThread может быть очень сложным.

OpenMP хорошо подходит для задач декомпозиции домена. pThreads - единственный вариант для декомпозиции задач. Новая спецификация OpenMP может поддерживать декомпозицию задач.

А если вы хотите использовать ассемблер для параллельного программирования - удачи вам. не может быть сделано продуктивно.

И Гейб, python поддерживает несколько потоков. И потоки могут работать на нескольких ядрах и не ограничивают выбор структур данных в любом случае. Вы МОЖЕТЕ использовать python с потоками для распределения работы между несколькими потоками, которые работают на нескольких ядрах.

Я бы очень осторожно отнесся к комментариям Гейба. На мой взгляд, его комментарии очень вводят в заблуждение.

...