Н., Пескова Е. Е., Шаманаев П. А. Основы параллельного программирования с использованием технологий mpi и openmp учебное пособие саранск издательство свмо 2013 2


 Варианты распределения работы между нитями



Pdf көрінісі
бет39/53
Дата07.06.2023
өлшемі6.58 Mb.
#474796
1   ...   35   36   37   38   39   40   41   42   ...   53
ParProg MPI OpenMP

 
3.4 Варианты распределения работы между нитями 
 
3.4.1 Низкоуровневое программирование 
 
Все нити в параллельной области нумеруются последовательными 
целыми числами от 0 до N-1, где N количество нитей, выполняющих 
данную область.
Можно программировать на самом низком уровне, распределяя 
работу 
с 
помощью 
функций 
omp_get_thread_num() 
и 
omp_get_num_threads(), возвращающих номер нити и общее количество 
порождённых нитей в текущей параллельной области, соответственно. 
Вызов функции omp_get_thread_num() позволяет нити получить 
свой уникальный номер в текущей параллельной области. 
Вызов функции omp_get_num_threads() позволяет нити получить 
количество нитей в текущей параллельной области. 
Использование 
функций 
omp_get_thread_num() 
и 
omp_get_num_threads() позволяет назначать каждой нити свой кусок кода 
для выполнения. Однако использование этого стиля программирования в 
OpenMP далеко не всегда оправдано – разработчик в этом случае должен 
явно организовывать синхронизацию доступа к общим данным [11].
Пример 3.10. 
#include 
#include 
int main()
{


60 
int count, num;
#pragma omp parallel
{
count=omp_get_num_threads();
num=omp_get_thread_num();
if (num == 0) printf("Всего нитей: %d\n", count);
else printf("Нить номер %d\n", num);
}
return 0; 
} 
В данном примере в параллельной области определен условный 
оператор, в результате выполнения которого главный поток выведет на 
экран количество нитей, а остальные потоки свой номер.


Достарыңызбен бөлісу:
1   ...   35   36   37   38   39   40   41   42   ...   53




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет