4. Ortam değişkenleri
Bu bölümde, paralel kodun yürütülmesini denetleyan OpenMP C ve C++ API ortam değişkenleri (veya benzer platforma özgü mekanizmalar) açıklanmaktadır. Ortam değişkenlerinin adları büyük harf olmalıdır. Bunlara atanan değerler büyük/küçük harfe duyarlı değildir ve baştaki ve sondaki boşluklara sahip olabilir. Program başlatıldıktan sonra değerlerde yapılan değişiklikler yoksayılır.
Ortam değişkenleri aşağıdaki gibidir:
- OMP_SCHEDULE, çalışma zamanı zamanlama türünü ve öbek boyutunu ayarlar.
- OMP_NUM_THREADS yürütme sırasında kullanılacak iş parçacığı sayısını ayarlar.
- OMP_DYNAMIC, iş parçacığı sayısının dinamik olarak ayarlanmasını etkinleştirir veya devre dışı bırakır.
- OMP_NESTED iç içe paralelliği etkinleştirir veya devre dışı bırakır.
Bu bölümdeki örnekler yalnızca bu değişkenlerin Unix C kabuğu (csh) ortamlarında nasıl ayarlanabileceğini gösterir. Korn kabuğu ve DOS ortamlarında eylemler benzerdir:
csh:
setenv OMP_SCHEDULE "dynamic"
Ksh:
export OMP_SCHEDULE="dynamic"
DOS:
set OMP_SCHEDULE="dynamic"
4.1 OMP_SCHEDULE
OMP_SCHEDULE
yalnızca zamanlama türüne runtime
sahip ve parallel for
yönergeleri için for
geçerlidir. Bu tür döngülerin tümü için zamanlama türü ve öbek boyutu çalışma zamanında ayarlanabilir. Bu ortam değişkenini tanınan herhangi bir zamanlama türüne ve isteğe bağlı bir chunk_size olarak ayarlayın.
dışında for
bir zamanlama türü runtime
OMP_SCHEDULE
olan ve parallel for
yönergeleri yoksayılır. Bu ortam değişkeni için varsayılan değer uygulama tanımlıdır. İsteğe bağlı chunk_size ayarlanırsa, değer pozitif olmalıdır. chunk_size ayarlanmadıysa, zamanlamanın olduğu durumlar dışında 1 değeri varsayılırstatic
. Bir static
zamanlama için, varsayılan öbek boyutu döngüye uygulanan iş parçacığı sayısına bölünmüş döngü yineleme alanına ayarlanır.
Örnek:
setenv OMP_SCHEDULE "guided,4"
setenv OMP_SCHEDULE "dynamic"
Çapraz başvurular
- for yönergesi
- yönergesi için paralel
4.2 OMP_NUM_THREADS
Ortam OMP_NUM_THREADS
değişkeni, yürütme sırasında kullanılacak varsayılan iş parçacığı sayısını ayarlar. OMP_NUM_THREADS
, kitaplık yordamı çağrılarak bu numara açıkça değiştirilirse yoksayılır omp_set_num_threads
. Ayrıca yönergesinde parallel
açık num_threads
bir yan tümcesi varsa yoksayılır.
Ortam değişkeninin OMP_NUM_THREADS
değeri pozitif bir tamsayı olmalıdır. Bunun etkisi, iş parçacığı sayısının dinamik olarak ayarlanmasının etkinleştirilip etkinleştirilmediğine bağlıdır. Ortam değişkeni arasındaki etkileşim ve iş parçacıklarının OMP_NUM_THREADS
dinamik olarak ayarlanması hakkında kapsamlı bir kural kümesi için bkz . bölüm 2.3.
Kullanılacak iş parçacığı sayısı şu durumda uygulama tanımlıdır:
OMP_NUM_THREADS
ortam değişkeni belirtilmemiş,- belirtilen değer pozitif bir tamsayı değil veya
- değeri, sistemin destekleyebilecek iş parçacığı sayısı üst sınırından büyüktür.
Örnek:
setenv OMP_NUM_THREADS 16
Çapraz başvurular
4.3 OMP_DYNAMIC
Ortam değişkeni, OMP_DYNAMIC
paralel bölgelerin yürütülmesi için kullanılabilen iş parçacığı sayısının dinamik olarak ayarlanmasını etkinleştirir veya devre dışı bırakır. OMP_DYNAMIC
dinamik ayarlama açıkça etkinleştirildiğinde veya kitaplık yordamı çağrılarak devre dışı bırakıldığında yoksayılır omp_set_dynamic
. Değeri veya FALSE
olmalıdırTRUE
.
olarak ayarlanırsa OMP_DYNAMIC
TRUE
, paralel bölgeleri yürütmek için kullanılan iş parçacığı sayısı çalışma zamanı ortamı tarafından sistem kaynaklarını en iyi şekilde kullanacak şekilde ayarlanabilir. olarak ayarlanırsa OMP_DYNAMIC
FALSE
, dinamik ayarlama devre dışı bırakılır. Varsayılan koşul uygulama tanımlıdır.
Örnek:
setenv OMP_DYNAMIC TRUE
Çapraz başvurular
- Paralel bölgeler
- omp_set_dynamic işlevi
4.4 OMP_NESTED
Ortam değişkeni, OMP_NESTED
kitaplık yordamını çağırarak omp_set_nested
iç içe paralellik etkinleştirilmediği veya devre dışı bırakılmadığı sürece iç içe paralelliği etkinleştirir veya devre dışı bırakır. olarak ayarlanırsa OMP_NESTED
TRUE
, iç içe paralellik etkinleştirilir. olarak ayarlanırsa OMP_NESTED
FALSE
, iç içe paralellik devre dışı bırakılır. Varsayılan değer şudur: FALSE
.
Örnek:
setenv OMP_NESTED TRUE