KTUG마당은 KTUG를 방문하는 모든 이용자가 대화를 나누고 소식을 전하는 곳입니다.
- 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
- Team Blog의 글을 이곳 게시판의 "정보글"로 모았습니다. Team blog는 기고자가 올린 글에 질문을 받는 부담을 줄이기 위하여 댓글을 허용하지 않았습니다. 그러나 이곳 게시판으로 모으면서 댓글을 달 수 있습니다. 게시물을 작성하실 때 댓글을 원하지 않으시면 댓글을 허용하시지 않으시기를 바랍니다. 또한 불필요한 소모성 댓글을 달지 않도록 주의하여 주시기를 바랍니다.
- TeX과 관련된 질문이나 답변은 QnA 마당을 이용하십시오. TeX과 관련된 질문은 지웁니다
- MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
- 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
- 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
- 사용하는 편집기는 CKeditor입니다. 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한줄을 비웁니다. 글줄만 바꾸려면 shift-enter 를 누르시면 <BR>가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.
자유글 다가 올 파이데이를 미리 기념하며
2015.03.05 20:16
wget http://www.angio닷net/pi/pi50.4.bin
pi.luapi.texpi50.4.bin
luajittex "\def\n{10000} \input pi"
luajittex pi
Output written on pi.pdf (11793 pages, 33050291 bytes).real 0m48.990suser 0m48.032ssys 0m0.921s
2초 단축
댓글 17
-
DohyunKim
2015.03.06 11:23
-
작나
2015.03.06 13:42
특별한 이유없습니다. 저는 bit32라는 모듈을 통해서 lua에서 비트 연산이 가능한지 모르고 있었습니다.
luajit에는 bit 모듈이 기본으로 되어있고, 우연히 /usr/texbin 디렉토리를 보다보니 luajittex이 보이길래 반가운 마음에 luajittex을 돌려볼 꺼리를 찾다가 파이 찍기를 해본 것입니다.
저는 업무에 nginx라는 웹서버를 사용하는데, 이 웹서버에 루아를 임베드해서 매우 편리하고 효율적으로 nginx를 운영하고 있습니다. 이때, 성능상의 이유로 lua 보다는 luajit을 사용합니다. 그러던 차에 luajittex을 만나서...
게다가 luajit에는 ffi 모듈을 통하여 C 라이브러리를 매우 쉽게 가져다 사용할 수도 있습니다. 이러한 모듈을 통해서 시스템의 성능을 향상 시킬 수 있습니다.
파이를 찍기 위해서 비트연산을 사용했지만, 사실은 비트연산 필요없이 나누기와 모듈러연산(%또는 mod) 연산만으로 luajit을 사용하지 않고 lua만으로도 가능합니다. 그러면, 해보지는 않았지만 오천만자리까지 찍는데 아마 매우 오래 걸릴 것입니다.
-
작나
2015.03.06 16:23
차이가 없나요? ㅎㅎ
파이의 소숫점 숫자들을 담고 있는 바이너리 파일의 구조가 아시다시피 한 바이트(8비트)의 상위 4비트에 한 숫자, 하위 4비트에 한 숫자가 들어있으므로 이번 경우는 의미상 비트 연산을 통하여 두 숫자를 뽑아 내는게 맞는거 같습니다. 그래서 비트연산을 한 것이지 산술연산보다 비트 연산을 선호해서 한 것은 아닙니다. 산술 연산이 의미적으로 맞으면 일부러 비트연산을 할 필요는 없습니다.
어떤 알고리즘을 구현할 때 비트 연산을 하는 것이 성능 향상은 물론이고, 깔끔하고 오히려 이해가 쉬울 때가 있습니다. 기억하시겠지만, 몇 해전에 이 게시판을 통해서 N-Queen을 텍과 C를 조합한 문학적 프로그램을 소개한 바 있었는데, 그때 nqueen 프로그램이 비트 연산을 주로 구현했던 것입니다. 그래서 다른 구현방법보다 성능이 월등했구요. 그 구현 방법이 제 기준으로는 매우 아름다웠던 걸로 기억합니다. (제가 구현했던게 아니라 제프라는 사람이 구현했던거 같습니다.)
참고로 조합 알고리즘을 다루는 Knuth 교수의 The Art of Computer Programming Vol 4A.의 앞 부분에서 비트 연산을 상당히 깊이 있게 다루고 있습니다. 조합론 문제라는 것이 해결에 매우 많은 시간을 요하는 경우가 대부분이라, 앞으로 벌어질 알고리즘 구현이라는 전투에 대비해서 총알을 잔뜩 준비하는 과정으로 비트연산을 다루는 것으로 알고있습니다.
-
DohyunKim
2015.03.06 18:50
네, 그렇군요. 덕분에 비트 연산에 대해 조금은 알게 되었습니다.
감사의 뜻으로, 비트 연산을 산술 연산으로 바꾼 것을 첨부해봅니다. luatex이든 luajittex이든 어느 것으로나 컴파일 가능합니다.
-
likesam
2015.03.06 12:21
저도 거의 7~10년간 쓰고 있는 제 데스크탑에서 최대치 5천만 자리를 찍는 데 4분 19초 90이 걸리는 군요.
- 환경
- CPU : AMD Athlon 64 X2 Dual Core 4000+
- Ram : 8G
- OS : Vista sp2 X64
- TeX Live 2014
- 사용 명령은
- start /high /wait luajittex "\def\n{50000000} \input pi"
아래의 Progress님께서 시간 측정을 위해서 TCC/LE를 설치하셨네요. TCC/LE를 설치하셨다면 명령은 아래처럼 하면 됩니다.
- > timer & start /high /wait luajittex "\def\n{50000000} \input pi" & timer
중간에 start를 넣은 것은, 실행우선순위를 high로 잡아서, 조금이라도 일찍 끝내려는 꽁수였습니다. ^^
TCC/LE는 https://jpsoft닷com/tccle-cmd-replacement.html 에서 구하실 수 있습니다.
- 환경
-
DohyunKim
2015.03.06 13:56
누구도 범접할 수 없는 실행 속도!!! 짱 드실 거 같은 예감입니다.
-
Progress
2015.03.06 12:26
어떻게 7년된 놋북보다 속도가 더 안 나오다니...
특히 그간 틈틈이 맥북 업그레이드한 보람이 없네요. ㅠㅠ.
PC: win7 32bit/ cpu 인텔 i5-3470 3.20 GHZ/ 램 4GB/하드 인텔 SSD 330시리즈 120GB
*속도 재기 위해 TCC/LE 설치하고 컴파일
2분 49.87초
Macbook: 요세미티/ cpu 인텔 Core2Duo 2.26 GHZ/ 램 8GB/하드 삼성 SSD 830시리즈 256GB1분 42.075초
-
DohyunKim
2015.03.06 13:53
luatex 버전이 저하고 달라서 그런 거 같으니 너무 상심 마십시오.
제 맥북은 동일한 기종이고요, 램 4기가, 하드디스크는 바꾸지 않아서 구식 원통입니다.
-
하늘연
2015.03.06 20:50
2013년 1월에 산 노트북이고...
CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
Memory : 5.5GBSSD 256GB운영체제 : 리눅스 민트기반인 HarmoniKR입니다. -
지나가다
2015.03.07 14:59
Output written on pi.pdf (11793 pages, 33035304 bytes).
Transcript written on pi.log.
real 0m51.315s
user 0m50.354s
sys 0m0.929s
요세미티, MacBook Pro (Retina, 15-inch, Late 2013), 2.3 GHz Intel Core i7, Mem 16GB, SSD 512GB 입니다.
것만 번드르르하지 성능은 별로네요.
-
작나
2015.03.13 14:50
http://goo.gl/8QMDL2 에 파이 관련 재미있는 그림이 있습니다. ps 파일.
$\pi$-decimals by Kees van der Laan
-
DohyunKim
2015.03.14 14:01
postscript를 알지 못하지만 대강 눈치로 파악해서 비슷하게 만들어보았습니다.
TeX과 Lua와 MetaPost의 조합입니다. lualatex으로 컴파일합니다.
http://goo.gl/bWHD77
-
Progress
2015.03.17 10:54
pisprial2.tex 을 lualatex으로 컴파일할 때 멎는 부분이 있습니다. 윈도7이나 맥텍이나 동일하고요.
어떤 부분이 문제일까요?
윈도7 TeXLive2014, lualatex 컴파일
맥 OSX 요세미티 MacTeX2014, TeXshop 컴파일
*참고로 윈도7에서 컴파일할 때는 Helvetica 폰트만 교체했습니다. 맥에서는 그냥 뒀고요.
% \setmainfont{Helvetica}
\setmainfont{Myriad Pro}*로그 파일 첨부 (pisprial2.log.tex)
-
DohyunKim
2015.03.17 11:09
luatex 바이너리를 최근 버전으로 업데이트해야 합니다.
TL2015가 출시될 때를 기다리시던지, 아니면...
http://goo.gl/APRTKV
-
Progress
2015.03.17 17:06
하필 회사 운영체제가 윈7 32비트네요. 집에서 해봐야겠어요.
맥용은... 복사하다 다칠까봐 패스.
[추가]
pisprial에서 3.141592... 숫자가 주루룩 소용돌이로 내려가면서 색깔을 좀 바꿔보려고 했는데,
가령 withcolor의 red에 (180-i)/180의 숫자를 스텝마다 곱하는 것으로...
잘 안 되네요. 역시 어려워요. ^^;
여하튼 작나님과 같은 의견입니다. 멋있네요.
-
작나
2015.03.17 11:28
저도 루아텍을 사용하면서 얼마전에 비슷한 문제를 겪었습니다.
http://goo.gl/4yxIFp
최신 바이너리로 교체후 아무 문제가 없습니다.
어쨌든, pisprial 코드도 그렇고 출력물도 그렇고,
정말 멋집니다.
-
Progress
2015.03.14 02:16
드디어 파이데이입니다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
588 | QnA 게시판에 공지글 생성 건의 [2] | mcpark | 2015.04.07 | 3065 |
587 | tex live 2014 spelling 철자 검사 관해서.. [2] | ㅅㅈ | 2015.03.19 | 3102 |
586 | 텍 사용자들이 파이 데이를 기념해야 하는 이유 [1] | 작나 | 2015.03.14 | 3065 |
585 | 루아텍 코어덤프... [2] | 작나 | 2015.03.11 | 3113 |
584 | 파이 데이 기념? [6] | nanim | 2015.03.06 | 3622 |
» | 다가 올 파이데이를 미리 기념하며 [17] | 작나 | 2015.03.05 | 3704 |
582 | 재미로 해보는 매크로 작성 [중급?] [2] | nanim | 2015.03.04 | 3065 |
581 | xparse의 argument option | nanim | 2015.03.04 | 3339 |
580 | 플레인텍에 이미지 넣기 [6] | 작나 | 2015.03.03 | 3048 |
579 | 재미로 해보는 매크로 작성 [20] | nanim | 2015.03.02 | 3776 |
578 | 그땐 그랬지 [3] | 작나 | 2015.02.28 | 3061 |
577 | texdoc [7] | nanim | 2015.02.26 | 3071 |
576 | 크누스 교수의 수표 받는 법 [1] | 작나 | 2015.02.23 | 3014 |
575 | plain.tex으로 배우는 텍 프로그래밍 [4] | 작나 | 2015.02.23 | 3050 |
574 | 옷, 디자인이 바뀌었군요! | Dennis | 2015.02.22 | 3020 |
573 | 연분수 조판 시리즈 마지막 [1] | 작나 | 2015.02.19 | 3176 |
572 | 설 명절 잘 보내십시오 [5] | Progress | 2015.02.17 | 3001 |
571 | 연분수 조판 2탄 [9] | 작나 | 2015.02.17 | 3199 |
570 | 텍 프로그래밍 [4] | 작나 | 2015.02.13 | 3047 |
569 | 연분수 조판 소개 [9] | 작나 | 2015.02.13 | 3307 |
7년간 쓰고 있는 제 놋북에서 최대치 5천만 자리를 찍는 데 1분 30초가 걸리는군요. 각자 기계 자랑 좀 해보시죠.
비트 연산에 대해 아는 게 없어서 하는 질문입니다만 luatex으로 하면 안 되는 특별한 이유가 있나요? 현재 luatex에 들어있는 lua 5.2에는 bit32 모듈이 내장되어 있습니다. bit 대신 로드해서 luatex으로 돌려보니 5천만 자리에 1분 45초가 걸렸습니다. 생각만큼 큰 차이는 나지 않네요.
추가: 찾아보니 최신 버전인 lua 5.3에서는 bit32 모듈이 deprecated 되었습니다. 앞으로 언젠가는 luatex에서 이 모듈을 쓸 수 없게 될 거라는 얘기입니다. 그대신 5.3에서는 &, >> 따위의 비트연산자가 새로 생긴 거 같더군요.
추가: 비트 연산을 산술 연산으로 고쳐서 돌려봐도 실행속도에는 차이가 없어보이는데 전문 프로그래머들은 왜 비트 연산을 선호하는 지 궁금하네요. 이진법 숫자에 익숙해서일까요?