Data.table: تغيير R-devel R-API داخل المناطق المتوازية

تم إنشاؤها على ٣٠ نوفمبر ٢٠١٨  ·  4تعليقات  ·  مصدر: Rdatatable/data.table

اتصل بي Luke Tierney بخصوص مشكلة في الذاكرة في R-devel. تمر الاختبارات على كل من CRAN و Travis / Appveyor ، لكن استخدام الذاكرة يكون أعلى في بعض الحالات. كما كان من قبل ، يتم إيقاف تشغيل جهاز تجميع القمامة.
لست متأكدًا من وقت إجراء تغيير R-devel بالضبط ، ولكن في بعض الوقت في الشهر الماضي أو نحو ذلك. قد يكون سبب تغيير R-devel مشكلة الذاكرة الجديدة ، أو أن تغيير R-devel يكشف عن المشكلة الموجودة بالفعل (ربما حتى مع إصدار data.table عند إصدار R). في أي حال ، يجب إصلاحه.

كتب لوقا:

I distilled the issue in 'constellation' down to the attached file
from the examples. If I run this the memory usage is much bigger than
previously and the gc() output is garbled. It's a
multi-threading issue again; everything looks fine with
OMP_NUM_THREADS=1. With mutlipe threads you are
calling DATAPTR from threads other than the main one and that creates
a race on setting the R_GCEnabled flag, so eventually it is getting
stuck on off. I instrumented the places where the GC is disabled and
tracked this as the first one from a thread other than the main one:

#4  0x00007ffff78ba9d5 in DATAPTR (x=x@entry=0x1167458)
     at ../../../R/src/include/Rinlinedfuns.h:106
#5  0x00007fffea02c4c8 in subsetVectorRaw (target=0x4529590, source=0x1167458,
     idx=0x4175210, any0orNA=FALSE) at subset.c:44
#6  0x00007fffea02c7a6 in subsetDT (x=<optimized out>, rows=<optimized out>,
     cols=<optimized out>) at subset.c:272

بالنظر إلى تفاصيل Luke ، من السهل رؤية المشكلة في الكود دون الحاجة إلى إعادة الإنتاج. يحتاج جميع استخدامات R API إلى الخروج من جميع المناطق الموازية كما طلب Luke من قبل. لقد تأخرت في القيام بذلك في المرة الأخيرة بسبب ضغط الوقت ، والآن يحتاج الأمر إلى معالجة. آخر مرة قمت فيها بالخطوة الأولى وهي التأكد من أن DATAPTR داخل المناطق المتوازية لم يتلق ALTREP.

هذا يستدعي تسريع الإصدار 1.12.0 ، لأسباب ليس أقلها أنه يؤثر على Luke.

$ grep "omp.*parallel" *.c

  • [x] مجموعة فرعية ج
  • [x] reorder.c
  • [x] fwrite.c
  • [x] fread.c
  • [x] fsort.c
  • [x] forder.c
  • [x] بين

$ grep ALTREP *.c

  • [x] بين
  • [x] fsort.c
  • [x] reorder.c
  • [x] ملاحق. ج
R-devel bug

التعليق الأكثر فائدة

من الرائع أن يقوم لوك بكل العمل الشاق لتحديد السبب! 💯

ال 4 كومينتر

من الرائع أن يقوم لوك بكل العمل الشاق لتحديد السبب! 💯

أنا بصدد التأكيد مع لوك أنه تم إصلاحه قبل الإغلاق ...

تم التأكيد على أنه ثابت. بفضل ltierney لمساعدته.


للاكتمال في حال أردنا الرجوع ...
لم أتمكن من إعادة إنتاج المشكلة مع R-devel المترجمة على النحو التالي. (كنت بحاجة إلى تأكيد أنه يمكنني إعادة إنتاج المشكلة مع 1.11.8 قبل أن أتمكن من تأكيد أن 1.11.9 يصلحها.)

./configure --without-recommended-packages --disable-byte-compiled-packages --enable-strict-barrier CC="gcc -fsanitize=address -fno-sanitize=float-divide-by-zero -fno-omit-frame-pointer" CFLAGS="-O0 -g -Wall -pedantic"

حتى مع النص الذي قدمه لوقا:

library(data.table)
library(constellation)
temp <- as.data.table(vitals[VARIABLE == "TEMPERATURE"])
pulse <- as.data.table(vitals[VARIABLE == "PULSE"])
resp <- as.data.table(vitals[VARIABLE == "RESPIRATORY_RATE"])
temp[, RECORDED_TIME := as.POSIXct(RECORDED_TIME,
  format = "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")]
pulse[, RECORDED_TIME := as.POSIXct(RECORDED_TIME,
  format = "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")]
resp[, RECORDED_TIME := as.POSIXct(RECORDED_TIME,
  format = "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")]
gc()
for (i in 1:10) {
  cat("i=",i,"\n")
  b1 <- bundle(temp, pulse, resp,
    bundle_names = c("PLATELETS", "INR"), window_hours_pre = 24,
    window_hours_post = c(6, 6), join_key = "PAT_ID",
    time_var = "RECORDED_TIME", event_name = "CREATININE", mult = "all")
}
gc()

كصورة طويلة ، قمت بإعادة تجميع R-devel بشكل أكثر بساطة على النحو التالي ، مع --enable-strict-barrier وهو الشيء المهم:
./configure --without-recommended-packages --enable-strict-barrier
تم إعادة تثبيت الكوكبة وجميع تبعياتها وبياناتها ، الجدول 1.11.8 ، وفي هذه المرة فشل نص لوقا بشكل صحيح:

Fatal error: Wrong thread calling 'RunFinalizers'

يعمل تثبيت data.table-dev (1.11.9) في هذا R-devel وإعادة التشغيل بشكل جيد. إعادة تثبيت data.table 1.11.8 فشل مرة أخرى. لذا فهو ثابت بالفعل عند 1.11.9. في تجميع R-devel الأصلي الخاص بي ، ربما كان هناك شيء ما كان يعمل على 1.11.8 (تعطيل مترجم البايت ، -00 ، ASAN ، إلخ). على أي حال ، كانت هناك حاجة إلى تجميع أبسط لـ R-devel وكان يستحق المحاولة.

jangorecki إذا --enable-strict-barrier إلى R-devel المستخدم في خطوط أنابيب CI. لا أعرف ما إذا كنت تقوم بتجميع R-devel أم لا لخطوط أنابيب CI.

mattdowle نعم أقوم بتجميع R-devel يوميًا ،

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

jangorecki picture jangorecki  ·  3تعليقات

lux5 picture lux5  ·  3تعليقات

sengoku93 picture sengoku93  ·  3تعليقات

arunsrinivasan picture arunsrinivasan  ·  3تعليقات

mattdowle picture mattdowle  ·  3تعليقات