Lapack: ./EIG/xeigtstz์˜ Segfault

์— ๋งŒ๋“  2019๋…„ 04์›” 19์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Reference-LAPACK/lapack

์•ˆ๋…•,

์ด๊ฒƒ์€ Lapack 3.8.0๊ณผ ํ•จ๊ป˜์ž…๋‹ˆ๋‹ค.

lapack 3.8.0 ๋ฐ ์ตœ๊ทผ gfortran์„ ์‚ฌ์šฉํ•˜๋Š” xeigtstz์—์„œ segfault๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

./EIG/xeigtstz < nep.in > znep.out 2>&1
/bin/sh: Zeile 1: 9026 Speicherzugriffsfehler(Speicherabzug geschrieben) ./EIG/xeigtstz < nep.in > znep.out 2>&1

์Šคํƒ ์ œํ•œ์ด ๊ธฐ๋ณธ๊ฐ’์ธ 8192kb์—์„œ 81920kb(
๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ์ฒซ ๋ฒˆ์งธ ๊ฐ’).

Build System Testing

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

https://github.com/Reference-LAPACK/lapack/issues/276 ์˜ ๋ณต์ œ๋ณธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

gfortran9๋Š” (ํŠนํžˆ) TESTING/EIG/zhet21.f ๋ผ์ธ 304(1์—์„œ N-1๊นŒ์ง€ ์‹คํ–‰๋˜๋Š” J์—์„œ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ฐฐ์—ด ์š”์†Œ U(1, J-1 )์— ์•ก์„ธ์Šค)์—์„œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์•ก์„ธ์Šค์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์•„์•ผ). ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์ด ๋ฌธ์ œ์˜ ์œ ์ผํ•œ ์›์ธ์ธ์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ...
ํŽธ์ง‘: ๋‚ด ๊ด€์ฐฐ์€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. (์‚ฌ์‹ค ์ด๋ฏธ #333์„ ์—ด์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค) xeigtstz๋Š” https://github.com/xinyi/OpenBLAS/ ์— ์ด๋ฏธ ์–ธ๊ธ‰๋œ NEP ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์Šคํƒ์— ์•ฝ 10MB๋ฅผ ํ• ๋‹นํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ 8192 ๋Œ€์‹  ulimit -s 16384 ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ด ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ #85์—๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์Šคํƒ ์ œํ•œ์„ ๋†’์ด๋Š” ๊ฒƒ์ด์ง€๋งŒ ํ…Œ์ŠคํŠธ์ด๋ฏ€๋กœ ํž™ ํ• ๋‹น์ด ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ด ์•„๋‹๊นŒ์š”?

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด '์žฌ๊ท€์ ' ์˜ต์…˜(์Šค๋ ˆ๋“œ ์•ˆ์ „์„ ์œ„ํ•ด ํ•„์š”)์œผ๋กœ ์ธํ•ด ์Šคํƒ์—์„œ ๋๋‚˜๋Š” ํ• ๋‹น ๊ฐ€๋Šฅํ•œ ๋ฐฐ์—ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์•„์ง ์ž‘๋™ํ•˜๋Š” ์†”๋ฃจ์…˜์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

@weslleyspereira ๋Š” -frecursive ์˜ต์…˜ ์—†์ด zchkee.f๋งŒ ์ปดํŒŒ์ผํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ํŒŒ์ผ(ํŠนํžˆ liblapack.a)์€ -frecursive ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ๋˜์ง€๋งŒ zchkee.f๋Š” -frecursive ์˜ต์…˜ ์—†์ด ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ํŠธ๋ฆญ์„ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ/ํฌ๋งํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ…Œ์ŠคํŠธ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. -frecursive๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LAPACK์„ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ zchkee.f ์—†์ด ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์„๊ฑฐ์•ผ. CMake์™€ make๋Š” ์ข€ ๋” ๋ชป์ƒ๊ฒผ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์— ๋Œ€ํ•œ ๊ธฐํ•œ์ด ์˜ค๋ž˜๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ์€ ๊ทธ๊ฒƒ์„ ๋ชป๋˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

OpenMP๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ ์ €๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์ง€๋งŒ ํ›„์ž๋Š” ๋ถˆํ–‰ํžˆ๋„ -frecursive๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
(Makefile์—์„œ filter_out์„ ์‚ฌ์šฉํ•˜์—ฌ FFLAGS์—์„œ frecursive/Mrecursive๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ƒˆ๋กœ์šด ์ถ”์•…ํ•จ์€ ๋งŽ์ง€ ์•Š์Œ)

OpenMP๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ ์ €๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์ง€๋งŒ ํ›„์ž๋Š” ๋ถˆํ–‰ํžˆ๋„ -frecursive๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์•„. ์˜ˆ, ์ž ์žฌ์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

(Makefile์—์„œ filter_out์„ ์‚ฌ์šฉํ•˜์—ฌ FFLAGS์—์„œ frecursive/Mrecursive๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ƒˆ๋กœ์šด ์ถ”์•…ํ•จ์€ ๋งŽ์ง€ ์•Š์Œ)

์•„, ์ข‹์€ ์ƒ๊ฐ์ด์•ผ. Makefile์˜ filter_out์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ „ํ˜€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๋” ๋‚˜์œ ์กฐ์‚ฌ. ํŒ ๊ณ ๋งˆ์›Œ.

TESTING/EIG/Makefile, include ../../make.inc ์ถ”๊ฐ€ ํ›„

FFLAGS := $(filter-out -frecursive -Mrecursive,$(FFLAGS))
FFLAGS_DRV := $(filter-out -frecursive -Mrecursive,$(FFLAGS_DRV))
LDFLAGS := $(filter-out -frecursive -Mrecursive,$(LDFLAGS))

cmake์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
string(REGEX REPLACE "-(fM)recursive" "" FFLAGS ${FFLAGS})
(ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์Œ)

@martin-frbg ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” ์ง€๊ธˆ ๊ทธ๊ฒƒ์„ ํ…Œ์ŠคํŠธ ํ•  ๊ฒƒ์ด๋‹ค

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