2011-04-13 27 views
5

Hey orada, OpenMP'de çok uzun bir paylaşılan değişkenler listesi var, bu yüzden de falcıları birbirine yapıştırmak için "&" -syntax'ı kullanın. BöyleOpenMP Çeşitli "paylaşılan" yönlendiriciler?

şey:

!$OMP PARALLEL DEFAULT(private) SHARED(vars...., 
    & more_vars..., 
    & more_vars... 
    &) 

sadece ilk bir yorum olarak kabul edilmektedir sever beri OpenMP olmadan derlerken bana hataları veriyor! Sorun şu ki "!" Ekleyemem artık OpenMP ile derleme değil

!$OMP PARALLEL DEFAULT(private) SHARED(vars...., 
!  & more_vars..., 
!  & more_vars... 
!  &) 

daha çünkü ... Ama sadece bir tane içinde derleme her iki türlü destek vermek istiyoruz: Bir "&" bulunanlar çizgilerin önünde önünde OpenMP olmadan derleme destekleyecek kod ... Bunu nasıl yapılacağı konusunda tavsiyeler var mı?

cevap

8

Doğru sözdizimini kullanmıyorsunuz.

nöbetçi sadece beyaz boşluk tarafından sürece koyularak herhangi sütunda görünebilecek: Eğer OpenMP V3.0 şartname bakarsak, bölüm 2.1.2 ücretsiz kaynak Formu Yönetmeliği, şu iletilerle (boşluklar ve sekme karakterleri). Arayan hiçbir karakteriyle tek bir kelime olarak görünmelidir. Fortran serbest form satırı uzunluğu, beyaz boşluk ve devam kuralları yönerge çizgisine uygulanır. İlk yönerge çizgileri, gönderenin ardından bir alana sahip olmalıdır. Devam eden yönerge satırları, direktif içinde yer alan herhangi bir yoruma numaralı hattan önce, satırdaki son yan olmayan karakter olarak bir ve işareti olmalıdır. Devam yönerge satırları, ve işareti öncesi ve sonrası isteğe bağlı beyaz alanlı yönerge yönlendirmesinden sonra ve işareti olabilir.

Yani doğru form olmalıdır: Sabit Form için

!$OMP PARALLEL DEFAULT(private) SHARED(vars...., & 
!$OMP& more_vars..., & 
!$OMP& more_vars... & 
!$OMP&) 

, bu şeyin aynısı türüdür. Her satırı OMP sentineli ile başlatırsınız ve devam eden satırların sütun 6'da boş ve sıfır olmayan bir karakter olduğundan emin olun.

+0

Ah teşekkürler, bilmiyordum! Bu bana çok yardımcı oldu! birini bekliyor zaman '&' bulunamadı, dizimi hatası: – tim

+0

Üzgünüm, benim için çalışmadığını Yanılmışım/ tim

+1

kullandığınız hangi derleyici? Ayrıca, örneğim, sabit form kullandığınız gibi gerçekten örneğinize benzemesine rağmen, örneğim serbest formdaydı. Sabit form, devamsızlık satırları üzerinde sadece boş olmayan ve sütun 6 boş olmayan (yani, c $ omp + shared_var, shared_var,) olması gerekir. – ejd

0

Tamam çocuklar ... Çözümü öğrendim: Döngü tanımlayıcısı (Ben Aşağıdaki kodda: do i=1,end) Paylaşılan var ve ben DEFAULT(private) kullanarak paylaşılan vars listesini yazmak zorunda kaldım :) Umarım bu birileri birgün yardımcı olur :)

+1

Bu döngüyü nasıl kullandığınızı göstermediğinizden beri, söyledikleriniz doğrudur. Ancak, genelde, paralel bir bölge içinde bir döngü varsa, döngü dizininin özel olmasını istersiniz. Aslında, varsayılan olarak, OpenMP döngü endeksi özel yapar, böylece bir yarış durumunuz olmaz. Bu yorum da orijinal soruyla tamamen ilgisiz gibi görünüyor, bu yüzden en iyi cevabın nasıl olduğundan emin değilim. – ejd

+0

Oh üzgünüm, evet haklısın, bunun için üzgünüm; Aslen bu soruyu "Fortran'da OpenMP: Veri türlerinde değişiklikler" sorusuna göndermek istedim. ama sadece mahvettin, üzgünüm! Bununla birlikte, döngü dizininin özel olamayacağını hissediyorum, ifadenizden emin misiniz? Programın paylaşıma ayarlandığında neden hemen çalıştığını göremiyorum. Kodu çok uzun sürdüğü için gönderemiyorum ve neyin dışarı çıkacağını bilemem ama şimdi çalıştığı gibi muhtemelen de ihtiyacım yok. – tim