Средства автоматизированного распараллеливания программ
Специальные функции 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, т. е. после удаления отображения с помощью второй функции содержимое файла обновляется содержимым области памяти. Отметим также, что их можно применять только в последовательной области программы. В параллельной области их использовать нельзя.