Обычно ваша OpenMP-программа не знает и не заботится о том, на каких ядрах она работает.Если у вас есть система управления заданиями, которая может предоставить нужную вам информацию в своих файлах журнала.В противном случае вы могли бы, вероятно, вставить вызовы в среду внутри ваших потоков и проверить значение некоторой переменной среды.Как это называется и как вы это делаете, зависит от платформы, я оставлю это на ваше усмотрение.
Как, черт возьми, я (или любой другой SOer) должен знать?Для обоснованного предположения вы должны будете рассказать нам намного больше о вашем оборудовании, операционных системах, системе времени выполнения и т. Д. И т. Д. И т. Д. И т. Д. Лучший ответ на этот вопрос - тот, который вы определяете по своим собственным измерениям.Я боюсь, что вы также можете ошибаться, думая, что информация передается по компьютеру - переменные программирования с общей памятью обычно остаются в одном месте (или, по крайней мере, вы должны думать о том, что они находятся в одном месте, в реальности ситуация может быть намного более запутанной).но также невозможно различить) и не отправляется или не получает.
Параллельные отладчики, такие как TotalView или DDT , вероятно, являются лучшими инструментами.Я еще не использовал параллельные возможности Intel отладчика, но они выглядят многообещающими.Я оставлю это менее хорошо финансируемым программистам, чем я, чтобы рекомендовать варианты FOSS, но они есть.
i) Выберите самый быстрый параллельный алгоритм для вашей задачи.Это не обязательно самый быстрый последовательный алгоритм, выполняемый параллельно.
ii) Проверка и измерение.Вы не можете оптимизировать без данных, поэтому вы должны профилировать программу и понимать, где узкие места производительности.Не верьте никаким советам о том, что «X быстрее, чем Y».Такие заявления обычно основаны на очень узких и часто устаревших случаях и стали, по мнению их покровителей, «истинами».Почти всегда можно найти контрпримеры.Это ВАШ код, который ВЫ хотите сделать быстрее, ничто не заменит ВАШИХ расследований.
iii) Знайте свой компилятор наизнанку.Доходность (измеренная в улучшениях скорости кода) за время, потраченное на настройку параметров компиляции, намного выше, чем доходность от изменения кода «вручную».
iv) Одна из «истин»Я цепляюсь за то, что компиляторы не очень хорошо умеют оптимизировать использование иерархии памяти на современных процессорных архитектурах.Это одна из областей, где изменение кода вполне может быть целесообразным, но вы не узнаете об этом, пока не представите свой код.