Data.table: рдЖрд░-рдбреЗрд╡реЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди; рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдЕрдВрджрд░ R-API

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдирд╡ре░ 2018  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Rdatatable/data.table

рд▓реНрдпреВрдХ рдЯрд┐рдПрд░рдиреА рдиреЗ рдЖрд░-рдбреЗрд╡реЗрд▓ рдореЗрдВ рдПрдХ рдореЗрдореЛрд░реА рдЗрд╢реНрдпреВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ред рд╕реАрдЖрд░рдПрдПрди рдФрд░ рдЯреНрд░реИрд╡рд┐рд╕ / рдПрдкреНрд╡реЗрдпреЛрд░ рджреЛрдиреЛрдВ рдкрд░ рдЯреЗрд╕реНрдЯ рдЧреБрдЬрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рд╣реИред рдЬреИрд╕реЗ рдХрд┐ рдХрдЪрд░рд╛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЬрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд░-рдбреЗрд╡реЗрд▓ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рдпрд╛ рддреЛ рдХреБрдЫ рд╕рдордпред рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ R-devel рдкрд░рд┐рд╡рд░реНрддрди рдирдП рд╕реНрдореГрддрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдпрд╛ R-devel рдкрд░рд┐рд╡рд░реНрддрди рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ (рд╕рдВрднрд╡рддрдГ R- рд░рд┐рд▓реАрдЬрд╝ рдкрд░ data.table-release рдХреЗ рд╕рд╛рде рднреА)ред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд▓реНрдпреВрдХ рдиреЗ рд▓рд┐рдЦрд╛:

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

рд▓реНрдпреВрдХ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреЛрдб рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╕рднреА R API рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рднреА рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реНрдпреВрдХ рдиреЗ рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рд╕рдордп рдХреЗ рджрдмрд╛рд╡ рдХреЗ рдХрд╛рд░рдг рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рдХреА, рдФрд░ рдЕрдм рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдкрд╣рд▓рд╛ рдХрджрдо рдЙрдард╛рдпрд╛ рдерд╛ рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдЕрдВрджрд░ DATAPTR рдХреЛ ALTREP рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред

рдпрд╣ рд╡рд╛рд░рдВрдЯ 1.12.0 рдХреА рд░рд┐рд╣рд╛рдИ рдХреЛ рддреЗрдЬ рдХрд░рддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдирд╣реАрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реНрдпреВрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

$ 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] рд░реИрдкрд░

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХрд╛рд░рдг рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реНрдпреВрдХ рдХрд╛ рдХрдорд╛рд▓! ЁЯТп

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХрд╛рд░рдг рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реНрдпреВрдХ рдХрд╛ рдХрдорд╛рд▓! ЁЯТп

рдореИрдВ рд▓реНрдпреВрдХ рдХреЗ рд╕рд╛рде рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ...

рдкрдХреНрдХрд╛ рд╣реЛ рдЧрдпрд╛ред рдЙрд╕рдХреА рдорджрдж рдХреЗ рд▓рд┐рдП @ltierney рдХреЛ рдзрдиреНрдпрд╡рд╛рджред


рдорд╛рдорд▓реЗ рдореЗрдВ рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд╛рдкрд╕ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...
рдореИрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдЖрд░-рдбреЗрд╡реЗрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред (рдореБрдЭреЗ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ 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()

рдПрдХ рд▓рдВрдмреЗ рд╢реЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЖрд░-рдбреЗрд╡реЗрд▓ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдкреБрди: рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рдЕрднреА рднреА --enable-strict-barrier рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╣реИ:
./configure --without-recommended-packages --enable-strict-barrier
рдкреБрдирд░реНрдирд┐рд╡реЗрд╢рд┐рдд рддрд╛рд░рд╛рдордВрдбрд▓ рдФрд░ рдЙрд╕рдХреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдФрд░ рдбреЗрдЯрд╛ред 1.11.8, рдФрд░ рдЗрд╕ рд╕рдордп рд▓реНрдпреВрдХ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ:

Fatal error: Wrong thread calling 'RunFinalizers'

рдЗрд╕ R-devel рдФрд░ rerunning рдореЗрдВ data.table-dev (1.11.9) рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛, рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред Data.table рдХреЛ рдкреБрдирдГ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ 1.11.8 рдлрд┐рд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 1.11.9 рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реЗ рдореВрд▓ рдЖрд░-рдбреЗрд╡реЗрд▓ рд╕рдВрдХрд▓рди рдореЗрдВ, рд╢рд╛рдпрдж рд╡рд╣рд╛рдБ рдХреБрдЫ 1.11.8 рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ (рдмрд╛рдЗрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛, -00, рдЖрд╕рди, рдЖрджрд┐)ред рд╡реИрд╕реЗ рднреА, рдПрдХ рд╕рд░рд▓ рдЖрд░-рдбреЗрд╡реЗрд▓ рд╕рдВрдХрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдереАред

@jangorecki рдпрджрд┐ рд╕рдордп рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ CI рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ R-devel рдореЗрдВ --enable-strict-barrier рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк R-devel рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ CI рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

@mattdowle рд╣рд╛рдВ рдореИрдВ рд░реЛрдЬ рдЖрд░-

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

sbudai picture sbudai  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sengoku93 picture sengoku93  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nachti picture nachti  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lux5 picture lux5  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

st-pasha picture st-pasha  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ