Показаны сообщения с ярлыком programming. Показать все сообщения
Показаны сообщения с ярлыком programming. Показать все сообщения

среда, 30 июня 2010 г.

Установка и использование OpenMPI

Для быстрой отладки небольших MPI программ можно прямо на домашнюю Windows-машину поставить реализацию MPI. Например, OpenMPI.

В принципе, это не сложно:
1. Берем OpenMPI с http://www.open-mpi.org/
2. Для компиляции потребуется CMake - качается с cmake.org. Заморачиваться со сборками не стоит, сразу берем версию с GUI.
3.Разбираемся с CMake. Все, что мне пришлось сделать - нажать на Configure и сказать, какая версия Visual Studio у меня стоит, CMake сама ее нашла и прописала себе все пути. Также нужно указать, где лежат сорцы - это [путь к папке, куда скачали архив с openmpi]/openmpi-1.4.2 (кстати, вот этот момент не очень четко описан в документации).
4. Дальше компиляция - надо получить Visual Studio solution, в котором в районе 10 проектов. Занимает это в районе получаса (ну, чай попить точно успеешь).
5. Получили solution, открываем его в VS, делаем build. В Debug (я дебаг-версию делал)
создается куча файлов.

Все, OpenMPI готов к употреблению.

Что теперь, как на создавать MPI-приложения? Понятное дело, нужно инклюдить mpi.h. Он есть в поставке OpenMPI, нужно только переложить его туда, где Студия его увидит.
Еще я прикомпилил libmpid.dll (d в конце - от debug, сделал бы release - было б просто
libmpi.dll) и libmpi_cxxd.dll (возможна, последняя и не нужна или нужна в особых случаях - вроде, символы из нее не грузятся). Делается это путем включения в проект соответствующих экспортных lib.

Все, собрали свой проект - например, test.

Дальше можно сделать так - положить готовый test.exe в отдельную папку. Там же должны находиться: mpirun.exe, libmpid.dll, libopen_pald.dll, libopen_rted.dll (я еще соответствующие lib положил, но, видимо, и без них можно). Запускать так: mpirun test.exe.

Пока не решил проблему отсутствия хелпа. Например, если написать просто test, то mpirun его не найдет и напишет:

Sorry! You were supposed to get help about:
orterun:exe-not-found
But I couldn't open the help file:
[путь]\openmpi-1.4.2\installed\share\openmpi\help-
orterun.txt: No such file or directory. Sorry!

Вот такой он вежливый. А хелп куда дел?

среда, 9 декабря 2009 г.

Mixed-language programming

Мне, это, кажется в ближайшее время не понадобится, но:

вот хорошая статья про создание прог на нескольких языках. Кратко:

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

1. Соглашение о вызовах. В Fortran параметры очищаются из стека вызываемой функцией. В С - вызывающей прогой. Плюс аргументы запихиваются в стек в разном порядке: в С - начиная с последнего, в Fortran - с первого.

Неудобно, короче. Но в С есть возможность организовать вызов функции и так и так: с помощью _cdecl - по-сишному, с помощью _stdcall - по-фортрановски.

2.Передача параметров. В Fortran - по ссылке.

3. Передача строк. !!. Строка в С заканчивается \0. А в Fortran - нет, вместо этого в функцию неявно передается длина строки.

4. Массивы в Си нумеруются с 0, в Фортране - с 1. Матрицы (2-мер массивы) в Си хранятся по строкам, в Fortran - по столбцам.

Помянутая статья помогает разобраться с 1-3. С п.4 можно справиться своими силами.

вторник, 13 октября 2009 г.

Одноразовый PATH

Нашел интересный bat-файл, который настраивает переменную окружения на один сеанс работы с командной строкой:
SET QTDIR=<QTDIR>
SET MINGWDIR=<MINGWDIR>

SET PATH=%QTDIR%\bin;%MINGWDIR%\bin;%SystemRoot%\System32

cmd.exe


пятница, 14 августа 2009 г.

Юзаешь dll - сделай import library

Usage of DLL libraries require the generation of import libraries in order for them to be called from C/C++ programs in Visual Studio. This is actually quite simple:
  • Use the dumpbin tool provided with Visual Studio to extract the functions exported from the DLL (dumpbin /EXPORTS xxx.dll > xxx.def).
  • Strip this list, so that it only contains the names for the exported functions; one on each line. Let the first line contain the word EXPORTS.
  • Function names can be renamed to account to different naming convensions by writing importname=dllname (e.g. sgemv=sgemv_).
  • Use the lib tool to generate import libraries (lib /def:xxx.def /MACHINE:IX86 /out:xxx.lib).
More details can be found in Microsoft KB131313, and Stdcall and DLL tools of MSVC and MinGW.

[нашел в интернете]

среда, 8 июля 2009 г.

Выравнивание

Определим структуру struct S {char a; bool b; int c}. Считаем, что sizeof(a) = sizeof(b) = 1, sizeof(c) = 4. Что выдаст sizeof(S)?

Может быть, 6? Не-а! Восемь. Все из-за выравнивания. Если считать, что поле a размещается по адресу 0, то с - по адресу 2 (по логике). Но процессору удобнее, если слова (word) расоплагаются по четным адресам, а int - по адресам, кратным 4. Т.е. поле с будет сдвинуто, память между b и с будет забита мусором.