로그인 해주세요.

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

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 60737
핫글 [속보]김호중 음주운전 인정 [4] file Angry 24.05.19 12 529
핫글 안아줘요 [8] file Alternative 08:31 11 178
핫글 테슬라 카페 충격의 테슬라 사랑꾼.jpg [7] updatefile 여가어딥미코 11:36 6 201
108955 보더콜리를 지치게 하는 법 [8] file PaulBasset 23.03.30 6 657
108954 오늘은 퇴근이 늦네요 [4] Angry 23.03.30 4 100
108953 선생님들 안녕히 계세요 [4] intake 23.03.30 16 658
108952 뉴진스 코카콜라 제로 CF [3] 에피 23.03.30 3 253
108951 북한 우러 전쟁 파병 가능성 [3] 펄럭펄럭 23.03.30 3 306
108950 1억화소(12mp)x 구글캠 조합이면 하이앤드 디카급을 넘는군요; [2] file pietoro 23.03.30 5 178
108949 KFA, 이틀 만에 승부조작 사면 사실상 철회…31일 임시이사회 개최 [4] MrGom™ 23.03.30 4 256
108948 33333 [4] file Hahn 23.03.30 5 163
108947 전기 누진제 궁금한점 이 있네요 [9] 잇흥 23.03.30 1 147
108946 택배 송장 뽑을 때 수동 입력하나요? [2] MrGom™ 23.03.30 1 83
108945 컬러이북 샀슈 [2] file 하늘목장 23.03.30 1 141
108944 동해안 기차 여행 가볼만한 곳 있나요? ㅎㅎ [1] 익명 23.03.30 0 126
108943 축구도 망했고. 야구도 망했고 [5] 잇흥 23.03.30 3 380
108942 [2보] 대법 "가정용 전기요금 누진제 정당"…9년 소송 종결 [2] 연월마호 23.03.30 2 423
108941 (넷플릭스) '퀸메이커' 공식 예고편 [2] MrGom™ 23.03.30 2 258
108940 걘역시북방계 뜻을 알았네요 [3] 카더 23.03.30 2 444
108939 집나갔던 각설이가... [16] file 아이폰14프로 23.03.30 21 885
108938 서울지하철2호선 도난사건 발생 [9] file PaulBasset 23.03.30 15 890
108937 파워에이드 제로, 비타500 제로를 마셔봤는데... [3] Aimer 23.03.29 4 355
108936 신형 그랜저 9번째 리콜! [1] 잇흥 23.03.29 3 312
108935 미국판 파워레인저 30주년 기념으로 다시 나오네요 [3] 다좋은라면 23.03.29 3 138
108934 김민재 선수가 손흥민 선수 인스타를 차단해버렷군요.. [2] AGRS 23.03.29 4 358
108933 지금 국대 축구팀 뭐가 있네요 [1] Angry 23.03.29 2 181
108932 ios16.4 !!!!!!! file 개구리 23.03.29 3 201
108931 인싸들의 가게에 다녀왔습니다(feat BMT, HAM) file 루시우 23.03.29 1 120

추천 IT 소식 [1/]

스킨 기본정보

colorize02 board
2017-03-02
colorize02 게시판

사용자 정의

1. 게시판 기본 설정

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

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

2. 글 목록

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

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

3. 갤러리 설정

4. 글 읽기 화면

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

5. 댓글 설정

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

6. 글 쓰기 화면 설정

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

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