Поделиться через


Е. Поведения, определяемые реализацией, в OpenMP C/C++

В этом приложении приведены сведения о поведении, описываемых как "реализация, определенная" в этом API. Каждое поведение перекрестно ссылается на его описание в основной спецификации.

Замечания

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

  • Количество потоков: если возникает параллельная область при динамической корректировке числа потоков, а количество потоков, запрошенных для параллельного региона, превышает число, которое может предоставить система времени выполнения, поведение программы определяется реализацией (см. страницу 9).

    В Visual C++для не вложенного параллельного региона будут предоставлены 64 потока (максимум).

  • Количество процессоров: количество физических процессоров, на самом деле размещая потоки в любое время, определяется реализацией (см. страницу 10).

    В Visual C++этот номер не является константой и управляется операционной системой.

  • Создание групп потоков: количество потоков в команде, выполняющей вложенный параллельный регион, определяется реализацией (см. страницу 10).

    В Visual C++это число определяется операционной системой.

  • schedule(runtime): решение о планировании откладывается до времени выполнения. Тип расписания и размер блока можно выбрать во время выполнения, задав OMP_SCHEDULE переменную среды. Если эта переменная среды не задана, итоговое расписание определяется реализацией (см. страницу 13).

    В Visual C++тип расписания не имеет static размера блока.

  • Планирование по умолчанию: при отсутствии предложения расписания расписание по умолчанию определяется реализацией (см. страницу 13).

    В Visual C++тип расписания по умолчанию не имеет static размера блока.

  • ATOMIC: определяется ли реализация, заменяет ли реализация все директивы atomic директивами с одинаковым critical уникальным именем (см. страницу 20).

    В Visual C++, если данные, измененные атомарным, не соответствуют естественному выравниванию или если это один или два байта длинней, все атомарные операции, удовлетворяющие данному свойству, будут использовать один критически важный раздел. В противном случае критические разделы не будут использоваться.

  • omp_get_num_threads. Если число потоков не было явно задано пользователем, значение по умолчанию определяется реализацией (см. страницу 9).

    В Visual C++число потоков по умолчанию равно количеству процессоров.

  • omp_set_dynamic. Значение по умолчанию для динамической корректировки потока определяется реализацией.

    В Visual C++используется FALSEзначение по умолчанию.

  • omp_set_nested. Если включен вложенный параллелизм, определяется количество потоков, используемых для выполнения вложенных параллельных регионов.

    В Visual C++число потоков определяется операционной системой.

  • OMP_SCHEDULE переменная среды: значение по умолчанию для этой переменной среды определяется реализацией.

    В Visual C++тип расписания не имеет static размера блока.

  • OMP_NUM_THREADS переменная среды: если для переменной среды не задано OMP_NUM_THREADS значение или если указанное значение не является положительным целым числом, или если значение больше максимального количества потоков, которые система может поддерживать, то число используемых потоков определяется реализацией.

    В Visual C++, если указанное значение равно нулю или меньше, число потоков равно числу процессоров. Если значение больше 64, число потоков равно 64.

  • OMP_DYNAMIC переменная среды: значение по умолчанию определяется реализацией.

    В Visual C++используется FALSEзначение по умолчанию.