August 23rd, 2007

nyaload

/showIncludes

в VC++ есть прикольная фича - Project Properties -> C++ -> Advanced -> Show Includes.
Она показывает, какие заголовки кто включает. Полезно оценить и отрубить лишние зависимости, или можно просто полюбоваться.

Замечу, что отрубив зависимость надо проверить не выросло ли у гидры include-файлов новых голов, так как стражи включения/pragma once.

Помните как в MIB 2 агент подёргал за маленькое щупальце из решётки? подёргаем за boost::array. Это далеко не самое жирное.
nyaload

OpenMP

Сегодня попытался заюзать разрекламированный OpenMP.
Типа, вставляем перед каким-нибудь циклом, тело которого можно выполнять в любом порядке, #pragma parallel for и оно работает в четыре раза быстрей на моём Core 2 Quad. Ага, щазз.

Collapse )

Ссылки:
1)MSDN -> "OpenMP in Visual C++"
2) http://www.intel.com/cd/ids/developer/emea/rus/324841.htm?page=4 - краткий обзор от intel сути, на русском языке.
3) http://www.llnl.gov/computing/tutorials/openMP/ - подробная дока по OpenMP
4) http://forum.ixbt.com/topic.cgi?id=26:36413#12 - подробное описание проблемы со сборкой дистрибутива с OpenMP и манифестами, как корректно сделать дистрибутив запускающийся на машинах без установленного VS 2005.

PS. Не используйте в библиотеках глобальные переменные для описания состояния библиотеки. Выдавайте пользователям некий HANDLE на структуру, что бы их можно было менять параллельно в нескольких потоках. Функции которые которые берут разные HANDLE должны уметь работать параллельно. Не используйте static-переменные в функциях, по этой же причине. Этого достаточно что бы сделать thread-safe библиотеку не заботясь об platform-specific функциях синхронизации.
nyaload

OpenMP, #pragma omg for

Урра, заработало. Ускорение в четыре раза, 34 секунд на экспорт вместо 120. OpenMP - куль. OpenIL обернул в критическую секцию.

( http://i10.tinypic.com/4yqosba.png )

Одна только нехорошая вещь - OpenMP отсутствует в Express редакции Visual Studio.