تلف البيانات عند خيوط ناقل الإحصائية مكتبة الرياضيات مكتبة النواة

StackOverflow https://stackoverflow.com/questions/677273

  •  21-08-2019
  •  | 
  •  

سؤال

ولقد بشكل متوازي مجرد روتين FORTRAN الذي يحاكي سلوك الأفراد ولقد كان لي بعض المشاكل عند إنشاء أرقام عشوائية مع مكتبة الإحصائية المتجهات (مكتبة من مكتبة الرياضيات النواة). هيكل البرنامج ما يلي:

program example
...
!$omp parallel do num_threads(proc) default(none) private(...) shared(...)
do i=1,n
call firstroutine(...)
enddo
!$omp end parallel do
...
end program example

subroutine firstroutine
...
call secondroutine(...)
...
end subroutine

subroutine secondroutine
...
VSL calls
...
end subroutine

وأنا استخدم إنتل فورتران مترجم لتجميع مع MAKEFILE التي تبدو كما يلي:

f90comp = ifort
libdir = /home
mklpath = /opt/intel/mkl/10.0.5.025/lib/32/
mklinclude = /opt/intel/mkl/10.0.5.025/include/
exec: Example.o Firstroutine.o Secondroutine.o
      $(f90comp) -O3 -fpscomp logicals -openmp -o  aaa -L$(mklpath) -I$(mklinclude) Example.o -lmkl_ia32 -lguide -lpthread
Example.o: $(libdir)Example.f90
       $(f90comp) -O3 -fpscomp logicals -openmp -c $(libdir)Example.f90
Firstroutine.o: $(libdir)Firstroutine.f90
       $(f90comp) -O3 -fpscomp logicals -openmp -c $(libdir)Firstroutine.f90
Secondroutine.o: $(libdir)Secondroutine.f90
       $(f90comp) -O3 -fpscomp logicals -openmp -c -L$(mklpath) -I$(mklinclude) $(libdir)Secondroutine.f90  -lmkl_ia32 -lguide -lpthread

وفي وقت تجميع كل شيء يعمل بشكل جيد. عند تشغيل بلدي المتغيرات توليد البرنامج مع ذلك، يبدو أن كل شيء يعمل بشكل جيد. ومع ذلك، من وقت لآخر (ويقول مرة واحدة كل 200-500 التكرار)، فإنه يولد أرقام مجنون لبضع التكرارات ثم يعمل مرة أخرى بشكل طبيعي. لم أجد أي لطفا إلى متى هذا الفساد يحدث.

وأي فكرة لماذا يحدث ذلك؟

هل كانت مفيدة؟

المحلول 2

وحصلت على الحل! كنت تعديل أرقام شبه عشوائي الناتجة عن بعض القيم المأخوذة من ملف. من وقت لآخر، حاول أكثر من موضوع واحد لقراءة نفس الملف وإنشاء الفساد. لحل هذه المشكلة، وأضفت مقطع حرج المرصد المغربي للسجون وأنه يعمل.

نصائح أخرى

ووقانون رقم عشوائي إما باستخدام متغير عمومي داخليا أو كل المواضيع استخدام نفس المولد. في نهاية المطاف، واثنين من المواضيع محاولة تحديث نفس قطعة من الذاكرة في نفس الوقت، وسوف تكون النتيجة غير قابل للتنبؤ.

وهكذا يجب تخصيص واحد مولد رقم عشوائي في الموضوع.

والحل: حماية الدعوة إلى روتين عشوائي مع الإشارة / قفل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top