Data.table: data.table์„ ๋กœ๋“œํ•˜๋ฉด MacOS์—์„œ mclapply()๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 10์›” 13์ผ  ยท  39์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Rdatatable/data.table

์ด ๋ฌธ์ œ๋Š” https://github.com/Bioconductor/BiocParallel/issues/67 ๋กœ ์ด์–ด์ง€๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

library(parallel)
library(data.table)
mclapply(1:2, sqrt)

์™€ ์–ด์šธ๋ฆฌ๋‹ค

> sessionInfo()
R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: OS X El Capitan 10.11.6

Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
[1] data.table_1.10.4-2

loaded via a namespace (and not attached):
[1] compiler_3.4.2

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@davidgohel : R LLVM ํˆด์ฒด์ธ์„ ๋กœ์ปฌ์— ์„ค์น˜ํ•˜๋ ค๋ฉด ์ด ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. http://thecoatlessprofessor.com/programming/openmp-in-r-on-os-x/

๋˜๋Š” R.home("etc/Makeconf") ์—์„œ ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ๋ณด์ด๋Š” -fopenmp ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ปดํŒŒ์ผ ์‹œ Apple ์‹œ์Šคํ…œ ๋„๊ตฌ ๋ชจ์Œ๊ณผ ํ•จ๊ป˜ OpenMP๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  39 ๋Œ“๊ธ€

์‹ ๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

1.10.4-1์— ๋Œ€ํ•œ NEWS์˜ ํ•ญ๋ชฉ 4:

data.table ์ดํ›„ ํŒจํ‚ค์ง€ '๋ณ‘๋ ฌ' ํฌํฌ๊ฐ€ OpenMP์™€ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰๋  ๋•Œ Intel์˜ OpenMP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Mac์—์„œ ๊ฐœ์„ ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น OpenMP ๊ตฌํ˜„์€ ๋ณ‘๋ ฌ ์˜์—ญ์ด ์™„๋ฃŒ๋œ ํ›„ ์Šค๋ ˆ๋“œ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด ์ˆ˜์ • ์‚ฌํ•ญ์ด ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด๊ณ ๋œ library(data.table) ์งํ›„์— setDTthreads(1)๋ฅผ ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค.

dev์—์„œ ๋™์ผํ•œ ํ•ญ๋ชฉ์„ ๊ฐœ์„ ํ–ˆ์ง€๋งŒ ๋‰ด์Šค ํ•ญ๋ชฉ์ด CRAN ํŒจ์น˜๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค๋Š” ๋ฐฑํฌํŠธ๋ฅผ ๋ฌด์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ๋‰ด์Šค ํŒŒ์ผ ์—์„œ:

๋ณ‘๋ ฌ ํŒจํ‚ค์ง€๋„ ์‚ฌ์šฉํ•  ๋•Œ Mac ์ „์šฉ ๊ฐœ์„  ์‹œ๋„(ํฌํฌ), #2137. Intel์˜ OpenMP ๊ตฌํ˜„์€ GNU libgomp์™€ ๋‹ฌ๋ฆฌ OpenMP ๋ณ‘๋ ฌ ์˜์—ญ(data.table ๋‚ด๋ถ€)์ด ์™„๋ฃŒ๋œ ํ›„ ์Šค๋ ˆ๋“œ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ data.table์ด ์ด๋ฏธ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋œ ํ›„ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ‘๋ ฌ์˜ ํฌํฌ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ถˆ์•ˆ์ •์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” Intel์˜ OpenMP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CRAN์— ์˜ํ•ด โ€‹โ€‹๊ตฌ์ถ•๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— CRAN์˜ Mac ํŒจํ‚ค์ง€ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Windows ๋˜๋Š” Linux์—์„œ ์•Œ๋ ค์ง„ ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉฐ ๋ณ‘๋ ฌ์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๋•Œ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์•Œ๋ ค์ง„ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด Mac ์ „์šฉ ์ˆ˜์ • ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด์ „์— data.table์„ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋ชจ๋“œ๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด๊ณ ๋œ library(data.table) ์งํ›„์— setDTthreads(1)๋ฅผ ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ท€ํ•˜์˜ ๊ฒฝ์šฐ ํฌํฌํ•˜๊ธฐ ์ „์— data.table์„ ์‚ฌ์šฉํ•˜์ง€๋„ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์€ ์ด์ „์— ๋ณด๊ณ ๋œ ์ ์ด ์—†๋Š” ์ƒˆ๋กœ์šด ์ธก๋ฉด์ž…๋‹ˆ๋‹ค. ๊ทธ 3์ค„์ด ๋ง ๊ทธ๋Œ€๋กœ ์ƒˆ๋กœ์šด R ์„ธ์…˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด๋ผ๋Š” ์ ์—์„œ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ๊ฐ€ ์—„๊ฒฉํžˆ ์ •ํ™•ํ•ฉ๋‹ˆ๊นŒ? ์ฆ‰, ๋กœ๋“œ์™€ mclapply ํ˜ธ์ถœ ์‚ฌ์ด์— data.table์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์–ด์จŒ๋“  library(data.table) setDTthreads(1) ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ mclapply ์ „์— data.table ์„ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋„์›€์ด ๋ ์ง€ ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค.

CRAN mac ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์†Œ์Šค์—์„œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๊นŒ? OpenMP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด mclapply ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ MacOS์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒƒ์ด Intel(libomp) ๋˜๋Š” GNU(libgomp) OpenMP ๊ตฌํ˜„์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

MacOS ์ง€์นจ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค์—์„œ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋„์›€์ด ๋ฉ๋‹ˆ๊นŒ? ์ ์ ˆํ•œ OpenMP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๋กœ์ปฌ ๋งํฌ ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ์ง€์นจ์„ ์ •ํ™•ํ•˜๊ฒŒ ๋”ฐ๋ฅด์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— MacOS์—์„œ ์ •ํ™•ํ•˜๊ฒŒ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

test.data.table() ์ด(๊ฐ€) ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ํ…Œ์ŠคํŠธ 1705๋Š” mclapply ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  CRAN์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. CRAN์ด MacOS์—์„œ Mac ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํ…Œ์ŠคํŠธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋นŒ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

1.10.4-2์˜ NEWS ํ•ญ๋ชฉ 1์€ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ์˜์‹ฌ๋˜์ง€๋งŒ ์™„์ „์„ฑ์„ ์œ„ํ•ด ์–ธ๊ธ‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

MacOS์˜ OpenMP๋Š” ์ด์ œ CRAN์—์„œ ์ง€์›๋˜๋ฉฐ Mac์šฉ CRAN ํŒจํ‚ค์ง€ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ปดํŒŒ์ผ ํƒ€์ž„ #2409์—์„œ OpenMP๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•˜์„ ๋•Œ MacOS์˜ ์†Œ์Šค์—์„œ v1.10.4-1์„ ์„ค์น˜ํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ ํ•ด ์ฃผ์‹  Liz Macfie์™€ @fupangpangpang ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. OpenMP๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์‹œ์ž‘ ๋ฉ”์‹œ์ง€๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://github.com/Rdatatable/data.table/issues/2413
https://github.com/Rdatatable/data.table/issues/2409
https://github.com/Rdatatable/data.table/issues/2406
https://github.com/Rdatatable/data.table/issues/2137

์ €๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ MacOS๋กœ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Apple ๋ฐ/๋˜๋Š” Intel์˜ ์ œํ’ˆ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ data.table ๋ฌธ์ œ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ณ  ๊ทธ๊ฒƒ์„ NEWS์— ๋ฌธ์„œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„์›€๊ณผ ์ œ์•ˆ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์˜ˆ, ๋งŒ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ

library(parallel)
library(data.table)
mclapply(1:2, sqrt)

์ด๊ฒƒ์€ Bioconductor ๋นŒ๋“œ ๋จธ์‹ ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ฐ„๋‹จํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ค์น˜๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š”

$ ls /Library/Frameworks/R.framework/Resources/lib
libR.dylib      libRlapack.dylib.dSYM   libquadmath.0.dylib
libR.dylib.dSYM     libc++.1.dylib      libreadline.5.2.dylib
libRblas.0.dylib    libc++abi.1.dylib   libreadline.dylib
libRblas.dylib      libgcc_s.1.dylib    libunwind.1.dylib
libRblas.dylib.dSYM libgfortran.3.dylib
libRlapack.dylib    libomp.dylib

๊ทธ๋ฆฌ๊ณ 

$ otool -L  /Library/Frameworks/R.framework/Resources/bin/exec/R 
/Library/Frameworks/R.framework/Resources/bin/exec/R:
    /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libR.dylib (compatibility version 3.4.0, current version 3.4.2)
    /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.dylib (compatibility version 0.0.0, current version 0.0.0)
    /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libomp.dylib (compatibility version 5.0.0, current version 5.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

๋”ฐ๋ผ์„œ ์•„๋งˆ๋„ libomp์— ์—ฐ๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

test.data.table() ๋ผ๊ณ 

Running test id 1705     Assertion failure at kmp_runtime.cpp(6480): __kmp_thread_pool == __null.
Assertion failure at kmp_runtime.cpp(6480): __kmp_thread_pool == __null.
OMP: Error #13: Assertion failure at kmp_runtime.cpp(6480).
OMP: Hint: Please submit a bug report with this message, compile and run commands used, and machine configuration info including native compiler and operating system versions. Faster response will be obtained by including all program sources. For information on submitting this issue, please see http://www.intel.com/software/products/support/.
OMP: Error #13: Assertion failure at kmp_runtime.cpp(6480).
OMP: Hint: Please submit a bug report with this message, compile and run commands used, and machine configuration info including native compiler and operating system versions. Faster response will be obtained by including all program sources. For information on submitting this issue, please see http://www.intel.com/software/products/support/.
Assertion failure at kmp_runtime.cpp(6480): __kmp_thread_pool == __null.
OMP: Error #13: Assertion failure at kmp_runtime.cpp(6480).
OMP: Hint: Please submit a bug report with this message, compile and run commands used, and machine configuration info including native compiler and operating system versions. Faster response will be obtained by including all program sources. For information on submitting this issue, please see http://www.intel.com/software/products/support/.
Assertion failure at kmp_runtime.cpp(6480): __kmp_thread_pool == __null.
OMP: Error #13: Assertion failure at kmp_runtime.cpp(6480).
OMP: Hint: Please submit a bug report with this message, compile and run commands used, and machine configuration info including native compiler and operating system versions. Faster response will be obtained by including all program sources. For information on submitting this issue, please see http://www.intel.com/software/products/support/.
Running test id 1750     Test 1751 not run. If required call library(nanotime) first.

endian==little, sizeof(long double)==16, sizeof(pointer)==8

All 5936 tests in inst/tests/tests.Rraw completed ok in 00:01:45 on Sat Oct 14 21:25:30 2017

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ์ด๋Ÿฌํ•œ __kmp_* ํ˜ธ์ถœ์€ Intel OpenMP ๋Ÿฐํƒ€์ž„์—๋งŒ ํ•ด๋‹น๋˜๋ฉฐ ์ด์ „์— ๋ณด๊ณ ๋œ ๊ฒƒ์„ ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ 1705๋Š” ํŠนํžˆ ๊ทธ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. data.table ์ž์ฒด ๋‚ด์—์„œ 2๊ฐœ์˜ OpenMP ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  parallel::mclapply ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. __kmp_ ์˜ค๋ฅ˜๋Š” iiuc, Intel์˜ ๊ตฌํ˜„์ด ๋ชจ๋“  ๋ณ‘๋ ฌ ์˜์—ญ์ด ์™„๋ฃŒ๋œ ํ›„์—๋„ ์Šค๋ ˆ๋“œ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•˜๋„๋ก ๋†”๋‘๊ธฐ ๋•Œ๋ฌธ์— ํ›„์† ํฌํฌ๊ฐ€ ๋ถˆ์•ˆ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ถฉ๋Œํ•˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ์šด์ž…๋‹ˆ๋‹ค. 1.10.4-2์—์„œ ํ•ด๋‹น ์ถœ๋ ฅ์„ ๋ณด๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Intel ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ถ„๊ธฐ ์ „์— ์‹คํ–‰ ์ค‘์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ๋ฉฐ ์ด์ œ omp_set_num_threads(1) ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์ „ ๋ถ„๊ธฐ ์ฝœ๋ฐฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด๊ณ ๋œ ๋‚ด์šฉ์ด ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, library(data.table) setDTthreads(1) ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ Intel์˜ OpenMP๊ฐ€ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹จ 3์ค„๋กœ ์ค‘๋‹จํ•˜๋ฉด Intel์˜ OpenMP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—ฐ๊ฒฐ๋˜๊ฑฐ๋‚˜ ์ดˆ๊ธฐํ™”๋  ๋•Œ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์†์‹ค์„ ์ž…์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ clang ๋ฐ gcc ์˜ OpenMP ๊ธฐ๋Šฅ์ด $ libomp , libiomp ๋ฐ libgomp ์˜ 3๊ฐ€์ง€ OpenMP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์–ด๋–ป๊ฒŒ ๊ด€๋ จ๋˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. libomp ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CRAN์€ libiomp ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ๊ทธ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•œ ์‚ฌ๋žŒ์€ "llvm์„ gcc๋กœ ๋ณ€๊ฒฝ"์ด MacOS์—์„œ ์ถฉ๋Œ์„ ์ค‘์ง€ํ–ˆ์ง€๋งŒ ์†Œ์Šค์—์„œ ์ปดํŒŒ์ผํ•œ๋‹ค๊ณ  ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค( here ).

๋ฐฉ๊ธˆ Intel OpenMP ๋Ÿฐํƒ€์ž„์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ธํ…”์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋น„๊ณต๊ฐœ ์†Œ์Šค๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ปดํŒŒ์ผํ•˜๊ณ  ๋””๋ฒ„๊ทธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. https://www.openmprtl.org/ ๋จผ์ € ๋กœ์ปฌ์—์„œ ์ปดํŒŒ์ผํ•˜๊ณ  ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜ GNU ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ 1705๋Š” CRAN์„ ํ†ต๊ณผํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ CRAN ๊ธฐ๊ณ„์™€ ๊ท€ํ•˜์˜ ๊ธฐ๊ณ„ ์‚ฌ์ด์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋‚ด์„œ ์•„๋งˆ๋„ ํฌ๋ง์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ 1705๋Š” ์‹ค์ œ๋กœ ๋‹น์‹ ๊ณผ CRAN์— ๋Œ€ํ•ด ํ†ต๊ณผํ•˜๊ณ  ์žˆ์ง€๋งŒ libomp ์€ ํ…Œ์ŠคํŠธ์—์„œ ์„ ํƒํ•˜์ง€ ๋ชปํ•˜๋Š” ์–ด์„ค์…˜ ์˜ค๋ฅ˜๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. __kmp ๋ฉ”์‹œ์ง€๊ฐ€ CRAN ๋กœ๊ทธ์—๋„ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด CRAN ๋กœ๊ทธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๊ฐ€ CRAN์˜ ๋กœ๊ทธ์— ์—†์œผ๋ฉด CRAN ์‹œ์Šคํ…œ๊ณผ ์‚ฌ์šฉ์ž ์‹œ์Šคํ…œ์˜ ์ฐจ์ด์ ์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์ด๊ฒƒ์€ CRAN ํŒจํ‚ค์ง€ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค: http://macappstore.org/libiomp/
์•„๋‹ˆ๋ฉด libiomp๊ฐ€ CRAN์— ์˜ํ•ด โ€‹โ€‹ํŒจํ‚ค์ง€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ •์ ์œผ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๊นŒ? ?install.packages ์˜ 'Binary packages' ์„น์…˜์€ MacOS์—์„œ ์ƒ๋‹นํžˆ ๋ณต์žกํ•˜๊ณ  type= ์ธ์ˆ˜์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ์˜ต์…˜์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

์ธํ…”์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ธ์‡„ ์ค‘์ž…๋‹ˆ๋‹ค.

OMP: ์˜ค๋ฅ˜ #13: kmp_runtime.cpp(6480)์—์„œ ์–ด์„ค์…˜ ์‹คํŒจ
OMP: ํžŒํŠธ: ์ด ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ์ œ์ถœํ•˜๊ณ , ์‚ฌ์šฉ๋œ ๋ช…๋ น์„ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ํ•˜๊ณ , ๊ธฐ๋ณธ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ ์šด์˜ ์ฒด์ œ ๋ฒ„์ „์„ ํฌํ•จํ•œ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ ์†Œ์Šค๋ฅผ ํฌํ•จํ•˜๋ฉด ๋” ๋น ๋ฅธ ์‘๋‹ต์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ ์ œ์ถœ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” http://www.intel.com/software/products/support/๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

MacOS์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์ด Intel์— ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” ์›๋ž˜ ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ BiocParallel ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ data.table์ด ๋กœ๋“œ๋˜๋Š” ๋™์•ˆ ํ˜ธ์ถœ๋˜๋Š” mclapply๋กœ ๋ฌธ์ œ๋ฅผ ์ขํ˜”์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์˜ ์ง€์นจ์— ๋”ฐ๋ผ MacOS์— ์ตœ์‹  ๋ฒ„์ „์˜ data.table์„ ์„ค์น˜ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ๋™๋ฃŒ๋Š” ์ž์‹ ์˜ Mac์— ์ตœ์‹  ๋ฒ„์ „์˜ data.table์„ ์„ค์น˜ํ–ˆ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Š” ์ž์‹ ์˜ ์‹œ์Šคํ…œ์— OpenMP๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

data.table 1.10.2๋กœ ๋กค๋ฐฑํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@asenabouth ์ธํ…”์— ์ง€์› ์š”์ฒญ์„ ์ œ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(์œ„์˜ ์ œ ์˜๊ฒฌ ์ฐธ์กฐ)? ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜๋Š” Apple์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ์ง€์›์„ ์ „ํ˜€ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์†Œ์Šค์—์„œ ์„ค์น˜ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํ™•์‹ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ช…๋ น๊ณผ ์ถœ๋ ฅ์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์†Œ์Šค์—์„œ ์ปดํŒŒ์ผํ•˜๊ณ  CRAN ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํ”ผํ•œ ํ›„์—๋„ data.table 1.10.4๊ฐ€ ๋กœ๋“œ๋œ ํ›„์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด parallel::mclapply ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

์ธํ…”์— ์ง€์› ์š”์ฒญ์„ ์ œ์ถœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์†Œ์Šค์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์„ค์น˜ ๋ฐ ํ›„์† ํ…Œ์ŠคํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
```{r}
[์ด์ „์— ์ €์žฅํ•œ ์ž‘์—… ๊ณต๊ฐ„ ๋ณต์›]

remove.packages("data.table")
'/Users/a.senabouth/Library/R/3.4/library'์—์„œ ํŒจํ‚ค์ง€ ์ œ๊ฑฐ
('lib'๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—)
install.packages("data.table", ์œ ํ˜• = "์†Œ์Šค",

์ฝ˜ํ…์ธ  ์œ ํ˜• 'application/gzip' ๊ธธ์ด 3312731๋ฐ”์ดํŠธ(3.2MB)

๋‹ค์šด๋กœ๋“œ 3.2MB

  • ์†Œ์Šค ํŒจํ‚ค์ง€ 'data.table' ์„ค์น˜ ์ค‘...
    * ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c assign.c -o assign.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c between.c -o between.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c bmerge.c -o bmerge.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c chmatch.c -o chmatch.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c dogroups.c -o dogroups.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fastmean.c -o fastmean.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fcast.c -o fcast.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fmelt.c -o fmelt.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c forder.c -o forder.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c frank.c -o frank.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fread.c -o fread.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c freadR.c -o freadR.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fsort.c -o fsort.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fwrite.c -o fwrite.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fwriteR.c -o fwriteR.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c gsumm.c -o gsumm.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c ijoin.c -o ijoin.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c init.c -o init.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c inrange.c -o inrange.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c openmp-utils.c -o openmp-utils.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c quickselect.c -o quickselect.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c rbindlist.c -o rbindlist.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c reorder.c -o reorder.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c shift.c -o shift.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c ํ•˜์œ„ ์ง‘ํ•ฉ.c -o ํ•˜์œ„ ์ง‘ํ•ฉ.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c transpose.c -o transpose.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c uniqlist.c -o uniqlist.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c vecseq.c -o vecseq.o/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c wrappers.c -o wrappers.o/usr/local/opt/llvm/bin/clang -fopenmp -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined ์–ต์ œ -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/ opt/gettext/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib -o data.table.so assign.o between.o bmerge.o chmatch .o dogroups.o fastmean.o fcast.o fmelt.o forder.o frank.o fread.o freadR.o fsort.o fwrite.o fwriteR.o gsumm.o ijoin.o init.o inrange.o openmp-utils .o quickselect.o rbindlist.o reorder.o shift.o ํ•˜์œ„ ์ง‘ํ•ฉ.o transpose.o uniqlist.o vecseq.o wrappers.o -fopenmp -F/Library/Frameworks/R.framework/.. -framework R -Wl, -ํ”„๋ ˆ์ž„์›Œํฌ -Wl,CoreFoundationmv data.table.so datatable.soif [ "" != "Windows_NT" ] && [ uname -s = '๋‹ค์œˆ' ]; ํŒŒ์ด/Users/a.senabouth/Library/R/3.4/library/data.table/libs์— ์„ค์น˜* ๋ฅด
    * ์ธ์Šค* ๋ฐ”์ดํŠธ ์ปดํŒŒ์ผ ๋ฐ ์ง€์—ฐ ๋กœ๋”ฉ์„ ์œ„ํ•œ ํŒจํ‚ค์ง€ ์ค€๋น„
    * ๋•๋‹ค* * ๋„์›€๋ง ์ƒ‰์ธ ์„ค์น˜
    * ๋นŒ๋“œ ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค* ๋น„๋„คํŠธ ์„ค์น˜
    ** ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธ
  • ์™„๋ฃŒ(data.table)

๋‹ค์šด๋กœ๋“œํ•œ ์†Œ์Šค ํŒจํ‚ค์ง€๋Š”
'/๊ฐœ์ธ/var/folders/zz/zyxvpxvq6csfxvn_n0001lp0000cxh/T/Rtmpl7TqS4/downloaded_packages'

์•„๋ฅด ์žํ˜•
์˜ค๋ฅ˜: ๊ฐœ์ฒด 'R'์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๋ณ‘๋ ฌ)
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(data.table)
data.table 1.10.5 IN DEVELOPMENT ๊ตฌ์ถ• 2017-10-16 07:29:07 UTC; ํŠธ๋ž˜๋น„์Šค
๊ฐ€์žฅ ๋น ๋ฅธ ํ•™์Šต ๋ฐฉ๋ฒ•(data.table ์ž‘์„ฑ์ž ๊ธฐ์ค€): https://www.datacamp.com/courses/data-analysis-the-data-table-way
๋ฌธ์„œ: ?data.table, example(data.table) ๋ฐ browseVignettes("data.table")
๋ฆด๋ฆฌ์Šค ์ •๋ณด, ๋น„๋””์˜ค ๋ฐ ์Šฌ๋ผ์ด๋“œ: http://r-datatable.com
mclapply(1:2, ์ œ๊ณฑ๋ฏธํ„ฐ)

* ๋ถˆ๋ฒ• ์กฐ์ž‘ ์ ๋ฐœ *
์ฃผ์†Œ 0x7fffa9730ae4, '๋ถˆ๋ฒ• opcode' ๋ฐœ์ƒ

์—ญ ์ถ”์ :
1: ๋งฅํฌํฌ()
2: ํŽ€(X[[i]], ...)
3: lapply(seq_len(์ฝ”์–ด), inner.do)
4: mclapply(1:2, ์ œ๊ณฑ๋ฏธํ„ฐ)

๊ฐ€๋Šฅํ•œ ์กฐ์น˜:
1: ์ค‘๋‹จ(ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ์ฝ”์–ด ๋คํ”„ ์‚ฌ์šฉ)
2: ์ผ๋ฐ˜ R ์ข…๋ฃŒ
3: ์ž‘์—… ๊ณต๊ฐ„์„ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  R ์ข…๋ฃŒ
4: R ์ €์žฅ ์ž‘์—… ๊ณต๊ฐ„ ์ข…๋ฃŒ

And here's the session info:
```{r}
R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.6

Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_AU.UTF-8/en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
[1] data.table_1.10.5

loaded via a namespace (and not attached):
[1] compiler_3.4.2

ํŽธ์ง‘ :
์†Œ์Šค์—์„œ 1.10.4๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์ž‘๋™ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
```{r}

ํ•„์š”(devtools)
ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ๋กœ๋“œ: devtools
install_version("data.table", ๋ฒ„์ „ = "1.10.4", repos = "http://cran.us.r-project.org")
URL์—์„œ ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ: http://cran.us.r-project.org/src/contrib/Archive/data.table/data.table_1.10.4.tar.gz
data.table ์„ค์น˜
'/Library/Frameworks/R.framework/Resources/bin/R' --no-site-file --no-environ
--no-save --no-restore --quiet CMD ์„ค์น˜
'/๊ฐœ์ธ/var/folders/zz/zyxvpxvq6csfxvn_n0001lp0000cxh/T/RtmpXDSgR8/devtoolsdf05280c79d9/data.table'
--library='/Users/a.senabouth/Library/R/3.4/library' --install-tests

  • ์†Œ์Šค ํŒจํ‚ค์ง€ 'data.table' ์„ค์น˜ ์ค‘...
    * ํŒจํ‚ค์ง€ 'data.table'์ด ์„ฑ๊ณต์ ์œผ๋กœ ์••์ถ•์ด ํ’€๋ ธ๊ณ  MD5 ํ•ฉ๊ณ„๊ฐ€ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.* ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c assign.c -o assign.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c between.c -o between.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c bmerge.c -o bmerge.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c chmatch.c -o chmatch.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c dogroups.c -o dogroups.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fastmean.c -o fastmean.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fcast.c -o fcast.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fmelt.c -o fmelt.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c forder.c -o forder.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c frank.c -o frank.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fread.c -o fread.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fsort.c -o fsort.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fwrite.c -o fwrite.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c gsumm.c -o gsumm.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c ijoin.c -o ijoin.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c init.c -o init.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c inrange.c -o inrange.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c openmp-utils.c -o openmp-utils.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c quickselect.c -o quickselect.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c rbindlist.c -o rbindlist.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c reorder.c -o reorder.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c shift.c -o shift.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c ํ•˜์œ„ ์ง‘ํ•ฉ.c -o ํ•˜์œ„ ์ง‘ํ•ฉ.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c transpose.c -o transpose.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c uniqlist.c -o uniqlist.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c vecseq.c -o vecseq.o
    /usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/opt/gettext/include -I/usr/local/opt /llvm/include -fopenmp -fPIC -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c wrappers.c -o wrappers.o
    /usr/local/opt/llvm/bin/clang -fopenmp -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined ์–ต์ œ -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/ opt/gettext/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib -o data.table.so assign.o between.o bmerge.o chmatch .o dogroups.o fastmean.o fcast.o fmelt.o forder.o frank.o fread.o fsort.o fwrite.o gsumm.o ijoin.o init.o inrange.o openmp-utils.o quickselect.o rbindlist .o reorder.o shift.o ํ•˜์œ„ ์ง‘ํ•ฉ.o transpose.o uniqlist.o vecseq.o wrappers.o -fopenmp -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl, CoreFoundation
    mv data.table.so datatable.so
    if [ "" != "Windows_NT" ] && [ uname -s = '๋‹ค์œˆ' ]; ๊ทธ๋Ÿฐ ๋‹ค์Œ install_name_tool -id datatable.so datatable.so; ํŒŒ์ด
    /Users/a.senabouth/Library/R/3.4/library/data.table/libs์— ์„ค์น˜
    * ๋ฅด* ์ธ์Šค
    * ํ…Œ์ŠคํŠธ* ๋ฐ”์ดํŠธ ์ปดํŒŒ์ผ ๋ฐ ์ง€์—ฐ ๋กœ๋”ฉ์„ ์œ„ํ•œ ํŒจํ‚ค์ง€ ์ค€๋น„
    * ๋•๋‹ค* * ๋„์›€๋ง ์ƒ‰์ธ ์„ค์น˜
    * ๋นŒ๋“œ ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค* ๋น„๋„คํŠธ ์„ค์น˜
    ** ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธ
  • ์™„๋ฃŒ(data.table)
    > ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(data.table)
    data.table 1.10.4
    ๊ฐ€์žฅ ๋น ๋ฅธ ํ•™์Šต ๋ฐฉ๋ฒ•(data.table ์ž‘์„ฑ์ž ๊ธฐ์ค€): https://www.datacamp.com/courses/data-analysis-the-data-table-way
    ๋ฌธ์„œ: ?data.table, example(data.table) ๋ฐ browseVignettes("data.table")
    ๋ฆด๋ฆฌ์Šค ์ •๋ณด, ๋น„๋””์˜ค ๋ฐ ์Šฌ๋ผ์ด๋“œ: http://r-datatable.com
    > ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๋ณ‘๋ ฌ)
    > mclapply(1:2, ์ œ๊ณฑ๋ฏธํ„ฐ)
    [[1]]
    [1] 1

[[2]]
[1] 1.414214
```

๋‹ค์Œ์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. https://software.intel.com/en-us/forums/intel-c-compiler/topic/746943

๊ทธ๊ฒƒ์€ ์•„๋งˆ๋„ ์ž˜๋ชป๋œ ์œ„์น˜์— ์žˆ์„ ๊ฒƒ์ด๊ณ  ๋‚˜๋Š” ์•„๋งˆ ๋ถˆ๊ธธ์— ํœฉ์‹ธ์ผ ๊ฒƒ์ด์ง€๋งŒ ๋ฐ”๋ผ๊ฑด๋Œ€ ๊ทธ๊ฒƒ์€ ๊ณต์„ ๊ตด๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@mattdowle ๋‚ด๊ฐ€ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ํ•˜๊ณ  ์‹ถ์€ ์ผ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

@asenabouth ์™€ ๋™์ผํ•œ ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ํ–ˆ์œผ๋ฉฐ ์†Œ์Šค์—์„œ 1.10.4๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์„ธ์…˜ ์ •๋ณด:

R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13

Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  base     

other attached packages:
[1] data.table_1.10.4

loaded via a namespace (and not attached):
[1] compiler_3.4.2 methods_3.4.2 

๋‚ด ์ปดํ“จํ„ฐ์— ๋ช‡ ๊ฐ€์ง€ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

library(parallel)
library(data.table)
mclapply(1:2, sqrt)

์ƒ์‚ฐํ•˜๋‹ค

 *** caught illegal operation ***
address 0x7fffb500eae4, cause 'illegal opcode'

sessionInfo()

R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.6

Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8

attached base packages:
[1] parallel  stats     graphics  utils     datasets  grDevices methods  
[8] base     

other attached packages:
[1] data.table_1.10.4-2 testthat_1.0.2      devtools_1.13.3    

loaded via a namespace (and not attached):
[1] compiler_3.4.2 magrittr_1.5   R6_2.2.2       withr_2.0.0    crayon_1.3.4  
[6] memoise_1.1.0  digest_0.6.12

์žฌ๋ฏธ์žˆ๊ฒŒ,

> remove.packages("data.table")
Removing package from โ€˜/Library/Frameworks/R.framework/Versions/3.4/Resources/libraryโ€™
(as โ€˜libโ€™ is unspecified)
> install.packages("data.table", type = "source",
+ repos = "http://Rdatatable.github.io/data.table")

์ƒ์‚ฐํ•˜๋‹ค

trying URL 'http://Rdatatable.github.io/data.table/src/contrib/data.table_1.10.5.tar.gz'

Content type 'application/gzip' length 3312726 bytes (3.2 MB)
==================================================
downloaded 3.2 MB

* installing *source* package โ€˜data.tableโ€™ ...
** libs
clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/include  -fopenmp -fPIC  -Wall -g -O2  -c assign.c -o assign.o
clang: error: unsupported option '-fopenmp'
make: *** [assign.o] Error 1
ERROR: compilation failed for package โ€˜data.tableโ€™
* removing โ€˜/Library/Frameworks/R.framework/Versions/3.4/Resources/library/data.tableโ€™

The downloaded source packages are in
    โ€˜/private/var/folders/48/q6ltldjs251000_wvjrdy_vm0000gn/T/Rtmp6eZFXj/downloaded_packagesโ€™
Warning message:
In install.packages("data.table", type = "source", repos = "http://Rdatatable.github.io/data.table") :
  installation of package โ€˜data.tableโ€™ had non-zero exit status

๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

๋˜ํ•œ https://github.com/Rdatatable/data.table/wiki/Installation ์˜ ์ง€์นจ์„ ๋”ฐ๋ž๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค....

ํŽธ์ง‘ํ•˜๋‹ค:
mclapply ๋ฐ illegal operation ์˜ ์›๋ž˜ ๋ฌธ์ œ(์ปดํŒŒ์ผ๋Ÿฌ ์˜ค๋ฅ˜ unsupported option '-fopenmp' ์•„๋‹˜ - ์ง€์นจ์— ๋”ฐ๋ผ ์ˆ˜์ •๋จ)

๋ชจ๋‘ ๊ณ ๋งˆ์›Œ์š”. 1.10.4๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ 1.10.4-2๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ํฌํฌ๊ฐ€ ํ˜ธ์ถœ๋˜์ž๋งˆ์ž ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ œ๊ฐ€ NEWS์—์„œ ์–ธ๊ธ‰ํ•œ ์‹œ๋„๋Š” ๋ฐ”๋กœ ๊ทธ ๋ถ€๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ์งธ, ๋ณ€ํ•˜์ง€ ์•Š์€ ๊ฒƒ. data.table์„ ๋กœ๋“œํ•  ๋•Œ init.c ๋Š” ๋‹ค์Œ์„ openmp-utils.c ์—์„œ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

void avoid_openmp_hang_within_fork() {
  // Called once on loading data.table from init.c
  #ifdef _OPENMP
    pthread_atfork(&when_fork, NULL, NULL);
  #endif
}

๋”ฐ๋ผ์„œ parallel::mclapply ๊ฐ€ fork() $ ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด when_fork ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. 1.10.4-2์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค.

void when_fork() {    # v 1.10.4-2
  // attempted workaround for Intel's OpenMP implementation which leaves threads
  // running after parallel region; these crash when forked.
  #ifdef _OPENMP
    omp_set_num_threads(1);
  #endif

  DTthreads = 1;
}

(1.10.4์—์„œ) ์ด์ „์—๋Š” omp_set_num_threads(1) ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์ •์  ๋ณ€์ˆ˜ DTthreads ๋ฅผ ์„ค์ •ํ–ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

void when_fork() {    # v 1.10.4
  DTthreads = 1;
}

๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ omp_set_num_threads(1) ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์ด ์ถฉ๋Œํ•œ๋‹ค๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ OpenMP์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ œ๋Œ€๋กœ ๋ฐ”์ธ๋”ฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ?

  1. parallel::mclapply ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ถฉ๋Œ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๊ฒฝ์šฐ parallel ํŒจํ‚ค์ง€๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ์ƒˆ ์„ธ์…˜์—์„œ ๊ฐ„๋‹จํ•œ fwrite() ๊ฐ€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ๋งŽ์€ CPU๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ํฐ DT ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž‘์€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด 1๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. OpenMP๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์—ฐ๊ฒฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งํฌ ๋ผ์ธ์— ์žˆ๋Š” ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? MacOS์—์„œ ํ”Œ๋ž˜๊ทธ์™€ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? : -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress

  2. dev์—์„œ omp_set_num_threads(1) ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๋‹ค์‹œ ์ œ๊ฑฐํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ˜„์žฌ 1.10.5์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ๋‚ด๊ฐ€ ๋ณ€๊ฒฝํ•œ ํ›„ dev๋ฅผ ๋‹ค์‹œ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  3. ์ด์ƒํ•œ ์ ์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์ถฉ๋Œ ์—†์ด MacOS์—์„œ CRAN์„ ํ†ต๊ณผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. parallel::mclapply ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ…Œ์ŠคํŠธ 1705 ํ…Œ์ŠคํŠธ์™€ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋Š” 2๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CRAN์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. CRAN ๊ธฐ๊ณ„์™€ ์‚ฌ๋žŒ๋“ค์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ธฐ๊ณ„์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@joethorley ์ด์ƒํ•˜๋„ค์š”. ์—ฌ๊ธฐ ์—์„œ MacOS ์ง€์นจ์„ ์‹คํ–‰ํ•œ ํ›„์—๋„ unsupported option '-fopenmp' ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ง„ํ–‰ ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ธธ์„ ์žƒ์—ˆ๋‹ค.

@joethorley gettext๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š”ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ผ๋‹จ ์™„๋ฃŒ๋˜๋ฉด ๋‚ด ์‹œ์Šคํ…œ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@mattdowle ์•„๋‹ˆ์š” unsupported option '-fopenmp' ์˜ค๋ฅ˜๋Š” ์—ฌ๊ธฐ ์˜ ์ง€์นจ์„ ๋”ฐ๋ž์ง€๋งŒ ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

 *** caught illegal operation ***
address 0x7fffb500eae4, cause 'illegal opcode'

๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด Makevars๋Š”

CC=/usr/local/opt/llvm/bin/clang -fopenmp
CXX=/usr/local/opt/llvm/bin/clang++
# -O3 should be faster than -O2 (default) level optimisation ..
CFLAGS=-g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe
CXXFLAGS=-g -O3 -Wall -pedantic -std=c++11 -mtune=native -pipe
LDFLAGS=-L/usr/local/opt/gettext/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib
CPPFLAGS=-I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include

๋‚ด ์„ธ์…˜ ์ •๋ณด()

R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.6

Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8

attached base packages:
[1] stats     graphics  utils     datasets  grDevices methods   base     

other attached packages:
[1] testthat_1.0.2  devtools_1.13.3

loaded via a namespace (and not attached):
[1] compiler_3.4.2 magrittr_1.5   R6_2.2.2       withr_2.0.0    crayon_1.3.4  
[6] memoise_1.1.0  digest_0.6.12 

๋‚ด R ์„ธ์…˜

> remove.packages("data.table")
Removing package from โ€˜/Library/Frameworks/R.framework/Versions/3.4/Resources/libraryโ€™
(as โ€˜libโ€™ is unspecified)
> install.packages("data.table", type = "source", repos = "http://Rdatatable.github.io/data.table")
trying URL 'http://Rdatatable.github.io/data.table/src/contrib/data.table_1.10.5.tar.gz'
Content type 'application/gzip' length 3312684 bytes (3.2 MB)
==================================================
downloaded 3.2 MB

* installing *source* package โ€˜data.tableโ€™ ...
** libs
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c assign.c -o assign.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c between.c -o between.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c bmerge.c -o bmerge.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c chmatch.c -o chmatch.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c dogroups.c -o dogroups.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fastmean.c -o fastmean.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fcast.c -o fcast.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fmelt.c -o fmelt.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c forder.c -o forder.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c frank.c -o frank.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fread.c -o fread.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c freadR.c -o freadR.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fsort.c -o fsort.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fwrite.c -o fwrite.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fwriteR.c -o fwriteR.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c gsumm.c -o gsumm.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c ijoin.c -o ijoin.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c init.c -o init.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c inrange.c -o inrange.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c openmp-utils.c -o openmp-utils.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c quickselect.c -o quickselect.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c rbindlist.c -o rbindlist.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c reorder.c -o reorder.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c shift.c -o shift.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c subset.c -o subset.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c transpose.c -o transpose.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c uniqlist.c -o uniqlist.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c vecseq.c -o vecseq.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c wrappers.c -o wrappers.o
/usr/local/opt/llvm/bin/clang -fopenmp -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/opt/gettext/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib -o data.table.so assign.o between.o bmerge.o chmatch.o dogroups.o fastmean.o fcast.o fmelt.o forder.o frank.o fread.o freadR.o fsort.o fwrite.o fwriteR.o gsumm.o ijoin.o init.o inrange.o openmp-utils.o quickselect.o rbindlist.o reorder.o shift.o subset.o transpose.o uniqlist.o vecseq.o wrappers.o -fopenmp -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
mv data.table.so datatable.so
if [ "" != "Windows_NT" ] && [ `uname -s` = 'Darwin' ]; then install_name_tool -id datatable.so datatable.so; fi
installing to /Library/Frameworks/R.framework/Versions/3.4/Resources/library/data.table/libs
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
* DONE (data.table)

The downloaded source packages are in
    โ€˜/private/var/folders/48/q6ltldjs251000_wvjrdy_vm0000gn/T/RtmpWku3yc/downloaded_packagesโ€™
> library(parallel)
> library(data.table)
data.table 1.10.5 IN DEVELOPMENT built 2017-10-18 23:12:32 UTC; travis
  The fastest way to learn (by data.table authors): https://www.datacamp.com/courses/data-analysis-the-data-table-way
  Documentation: ?data.table, example(data.table) and browseVignettes("data.table")
  Release notes, videos and slides: http://r-datatable.com
> mclapply(1:2, sqrt)

 *** caught illegal operation ***
address 0x7fffb500eae4, cause 'illegal opcode'

@mattdowle

  1. fwrite() ๊ฐ€ ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
> mtcars <- rbind(mtcars, mtcars)
> nrow(mtcars)                                       
[1] 16777216
> fwrite(mtcars, "mtcars.csv")
Written 45.1% of 16777216 rows in 2 secs using 8 threads. anyBufferGrown=no; max
Written 69.5% of 16777216 rows in 3 secs using 8 threads. anyBufferGrown=no; max
Written 93.9% of 16777216 rows in 4 secs using 8 threads. anyBufferGrown=no; max                                                                         

@asenabouth gettext๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๊ณ  ์ง€์นจ์„ ๋”ฐ๋ฅด๋ฉด ํŒจํ‚ค์ง€๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ธ€์ด ์ข€ ์• ๋งคํ•ด์„œ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

@mattdowle

  1. dev์—์„œ omp_set_num_threads(1)์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ์ œ๊ฑฐํ•˜๋ฉด dev๋ฅผ ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์†Œ์Šค ๋˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ CRAN์—์„œ 1.10.4.2๋ฅผ ์„ค์น˜ํ•˜๋ฉด mclapply๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. github.com/Rdatatable/data๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค์˜ table@master ๋Š” ์—ฌ์ „ํžˆ ์›๋ž˜์˜ mclapply ์ค‘๋‹จ์„ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋งˆ์Šคํ„ฐ์˜ ์ˆ˜์ •๋œ ๋ฒ„์ „ ์„ค์น˜

$ git diff
diff --git a/src/openmp-utils.c b/src/openmp-utils.c
index d6e3b70..bf104fc 100644
--- a/src/openmp-utils.c
+++ b/src/openmp-utils.c
@@ -78,7 +78,7 @@ void when_fork() {
 void avoid_openmp_hang_within_fork() {
   // Called once on loading data.table from init.c
 #ifdef _OPENMP
-  pthread_atfork(&when_fork, NULL, NULL);
+//  pthread_atfork(&when_fork, NULL, NULL);
 #endif
 }
 ```

or this version

$ ์ž์‹ ์ฐจ์ด
diff --git a/src/openmp-utils.cb/src/openmp-utils.c
์ƒ‰์ธ d6e3b70..8c0236d 100644
--- a/src/openmp-utils.c
+++ b/src/openmp-utils.c
@@ -62,7 +62,7 @@ ๋ฌดํšจ when_fork() {
// Intel์˜ OpenMP ๊ตฌํ˜„์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•œ ํ›„ ์Šค๋ ˆ๋“œ๋ฅผ ๊ณ„์† ์‹คํ–‰
// ๋ณ‘๋ ฌ ์˜์—ญ; ์ด๋Ÿฌํ•œ ์ถฉ๋Œ์€ ๋ถ„๊ธฐ๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
#ifdef _OPENMP

  • omp_set_num_threads(1);
    +// omp_set_num_threads(1);
    #endif

// GNU OpenMP๋Š” ๋‹ค์Œ ๋ณ‘๋ ฌ ์˜์—ญ์„ ์ œํ•œํ•˜๋Š” DTthreads๋ฅผ 1๋กœ ์„ค์ •ํ•˜๋ฉด ๊ดœ์ฐฎ์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

clears the hang for me.

The R we use (installed as a binary from CRAN) is the 3.4.2 release

R.๋ฒ„์ „
_
ํ”Œ๋žซํผ x86_64-apple-darwin15.6.0
์•„์น˜ x86_64
OS darwin15.6.0
์‹œ์Šคํ…œ x86_64, darwin15.6.0
์ƒํƒœ
๋ฉ”์ด์ € 3
๋งˆ์ด๋„ˆ 4.2
2017๋…„
09์›”
28์ผ
svn rev 73368
์–ธ์–ด R
version.string R ๋ฒ„์ „ 3.4.2(2017-09-28)
๋ณ„๋ช… ์งง์€ ์—ฌ๋ฆ„
```

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ OMP_NUM_THREADS=2๋ฅผ ์„ค์ •ํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

when_fork() omp_set_num_threads(1); ์ฃผ์„ ์ฒ˜๋ฆฌ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋‚ด ์ปดํ“จํ„ฐ์˜ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

> mclapply(1:2, sqrt)
[[1]]
[1] 1

[[2]]
[1] 1.414214

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. dev์—์„œ ์ˆ˜์ •ํ–ˆ์œผ๋ฉฐ ํ†ต๊ณผ ์ค‘์ž…๋‹ˆ๋‹ค. @joethorley ๋‹น์‹ ์ด๋‚˜ ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ตœ์‹  1.10.5๊ฐ€ ์ง€๊ธˆ ๊ดœ์ฐฎ์€์ง€ ํ™•์ธํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? CRAN์œผ๋กœ ๊ฐ€๊ธฐ ์œ„ํ•ด 1.10.4-3 ์ค€๋น„๋ฅผ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@mattdowle

๊ณ ์ •๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ R

R version 3.4.2 (2017-09-28) -- "Short Summer"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin15.6.0 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> remove.packages("data.table")
Removing package from โ€˜/Library/Frameworks/R.framework/Versions/3.4/Resources/libraryโ€™
(as โ€˜libโ€™ is unspecified)
> install.packages("data.table", type = "source", repos = "http://Rdatatable.github.io/data.table")
trying URL 'http://Rdatatable.github.io/data.table/src/contrib/data.table_1.10.5.tar.gz'
Content type 'application/gzip' length 3313284 bytes (3.2 MB)
==================================================
downloaded 3.2 MB

* installing *source* package โ€˜data.tableโ€™ ...
** libs
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c assign.c -o assign.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c between.c -o between.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c bmerge.c -o bmerge.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c chmatch.c -o chmatch.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c dogroups.c -o dogroups.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fastmean.c -o fastmean.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fcast.c -o fcast.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fmelt.c -o fmelt.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c forder.c -o forder.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c frank.c -o frank.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fread.c -o fread.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c freadR.c -o freadR.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fsort.c -o fsort.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fwrite.c -o fwrite.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c fwriteR.c -o fwriteR.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c gsumm.c -o gsumm.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c ijoin.c -o ijoin.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c init.c -o init.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c inrange.c -o inrange.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c openmp-utils.c -o openmp-utils.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c quickselect.c -o quickselect.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c rbindlist.c -o rbindlist.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c reorder.c -o reorder.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c shift.c -o shift.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c subset.c -o subset.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c transpose.c -o transpose.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c uniqlist.c -o uniqlist.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c vecseq.c -o vecseq.o
/usr/local/opt/llvm/bin/clang -fopenmp -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include  -fopenmp -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c wrappers.c -o wrappers.o
/usr/local/opt/llvm/bin/clang -fopenmp -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/opt/gettext/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib -o data.table.so assign.o between.o bmerge.o chmatch.o dogroups.o fastmean.o fcast.o fmelt.o forder.o frank.o fread.o freadR.o fsort.o fwrite.o fwriteR.o gsumm.o ijoin.o init.o inrange.o openmp-utils.o quickselect.o rbindlist.o reorder.o shift.o subset.o transpose.o uniqlist.o vecseq.o wrappers.o -fopenmp -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
mv data.table.so datatable.so
if [ "" != "Windows_NT" ] && [ `uname -s` = 'Darwin' ]; then install_name_tool -id datatable.so datatable.so; fi
installing to /Library/Frameworks/R.framework/Versions/3.4/Resources/library/data.table/libs
** R
** inst
** byte-compile and prepare package for lazy loading
session** help
In*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
* DONE (data.table)

The downloaded source packages are in
    โ€˜/private/var/folders/48/q6ltldjs251000_wvjrdy_vm0000gn/T/RtmpmAMLnD/downloaded_packagesโ€™
> library(parallel)
> library(data.table)
data.table 1.10.5 IN DEVELOPMENT built 2017-10-19 19:32:41 UTC; travis
  The fastest way to learn (by data.table authors): https://www.datacamp.com/courses/data-analysis-the-data-table-way
  Documentation: ?data.table, example(data.table) and browseVignettes("data.table")
  Release notes, videos and slides: http://r-datatable.com
> sessionInfo()
R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.6

Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8

attached base packages:
[1] parallel  stats     graphics  utils     datasets  grDevices methods  
[8] base     

other attached packages:
[1] data.table_1.10.5 testthat_1.0.2    devtools_1.13.3  

loaded via a namespace (and not attached):
[1] compiler_3.4.2 magrittr_1.5   R6_2.2.2       tools_3.4.2    withr_2.0.0   
[6] crayon_1.3.4   memoise_1.1.0  digest_0.6.12 
> mclapply(1:2, sqrt)
[[1]]
[1] 1

[[2]]
[1] 1.414214

@joethorley ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! CRAN์— 1.10.4-3์— ์ œ์ถœํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž˜๋˜๊ณ  ์žˆ์œผ๋ฉฐ CRAN์˜ ๋งˆ๋ฒ•์ด ๊ทธ ๊ณผ์ •์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋ฉฐ์น ์ด ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

v1.10.4-3์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ(CRAN์—์„œ 2017๋…„ 10์›” 20์ผ)

  1. parallel::mclapply ๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  data.table์ด ๋กœ๋“œ๋  ๋•Œ MacOS์—์„œ ์ถฉ๋Œ/์ •์ง€๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค( #2418 ). ์ด์ƒํ•˜๊ฒŒ๋„ ํ…Œ์ŠคํŠธ 1705(data.table๋กœ mclapply ํ…Œ์ŠคํŠธ)๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ CRAN์—์„œ ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. MacOS์˜ ์ผ๋ถ€ ๋ฒ„์ „ ๋˜๋Š” MacOS์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ ํ•˜๊ณ  ์ด ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์ค€ Martin Morgan์—๊ฒŒ ๊นŠ์€ ๊ฐ์‚ฌ๋ฅผ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋˜ํ•œ asenabouth, Joe Thorley ๋ฐ Danton Noriega ๋•๋ถ„์— data.table ๋‚ด๋ถ€์˜ ์ž๋™ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ(์˜ˆ: fwrite )๊ฐ€ ์ด๋Ÿฌํ•œ MacOS ์„ค์น˜์—์„œ๋„ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ, ๋””๋ฒ„๊น… ๋ฐ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. 1.10.4-1 ๋ฐ 1.10.4-2์— ๋Œ€ํ•œ ์•„๋ž˜ ๋‰ด์Šค ํ•ญ๋ชฉ๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ง€๊ธˆ์€ ๋ฌธ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค. 1.10.4-3์— ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋‹ค์‹œ ์—ด๊ฑฐ๋‚˜ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.

@mattdowle : v1.10.4-2๊ฐ€ ์—ฌ์ „ํžˆ CRAN์—์„œ ๋ฐฐํฌํ•˜๋Š” ๋ฒ„์ „์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. v1.10.4-3์ด ์—ฌ์ „ํžˆ CRAN ์ œ์ถœ ๋Œ€๊ธฐ์—ด์—์„œ ๋Œ€๊ธฐ ์ค‘์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๊นŒ?

(์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์•Œ๋ ค์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ macOS์˜ ๋งŽ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค)

@kevinushey ์˜ˆ 1.10.4-3์ด ๋Œ€๊ธฐ์—ด์—์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(6์ผ ๋™์•ˆ ๊ทธ๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ๋ชจ๋ฅด๋Š” '์žฌํ™•์ธ' ์ƒํƒœ์—์„œ). CRAN์— ์ด๋ฉ”์ผ์„ ๋ณด๋ƒˆ๊ณ  ์ด์ œ CRAN์— ๊ณต๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์–ด์ฉŒ๋ฉด ๋‚ด๊ฐ€ ๋ญ”๊ฐ€ ์ž˜๋ชปํ•˜๊ณ  ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋‚ด Mac์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

> sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.6

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] fr_FR.UTF-8/fr_FR.UTF-8/fr_FR.UTF-8/C/fr_FR.UTF-8/fr_FR.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] httr_1.3.1      compiler_3.4.1  R6_2.2.2        tools_3.4.1     withr_2.0.0     curl_3.0       
 [7] yaml_2.1.14     memoise_1.1.0   knitr_1.17      git2r_0.19.0    digest_0.6.12   devtools_1.13.3

์†Œ์Šค์—์„œ ํฌ๋žœ ๋ฒ„์ „์„ ์„ค์น˜ํ•  ๋•Œ ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค.

> install.packages("data.table", type = "source", repos = "https://cran.rstudio.com")
essai de l'URL 'https://cran.rstudio.com/src/contrib/data.table_1.10.4-3.tar.gz'
Content type 'application/x-gzip' length 3071833 bytes (2.9 MB)
==================================================
downloaded 2.9 MB

* installing *source* package โ€˜data.tableโ€™ ...
** package โ€˜data.tableโ€™ correctement dรฉcompressรฉ et sommes MD5 vรฉrifiรฉes
** libs
clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG   -I/usr/local/include  -fopenmp -fPIC  -Wall -g -O2  -c assign.c -o assign.o
clang: error: unsupported option '-fopenmp'
make: *** [assign.o] Error 1
ERROR: compilation failed for package โ€˜data.tableโ€™
* removing โ€˜/Library/Frameworks/R.framework/Versions/3.4/Resources/library/data.tableโ€™
* restoring previous โ€˜/Library/Frameworks/R.framework/Versions/3.4/Resources/library/data.tableโ€™

Les packages source tรฉlรฉchargรฉs sont dans
    โ€˜/private/var/folders/51/6jygptvs3bb4njv0t6x7br900000gn/T/Rtmp8NJ0di/downloaded_packagesโ€™
Warning message:
In install.packages("data.table", type = "source", repos = "https://cran.rstudio.com") :
  l'installation du package โ€˜data.tableโ€™ a eu un statut de sortie non nul

ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@davidgohel : R LLVM ํˆด์ฒด์ธ์„ ๋กœ์ปฌ์— ์„ค์น˜ํ•˜๋ ค๋ฉด ์ด ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. http://thecoatlessprofessor.com/programming/openmp-in-r-on-os-x/

๋˜๋Š” R.home("etc/Makeconf") ์—์„œ ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ๋ณด์ด๋Š” -fopenmp ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ปดํŒŒ์ผ ์‹œ Apple ์‹œ์Šคํ…œ ๋„๊ตฌ ๋ชจ์Œ๊ณผ ํ•จ๊ป˜ OpenMP๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@kevinushey ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋Œ€์ฒด ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฒซ ๋ฒˆ์งธ ์†”๋ฃจ์…˜์œผ๋กœ ๋ญ”๊ฐ€๋ฅผ ๋ง์ณค๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋‚ด ~/.R/Makevars ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜๋ฉด High Sierra์—์„œ OpenMP ์—†์ด data.table์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# Suppress `-fopenmp` in R.home("etc/Makeconf")
# MAIN_LDFLAGS = -fopenmp
# SHLIB_OPENMP_CFLAGS = -fopenmp
# SHLIB_OPENMP_CXXFLAGS = -fopenmp
# SHLIB_OPENMP_FCFLAGS = -fopenmp
# SHLIB_OPENMP_FFLAGS = -fopenmp
MAIN_LDFLAGS =
SHLIB_OPENMP_CFLAGS =
SHLIB_OPENMP_CXXFLAGS =
SHLIB_OPENMP_FCFLAGS =
SHLIB_OPENMP_FFLAGS =

@mjsteinbaugh @kevinushey ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค

R.home("etc/Makeconf") ์—์„œ ํŒŒ์ผ ํŽธ์ง‘์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ํŽธ์ง‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ~/.R/Makevars ๋ผ๋Š” ํŒŒ์ผ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ œ์•ˆ: ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@ValeriVoev ~/.R/Makevars ์— ์žˆ๋Š” ํŒŒ์ผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์ฆ‰, ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์— .R ๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ํ•ด๋‹น ํด๋” ์•ˆ์— Makevars ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.)

@kevinushey ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค - ๋งˆ์นจ๋‚ด ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๊ณ  data.table 1.10.4-3์„ ์„ค์น˜ํ–ˆ๊ณ  R Studio๊ฐ€ ๋” ์ด์ƒ ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ clang์„ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค - ๊ทธ๊ฒƒ์ด ๋„์›€์ด ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Assertion failure at kmp_runtime.cpp(6480): __kmp_thread_pool == __null.
OMP: Error #13: Assertion failure at kmp_runtime.cpp(6480).
OMP: Hint: Please submit a bug report with this message, compile and run commands used, and machine configuration info including native compiler and operating system versions. Faster response will be obtained by including all program sources. For information on submitting this issue, please see http://www.intel.com/software/products/support/.

๊ทธ๋ฆฌ๊ณ  ์‚ฌ๊ฑด์€ ์ •๋ง ๋‚œํ•ดํ•˜๋‹ค.

  1. data.table 1.10.4์™€ 1.10.4-3์€ ์ €์—๊ฒŒ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ชจ๋“  ์ฒญํฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ฌธ์ œ ์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ถ€ ๋ณ‘๋ ฌ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋น„๋„คํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ๋น„๋„คํŠธ์—๋Š” ์œ„์˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋น„๋„คํŠธ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๊ฐ„๋‹จํ•œ ๋ณ‘๋ ฌ ์ฝ”๋“œ mclapply(1:2, sqrt) ๋ฅผ ๋„ฃ์œผ๋ฉด ๋น„๋„คํŠธ ๋œจ๊ฐœ์งˆ์— ๋” ์ด์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค!

์ด๋Š” ๋ชจ๋‘ ํ™˜๊ฒฝ ๋ณ€ํ™”์™€ ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ง€๊ธˆ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ์ฝ”๋“œ๋Š” ๋งค์šฐ ๋ณต์žกํ•˜๊ณ  ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

dracodoc๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ (6480)์ด ๋ฌด์ž‘์œ„๋กœ ์žก๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. macOS 10.13.3, R 3.4.3, data.table 1.10.4-3. ์—ฌ๊ธฐ์—๋Š” ์ผ๋ฐ˜ R๋งŒ ์žˆ๊ณ  ์žฌํ˜„ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์žˆ๋Š” ๊ฐ„๋‹จํ•œ mclapply๊ฐ€ ์ž‘๋™ํ•˜๊ณ  ๋•Œ๋กœ๋Š” ๋‚˜๋จธ์ง€ ์ฝ”๋“œ๋„ ์ž‘๋™ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” mclapply(1:2, sqrt) ๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ํŠธ๋ฆญ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ ๊ฒ‰๋ณด๊ธฐ์— ์ž„์˜์˜ ํšŸ์ˆ˜์˜ ์‹œ๋„๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค(์ด์ œ for (i in 1:10) mclapply(1:10000000, sqrt) ๋กœ ์ฝ”๋“œ ์‹œ์ž‘).

ํŽธ์ง‘: ์•„์•„, ์‹คํ–‰์ด ์•ˆ์ •์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์œผ๋ฉฐ mcmapply๊ฐ€ ์‹œ์ž‘๋˜์ง€๋งŒ ์ž ์‹œ ํ›„ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

์ด ์ถ”๊ฐ€ ๋Œ“๊ธ€์„ ์ด์ œ์„œ์•ผ ๋ดค์Šต๋‹ˆ๋‹ค. dev 1.10.5๋ฅผ ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ CRAN ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์‹ญ์‹œ์˜ค. ๊ทธ ํ›„์—๋„ ๋ฌธ์ œ๊ฐ€ ๊ณ„์†๋˜๋ฉด ์ƒˆ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜์‹ญ์‹œ์˜ค.

dev 1.10.5์—์„œ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ฌธ์ œ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰