OpenMP и разные компиляторы.
От: nen777w  
Дата: 28.01.17 14:55
Оценка:
Добрый час.
Совсем недавно начал изучать и применять OpenMP.
Все хорошо, но тут же столкнулся с некоторыми проблемами.
Во превых у MSVC 2015 компилятор не все поддерживает, наверно версия не 4.0.
Во воторых оно в статике не линкуется и требует тащить за собой dll библиотеку.

Вероятно, вряд ли, но спрошу, существует ли возможность подключить внешнюю реализацию OpenMP?
И что в итоге лучше, по производительности, записать распаралеливание руками или использовать OpenMP?
Re: OpenMP и разные компиляторы.
От: watchmaker  
Дата: 28.01.17 16:39
Оценка: 4 (1) +3
Здравствуйте, nen777w, Вы писали:


N>Вероятно, вряд ли, но спрошу, существует ли возможность подключить внешнюю реализацию OpenMP?

OpenMP так хорош именно из-за того, что он реализован не отдельной библиотекой, а интегрирован внутрь компилятора. Единственный способ взять другую реализацию OpenMP — взять другой компилятор.
N>Во воторых оно в статике не линкуется и требует тащить за собой dll библиотеку.
Бывают такие особенности реализации. Ну и нужно понимать, что в этой библиотеке совсем не весь OpenMP находится, а лишь какая-то часть runtime поддержки. Основная и самая сложная часть зашита в компиляторе. То есть сменой dll ничего не добиться.

N>И что в итоге лучше, по производительности, записать распаралеливание руками или использовать OpenMP?

Не очень хороший вопрос. Всё равно что спросить, стоит ли продолжать писать на C++ или лучше для производительности переписать всё руками на ассемблере :)

OpenMP позволяет очень просто писать параллельные программы в своей области. И накладные расходы там небольшие. Если задача хорошо ложится на соответствующую модель вычислений, то OpenMP — отличный выбор. Руками переписать можно, но обычно время лучше потратить на что-то более полезное.

Если же задача не ложится на модель вычислений OpenMP, то вопрос про использование просто не встаёт: придётся использовать что-то другое.
Re[2]: OpenMP и разные компиляторы.
От: Serpuh фотомер.рф
Дата: 30.01.17 09:36
Оценка: +1
Здравствуйте, watchmaker, Вы писали:
W>OpenMP позволяет очень просто писать параллельные программы в своей области. И накладные расходы там небольшие. Если задача хорошо ложится на соответствующую модель вычислений, то OpenMP — отличный выбор. Руками переписать можно, но обычно время лучше потратить на что-то более полезное.

А с std::thread не сравнивали? OpenMP типа черного ящика, не совсем понятно как он распараллеливает, а с std::thread все наглядно и в общем просто.
Re: OpenMP и разные компиляторы.
От: Serpuh фотомер.рф
Дата: 01.02.17 08:50
Оценка: :)
Здравствуйте, nen777w, Вы писали:
N>Совсем недавно начал изучать и применять OpenMP.

Сейчас посмотрел, есть обычный цикл перебора, OpenMP как-то вяло ядра грузит, std::thread сразу все ядра на 90% загружает.
Re: OpenMP и разные компиляторы.
От: Evgeny.Panasyuk Россия  
Дата: 01.02.17 08:56
Оценка: 6 (1)
Здравствуйте, nen777w, Вы писали:

N>И что в итоге лучше, по производительности, записать распаралеливание руками или использовать OpenMP?


Если у тебя C++ (а тем более если >=C++11), а не C, то лучше взять библиотеку разряда Intel TBB.
Re[3]: OpenMP и разные компиляторы.
От: Evgeny.Panasyuk Россия  
Дата: 01.02.17 09:15
Оценка: +2
Здравствуйте, Serpuh, Вы писали:

S>А с std::thread не сравнивали?


std::thread это низкоуровневый примитив. OpenMP, а тем более TBB/PPL/AMP — высокоуровневые абстракции (в которых под капотом те же самые низкоуровневые потоки).

S>OpenMP типа черного ящика, не совсем понятно как он распараллеливает,


У этого чёрного ящика есть вполне конкретная RTFMспецификация.

S>а с std::thread все наглядно и в общем просто.


сарказм: Да ладно наглядно, там под капотом настоящая МАГИЯ со std::invoke и прочим, а вот с pthread_create и CreateThread "всё наглядно и в общем просто"
Re[4]: OpenMP и разные компиляторы.
От: _hum_ Беларусь  
Дата: 02.02.17 06:25
Оценка:
Evgeny.Panasyuk, правильно ли я понимаю — с началом поддержки в языке /parallelism необходимость в использовании средств наподобие OpenMP отпадет?
Re[5]: OpenMP и разные компиляторы.
От: Evgeny.Panasyuk Россия  
Дата: 02.02.17 11:45
Оценка:
Здравствуйте, _hum_, Вы писали:

__>Evgeny.Panasyuk, правильно ли я понимаю — с началом поддержки в языке /parallelism необходимость в использовании средств наподобие OpenMP отпадет?


Для реализации более-менее удобного аналога OpenMP в библиотечном виде достаточно ФВП, которые были уже в C++98. Собственно Intel TBB уже больше десяти лет.
При наличии же лямбд/замыканий, а тем более если они полиморфные — городить все эти чуждые для C++ pragma-based костыли действительно нет необходимости. Тем более что они например плохо уживаются с исключениями, точнее их проброс нужно лисапедить вручную, в то время как в библиотеках уровня TBB обычно всё уже разруленно.

__>необходимость в использовании средств наподобие OpenMP отпадет?


Его может использовать какая-нибудь сторонняя зависимость. Да и для C и Fortran'а он остаётся актуальным.
Re[2]: OpenMP и разные компиляторы.
От: AlexGin Беларусь  
Дата: 09.02.17 17:10
Оценка:
Здравствуйте, Serpuh, Вы писали:

S>Здравствуйте, nen777w, Вы писали:

N>>Совсем недавно начал изучать и применять OpenMP.

S>Сейчас посмотрел, есть обычный цикл перебора, OpenMP как-то вяло ядра грузит, std::thread сразу все ядра на 90% загружает.

Допускаю, что это скорее недостаток std::thread, нежели достоинство.
Вероятно, в данном случае std::thread не даёт вовремя "sleep", чтобы разрешить работу на параллельном потоке/потоках.
Отредактировано 09.02.2017 17:12 AlexGin . Предыдущая версия .
Re[2]: OpenMP и разные компиляторы.
От: nen777w  
Дата: 09.02.17 17:33
Оценка:
N>>И что в итоге лучше, по производительности, записать распаралеливание руками или использовать OpenMP?
EP>Если у тебя C++ (а тем более если >=C++11), а не C, то лучше взять библиотеку разряда Intel TBB.

А она бесплатная? У Intel всегда все хорошо, но за деньги
А как OSX, Linux ?
Re[3]: OpenMP и разные компиляторы.
От: Evgeny.Panasyuk Россия  
Дата: 09.02.17 20:26
Оценка: 4 (1)
Здравствуйте, nen777w, Вы писали:

N>>>И что в итоге лучше, по производительности, записать распаралеливание руками или использовать OpenMP?

EP>>Если у тебя C++ (а тем более если >=C++11), а не C, то лучше взять библиотеку разряда Intel TBB.
N>А она бесплатная? У Intel всегда все хорошо, но за деньги

У неё две лицензии — коммерческая и бесплатная Apache v2.0 (раньше была GPL). Обе можно использовать в коммерческих приложениях. Коммерческая лицензия даёт какую-то поддержку.

https://www.threadingbuildingblocks.org/faq/10

Why is Intel® TBB licensed under Apache v2.0?

Intel® TBB is always committed to the needs of its customers and we want to encourage our customers to create successful commercial products using Intel TBB. Hence the move to a more permissive style Apache license that is conducive to commercial development and proprietary redistribution. The Apache License (ASL) is a permissive free software license written by the Apache Software Foundation (ASF). The Apache License requires preservation of the copyright notice and disclaimer. Like other free software licenses, the license allows the user of the software the freedom to use the software for any purpose, to distribute it, to modify it, and to distribute modified versions of the software, under the terms of the license, without concern for royalties. For complete descriptions please visit the official Apache website for more information on Apache v2.0.


N>А как OSX, Linux ?


Да, TBB кроссплатформенная, даже есть в некоторых стандартных репозиториях.
Re[3]: OpenMP и разные компиляторы.
От: Serpuh фотомер.рф
Дата: 10.02.17 13:55
Оценка:
Здравствуйте, AlexGin, Вы писали:
S>>Сейчас посмотрел, есть обычный цикл перебора, OpenMP как-то вяло ядра грузит, std::thread сразу все ядра на 90% загружает.
AG>Допускаю, что это скорее недостаток std::thread, нежели достоинство.

Все доступные потоки это я сказал загрузить для ускорения расчета, а так конечно можно не все потоки задействовать.
Re[4]: OpenMP и разные компиляторы.
От: nen777w  
Дата: 13.02.17 11:06
Оценка:
EP>У неё две лицензии — коммерческая и бесплатная Apache v2.0 (раньше была GPL). Обе можно использовать в коммерческих приложениях. Коммерческая лицензия даёт какую-то поддержку.
EP>[q]
EP>https://www.threadingbuildingblocks.org/faq/10

N>>А как OSX, Linux ?

EP>Да, TBB кроссплатформенная, даже есть в некоторых стандартных репозиториях.

Круто, спасибо!
Могли бы меня отправить на свидание с гуглом, но тем не менее... Спасибо еще раз!
Re: OpenMP и разные компиляторы.
От: Константин Черногория  
Дата: 07.03.17 16:24
Оценка:
Здравствуйте, nen777w, Вы писали:

N>оно в статике не линкуется и требует тащить за собой dll библиотеку.


Эта DLL библиотека не имеет зависимостей, и её не нужно (и даже вредно т.к. оно поставит в system32) ставить официальным путём через merge module, а достаточно просто положить рядом с .exe.

Тестировал на Win7 SP0 и выше.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.