تلف البيانات عند خيوط ناقل الإحصائية مكتبة الرياضيات مكتبة النواة
-
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
وحصلت على الحل! كنت تعديل أرقام شبه عشوائي الناتجة عن بعض القيم المأخوذة من ملف. من وقت لآخر، حاول أكثر من موضوع واحد لقراءة نفس الملف وإنشاء الفساد. لحل هذه المشكلة، وأضفت مقطع حرج المرصد المغربي للسجون وأنه يعمل.
نصائح أخرى
ووقانون رقم عشوائي إما باستخدام متغير عمومي داخليا أو كل المواضيع استخدام نفس المولد. في نهاية المطاف، واثنين من المواضيع محاولة تحديث نفس قطعة من الذاكرة في نفس الوقت، وسوف تكون النتيجة غير قابل للتنبؤ.
وهكذا يجب تخصيص واحد مولد رقم عشوائي في الموضوع.
والحل: حماية الدعوة إلى روتين عشوائي مع الإشارة / قفل