ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
59
#ifdef DEBUG
printf(“Point 1 is reached!\n”);
printf(“My_var = %d\n”, my_var);
#endif
some_else_code();
#ifdef DEBUG
printf(“Point 2 is reached!\n”);
#endif
return 0;
}
Теперь строки с вызовами printf для компилятора не существуют.
Рекомендация.
Не создавайте и не изменяйте никаких переменных в отладоч-
ных строках. Иначе рабочая версия программы может таковой не оказаться.
Оптимизация
Практически все современные компиляторы могут оптимизировать созданный
код, используя специфичные команды процессора (например, набор инструкций
MMX или SSE). Обычно по умолчанию оптимизации не проводится. Использование
оптимизации увеличивает время компиляции программы, зато сама программа на-
чинает работать быстрее. Коэффициент «ускорения» может колебаться от несколь-
ких процентов до порядков.
В случае операционной системы Linux (или любого другого клона Unix) и
компилятора gcc (g++) компилирование программы с оптимизацией будет выгля-
деть следующим образом:
gcc –O3 –o my.out my_prog.c
Здесь ключ –O3 означает максимальный уровень оптимизации.
Реализация LAM MPI использует стандартный gcc, добавляя к нему свои биб-
лиотеки. Поэтому следующая команда будет выполнена в соответствии с нашими
ожиданиями:
mpicc –O3 –o my.out my_prog.c
Рекомендация.
Используйте оптимизацию только после того, как алгоритм
программы полностью отлажен.
Пересылка данных
При написании параллельных программ приходится пересылать данные от
одного или нескольких процессов другому (им). Эта пересылка является необходи-
мым злом. Если необходимость пересылки данных достаточно прозрачна, то причем
здесь зло? Причина кроется в том, что каждый вызов MPI_Send или MPI_Recv несет
1...,51,52,53,54,55,56,57,58,59,60 62,63,64,65,66,67,68,69,70,71,...180