로그인 해주세요.

자유 게시판 *자유로운 대화공간입니다. 회원간 예의를 지켜주세요. #정치글 #친목 금지

Hahn

파이썬 만학도의 노트북 간이 성능테스트

  • Hahn
  • 조회 수 262
  • 2023.03.14. 21:36

코딩은 완전 까막눈인 제가 비는 시간마다 틈틈이 파이썬 기초를 공부하는 중입니다.

그런데 오늘 책에 나온 예시를 보다가 문득 이게 일종의 간이 벤치 (정수연산)가 될 수 있겠다는 생각이 들었습니다.

 

아래와 같은 코드를 입력하면 0에다 1을 더하고, 거기에 다시 1을 더하고... 하는 작업을

5초동안 반복하게 하고, 5초동안 몇번이나 반복했는지를 출력합니다.

 

회사 업무용 노트북 (LG 그램, i5 8250u, 8GB)은 2300만회~2600만회 사이를 왔다갔다 하더군요.

 

그래서 집에 와서 따끈따끈한 맥북에어 (M2, 16GB)에서 같은걸 돌려봤습니다.

스크린샷 2023-03-14 오후 9.34.24.png

 

보시는 바와 같이 두 배 조금 넘는 수치가 나왔습니다.

아마도 싱글코어만 쓰지 싶고, 이게 변별력이 있는지는 모르겠지만 저같은 초짜에겐 신기하고 재밌네요ㅎㅎ

Hahn
#Mobile
Galaxy S21 Ultra
Galaxy Watch Active 2
Galaxy Buds Pro

#At home
Macbook Air (2022, M2, 16GB, 256GB)
Epson Perfection V39
Wacom Intuos Pro M (PTH-660)

#For Machine Learning study
i7 9700 / 16GB / Quadro P400
Ubuntu 22.04.2 LTS

#For Electromagnetic Simulation
i7 9700 / 16GB / Quadro P400
Windows 8.1
댓글
6
불심
1등 불심
2023.03.15. 00:56

코딩 처음 배울때의 짜릿했던 순간이 문득 스쳐가는군요.

 

사족입니다만, 보통 n초 지연 뒤에 작업을 시킬땐 타이머를 쓰는게 더 낫습니다. 즉 5초 뒤에 반복조건을 거짓으로 만들어주는 타이머 함수를 만드시면 됩니다. 단순 덧셈이면 반복속도가 무지하게 빠르기 때문에 불필요하게 매 반복마다 시스템 호출로 시간값을 참조하는것도 퍼포먼스 낭비이자 측정오류 요소입니다.

 

아마 최적화까지 직접 해보시면 더 짜릿함을 느끼실거라 생각합니다. 즐코하세요.

[불심]님의 댓글을 신고합니다. 취소 신고
Minny 불심 님께
2023.03.15. 08:44

맞습니다. 지금 작성하신 코드를 보면, time 값을 매번 불러와서 미리 지정된 time 값과 비교하는 조건문으로 불러오도록 되어 있는데, 이 time값을 호출하는 시간 및 속도가 시스템에 따라서 천차만별이고, 상황에 따라 부정확한 값이 리턴될 수 있습니다. 특히 윈도우에 datetime 상수값을 가져오는건 상당히 느린편이기도 해서, 그만한 차이가 나왔을 수 도 있습니다..

 

저도 조금 공부하다가 현업에서 쓰는 업무용 내부 시스템이나 깔짝거리고 인프라 관리하는 업을 하다보니 지금은 못하겠는데,,,

 

그래도 생각해보면, 제가 만들었다면 가능하면 쓰래드를 하나 생성하고, 매인 쓰래드에서 생성한 쓰래드를 타이머로 제한하거나, 현재 구현한 대로 시간을 비교해서 일정시간이 지나면 종료되도록 구성하고, 생성된 쓰래드는 +1만 죽어라 하는 식으로 만들어서, 종료되면 그 값을 가져오도록 할 것 같습니다. 아니면, 역으로 어느정도까지 도달하는데 걸리는 시간을 측정하는것으로 결과치를 만들것 같습니다. 아마 그게 더 퍼포먼스가 잘 나올거예요.. 

[Minny]님의 댓글을 신고합니다. 취소 신고
Hahn
글쓴이
Hahn Minny 님께
2023.03.15. 11:07

상세한 조언 감사드립니다.

[Hahn]님의 댓글을 신고합니다. 취소 신고
Hahn
글쓴이
Hahn 불심 님께
2023.03.15. 11:00

상세한 조언 감사드립니다.

[Hahn]님의 댓글을 신고합니다. 취소 신고
Hahn
글쓴이
2등 Hahn
2023.03.15. 11:06

타이머 관련해서 인터넷을 뒤졌지만 사용방법을 제대로 알아내지 못했습니다ㅠㅠ

 

다만 두분 선생님들께서 동일하게 코멘트하신 부분이 매 반복시마다 현재시각을 참조하는게 비효율적이란 부분이네요. 그래서 아래와 같이 한번 해봤습니다.

 

import time

 

n = 0

init_t = time.time()

 

while n <= 100000000:

    n += 1

term_t = time.time()

 

t_taken = term_t - init_t

 

print("1억회 반복하는데 {t_taken}초가 소요되었습니다.")

 

이러면 루프가 시작할때와 끝날때 두번만 시간을 참조하게 되는거 맞을까요?

이렇게 하니 퍼포먼스가 2배정도 향상되긴 했습니다:)

 

 

[Hahn]님의 댓글을 신고합니다. 취소 신고
Minny Hahn 님께
2023.03.15. 12:09

맞습니다. 제가 파이썬쪽은 코드를 제대로 봐 본적이 없어서 개념이 맞을지는 모르겠지만...

 

time 객체에서 현재시간을 불러오는 time함수를, 지난번 코드는 +1 을 하기 위해서 매번 불러왔다면

 -> while time_1 > time.time()

이번에는 time() 함수를 순수하게 두번만 부른 코드입니다. 

 -> init_t = time.time();   //시작시점의 현재시간 정의

 -> time_t = time.time();   //종료시점의 현재시간 정의

 

즉 지난번 코드에서는 n+1을 연산하기전 time() 값을 먼저 호출했기 때문에 순수하게 CPU가 +1 을 한 것 보다 퍼포먼스가 낮아질 수 밖에 없습니다. 단순히 생각해봐도 정수 +1 하는것 보다 현재시간을 불러오는 함수를 호출해 연산해 뿌리고 이를 시간 비교를 하는게 CPU 입장에서는 같은 속도라면 더 늦을 수 밖에 없고, 이게 퍼포먼스에 영향을 미치겠죠. 즉 첫 소스에서는 정수 +1의 성능을 측정한 것 보다, 현재시간과, 지정한 시간을 서로 비교 하는 성능을 측정하게 된 꼴입니다. 그리고 OS나 언어별로 속도가 다르기도 하고 비교하는 시점에 이미 시간이 지나가기 때문에 사실 정확한 타이밍을 핸들링하기도 어렵습니다.

 

이번 코드도 사실 CPU의 정수 계산 성능을 측정하기에는 조금 부적절하긴 합니다. 왜냐면 n += 1 을 하기 위해서 n <= 100000000 를 계속 계산해내서 true인지 false인지를 계속 계산해내고 있거든요. 그래서 보통은 CPU 성능을 측정하기 위해서는 별도로 순수하게 연산만 하는 쓰래드를 생성하고 돌리면서, 매인이 되는 UI쓰래드나 컨트롤쪽 쓰래드에서 이를 핸들링 하는 식으로 구성하는게 보통입니다. 물론 이것도 별도 쓰래드를 만든다는게 이미 오버해드를 잡아 먹고 있고, 컨트롤을 하는 쓰래드쪽에서 결국은 핸들링을 위해 또다른 CPU 시간을 사용해야하기 때문에, 정확할 순 없지만, 멀티 코어가 이제는 기본인 환경에서는 적절한 방법이기도 합니다. 

 

물론 이정도 레벨에서는 컴파일러랑 스캐줄에 의해서 충분히 최적화되어 구동되기 때문에 현재로써 간단하게 성능을 측정할 수준은 될 것 같습니다 ;) 

[Minny]님의 댓글을 신고합니다. 취소 신고
취소
번호 제목 글쓴이 날짜 조회 수
공지 사이트 이용 수칙 230228 수정 admin 19.11.25 7 60872
핫글 이직하고 일주일 만에 참 많은 일들이 있었네요. [10] update 그렇군요 24.05.31 12 359
핫글 미코 여러분들께 사과드립니다 [2] 레쓰비 06:26 12 297
핫글 현직 사방기념공원 입니다 [3] file 금어초8gen3 24.05.31 5 144
109020 '위대한 쇼맨' 또 재개봉 하는군요 [2] MrGom™ 23.04.03 2 333
109019 오밤중에 예상치 못한 사고(?)로 보호필름 교체했네요 Angry 23.04.03 1 85
109018 뉴진스는 CM송도 1위 시킬까요? [3] file 에피 23.04.03 3 252
109017 프랑스 파리 시내에서 전기 스쿠터, 킥보드 대여업이 전면 금지됩니다. [5] Aimer 23.04.03 9 346
109016 안경테 도금 의뢰했네요 [4] Angry 23.04.03 2 318
109015 폰이 오래되면 악세사리 가격도 오르는군요ㅠㅠ [7] 다좋은라면 23.04.03 0 289
109014 민.초.좋.아 [2] file 1q2w3e4r! 23.04.03 8 138
109013 '프듀 조작 논란' 안준영 PD, Mnet 재입사…출소 후 조용한 복귀 [4] MrGom™ 23.04.03 5 431
109012 아이패드도 이런거 나오면 좋겠어요 file Qkooqq 23.04.03 1 205
109011 ChatGPT 결제 이슈 [4] file 웨이 23.04.03 2 321
109010 🚗🌸 어제 벚꽃 데이트 다녀왔습니다? [4] file 히타기새 23.04.03 8 255
109009 운전 생각보다 더 어렵네요 [2] 버거킹아메리카노 23.04.03 5 222
109008 현대카드 이제 배송오네요 [1] sourire 23.04.03 1 158
109007 건강을 위해 포케를 사왔습니다. 다물 23.04.03 4 121
109006 글을 제목만 보는 사람이 너무 많은것 같네요. [2] propeller 23.04.03 7 245
109005 간편결제 통하면원화결제 차단 안되는군요 [2] 미하엘무야허 23.04.03 0 156
109004 아직도 애플페이 안써본 사람이 있나요? ㅋ [5] file jejuscryst 23.04.03 5 370
109003 슬슬 덥다싶어 시도해봤습니다(feat 냉소바) [5] file 루시우 23.04.03 7 253
109002 진짜 요새 당근거지 너무 많아졌네요 [7] 댕밤 23.04.03 10 510
109001 벌써 4월입니다... CaffeineJuice 23.04.03 2 140
109000 오피셜) 첼시 . 포터 감독 해임 [1] 잇흥 23.04.03 2 218
108999 퇴근했는데요 [2] 이태리밤고구마 23.04.02 2 158
108998 음악가 사카모토 류이치 별세 [9] Stellist 23.04.02 7 391
108997 방과후 전쟁활동 1줄 요약 [3] 으르렁자몽이 23.04.02 5 407
108996 챗 GPT 패배 [4] file 펄럭펄럭 23.04.02 13 664

추천 IT 소식 [1/]

스킨 기본정보

colorize02 board
2017-03-02
colorize02 게시판

사용자 정의

1. 게시판 기본 설정

게시판 타이틀 하단에 출력 됩니다.

일반 게시판, 리스트 게시판, 갤러리 게시판에만 해당

2. 글 목록

기본 게시판, 일반 게시판, 썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

3. 갤러리 설정

4. 글 읽기 화면

기본 10명 (11명 일 경우, XXXXX 외 1명으로 표시)

5. 댓글 설정

일정 수 이상의 추천을 받은 댓글에 표시를 합니다.

6. 글 쓰기 화면 설정

글 쓰기 폼에 미리 입력해 놓을 문구를 설정합니다.

서버에 요청 중입니다. 잠시만 기다려 주십시오...