Опубликован: 15.04.2008 | Доступ: свободный | Студентов: 1559 / 544 | Оценка: 4.36 / 4.02 | Длительность: 06:55:00
ISBN: 978-5-94774-857-4
Специальности: Программист
Лекция 7:

Средства автоматизированного распараллеливания программ

< Лекция 6 || Лекция 7: 1234

Специальные функции Cluster OpenMP

В Cluster OpenMP имеется целый ряд специальных функций для задания некоторых переменных окружения в процессе выполнения программы, а также для выделения и освобождения памяти в процессе работы программы и передачи сигналов. Рассмотрение этих функций начнем с рассмотрения функций задания переменных окружения и функций, информирующих об окружающей среде.

Функции

void kmp_set_warnings_on ( void )

и

void kmp_set_warnings_off ( void )

предназначены для задания режима вывода предупреждающих сообщений в процессе работы библиотеки выполнения. Первая функция устанавливает переменную окружения KMP_WARNINGS=on, а вторая - KMP_WARNINGS=off отменяет ее.

Следующая функция

omp_int_t kmp_get_process_num ( void )

возвращает номер текущего выполняемого процесса. Функция

omp_int_t kmp_num_processes ( void )

возвращает общее число потоков в текущий момент времени. Следующая функция

omp_int_t kmp_get_process_thread_num ( void )

возвращает номер текущего потока в выполняемом процессе.

Теперь перейдем к рассмотрению функций передачи сигналов в Cluster OpenMP. Всего таких функций шесть.

Первая функция

void kmp_lock_cond_wait ( omp_lock_t *lock )

предназначена для приостановки выполнения процесса, содержащего данный оператор, до момента разблокировки объекта, блокировка которого установлена переменной lock.

Вторая функция

void kmp_lock_cond_signal ( omp_lock_t *lock )

посылает сигнал о блокировке объекта, установленной с помощью переменной lock.

Третья функция

void kmp_lock_cond_broadcast ( omp_lock_t *lock )

рассылает всем процессам сигнал о блокировке объекта, установленной с помощью переменной lock.

Четвертая функция

void kmp_nest_lock_cond_wait ( omp_nest_lock_t *lock )

предназначена для приостановки выполнения процесса, содержащего данный оператор, до момента разблокировки объекта, вложенная блокировка которого установлена переменной lock.

Пятая функция

void kmp_nest_lock_cond_signal ( omp_nest_lock_t *lock )

посылает сигнал о вложенной блокировке объекта, установленной с помощью переменной lock.

Наконец, шестая функция

void kmp_nest_lock_cond_broadcast ( omp_nest_lock_t *lock )

рассылает всем процессам сигнал о вложенной блокировке объекта, установленной с помощью переменной lock.

Для работы с памятью в Cluster OpenMP имеется девять специальных функций. Далее рассмотрим эти функции.

Функция

void *kmp_sharable_malloc ( size_t size )

предназначена для выделения динамической, общей для всех узлов кластера памяти. Объем выделяемой памяти определяется значением переменной size.

Следующая функция

void *kmp_aligned_sharable_malloc ( size_t size )

предназначена для выделения динамической, общей для всех узлов кластера памяти. Это выделение осуществляется с выравниванием по границе страницы памяти. Объем выделяемой памяти определяется значением переменной size.

Функция

void *kmp_sharable_сalloc ( size_t n, size_t size )

предназначена для выделения в динамической, общей для всех узлов кластера памяти места под массив из n элементов размера size. При этом все элементы этого массива заполняются нулями.

Еще одна функция

void *kmp_sharable_reсalloc ( void *ptr, size_t size )

предназначена для переинициализации выделения места в динамической, общей для всех узлов кластера памяти под массив размера size. Адрес этого места определяется указателем *ptr. При этом все элементы этого массива заполняются нулями.

Функция

void *kmp_sharable_free ( void *ptr )

предназначена для освобождения в динамической, общей для всех узлов кластера памяти раздела, определенного указателем *ptr.

Следующие функции

void *kmp_private_mmap (char *file,size_t *len,void **addr)

и

void *kmp_private_munmap ( void *start )

предназначены для отображения файлов в области индивидуальной адресной памяти процессов, начиная с одного и того же адреса. Первая функция kmp_private_mmap отображает file длиной len байт в память, начиная с адреса addr. Вторая функция kmp_private_munmap удаляет все отображения из заданной области памяти с начальным адресом start, после чего все ссылки на данную область будут вызывать ошибку "неправильное обращение к памяти". Отображение удаляется автоматически при завершении процесса. Однако закрытие файла не приводит к снятию отображения. Эти функции возвращают 0 в случае успешного завершения и -1 в противном случае. Отметим, что их можно применять только в последовательной области программы. В параллельной области они не поддерживаются. Кроме того, эти две функции имеют тип read-only, т.е. после удаления отображения с помощью второй функции содержимое файла не обновляется содержимым области памяти.

Функции

void *kmp_sharable_mmap ( char *file, size_t *len, void **addr )

и

void *kmp_sharable_munmap ( void *start )

предназначены для отображения файлов в области адресной памяти главного процесса, начиная с одного и того же адреса. Первая функция kmp_sharable_mmap отображает file длиной len байт в память, начиная с адреса addr. Вторая функция kmp_sharable_munmap удаляет все отображения из заданной области памяти с начальным адресом start, после чего все ссылки на данную область будут вызывать ошибку "неправильное обращение к памяти". Отображение удаляется автоматически при завершении процесса. Функции возвращают 0 в случае успешного завершения и - 1 в противном случае. Эти две функции имеют тип read-write, т. е. после удаления отображения с помощью второй функции содержимое файла обновляется содержимым области памяти. Отметим также, что их можно применять только в последовательной области программы. В параллельной области их использовать нельзя.

< Лекция 6 || Лекция 7: 1234