Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Судаков / Лекции / lec19_razrab.ppt
Скачиваний:
19
Добавлен:
20.03.2015
Размер:
201.73 Кб
Скачать

Средства отладки

Отладчики кода

Gdb, idb,

Почти все поддерживают многопоточность

Для распределенных программ необходимо запускать на нескольких машинах

Проверка кода

Позволяют установить возможные проблемы

Deadlock

Race

Intel thread checker

Средства оптимизации

Профилировщики

Сбор информации о процессе выполнения программы

Время выполнения каждой функции

Частота обращения к данным

Определение самых проблемных участков

Gprof

Net wampir – профилировщик для MPI программ

Оптимизаторы кода

Компиляторы с оптимизацией исполняемого кода

Оптимизаторы исходного кода

adaptor

Параллельные математические библиотеки

BLAS – basic linear algebra software

ATLAS – auto-tuning linear algebra software

SCALAPACK – параллельные библиотеки линейной алгебры

MKL – оптимизированные библиотеки для intel

Интерфейс операционных систем

Стандарт POSIX – portable operation system interface

Функции создания и работы с процессами

Функции работы с потоками

Функции работы с файлами

Функции работы с общей памятью

Функции взаимодействия по сети

Функции включены в стандартную библиотеку функций libc

Работа с процессами

Создание процессов

int fork() – создание копии программы

Для родительского процесса возвращается номер порожденного процесса

Для порожденного процесса возвращается 0

Выполнение программ

int execlp(const char *file, const char *arg, ...)

выполнение другой программы в контексте текущего процесса

Функция не возвращается, если не произошло ошибки

Пример fork

// fork.c

#include <unistd.h>

#include <stdio.h>

int main() {

int child = 0;

//до этого места была одна программа switch ( child = fork() ){

// две копии одной программы

case 0: //порожденный процесс попадает сюда printf("I am child\n");

break;

default: //родительскийпроцесс попадает сюда printf("I am parent, child pid=%d\n",child); break;

}

//здесь работают обе программы return 0;

}

Пример fork.c

[saa@cluster processes]$ gcc ./fork.c [saa@cluster processes]$ ./a.out

I am parent, child pid=26083 I am child

[saa@cluster processes]$

Пример Exec

// exec.c

#include <unistd.h>

#include <stdio.h>

int main() {

int child = 0;

//до этого места была одна программа switch ( child = fork() ){

// две копии одной программы

case 0: //порожденный процесс попадает сюда printf("I am child , executing ps\n"); execlp("ps","ps", NULL);

break;

default: //родительскийпроцесс попадает сюда printf("I am parent, child pid=%d\n",child); break;

}

//здесь работают обе программы return 0;

}

Пример exec

[saa@cluster processes]$ gcc ./exec.c [saa@cluster processes]$ ./a.out

I am parent, child pid=26206 I am child, executing ps [saa@cluster processes]$

PID TTY

TIME CMD

20979 pts/9

00:00:00 bash

26118 pts/9

00:00:00 vim

26206 pts/9

00:00:00 ps

Наследование открытых файлов

После вызова fork() порожденный процесс по умолчанию наследует открытые родителем файлы

После вызова exec() новая программа наследует открытые файлы

Возможность перенаправления ввода/вывода

Соседние файлы в папке Лекции