로그인 해주세요.

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

Hahn

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

  • Hahn
  • 조회 수 263
  • 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 61254
핫글 자 드가자~ [13] file LG산흑우 06:28 12 211
핫글 하나 샀읍니다 [10] file LG산흑우 13:34 11 178
핫글 한 건물에 카페 5개가 있는 건 기묘하군요... [9] MrGom™ 10:50 7 242
108719 edge 우측상단 bing 아이콘 거슬리네요. [2] 순진미소년 23.03.17 1 184
108718 S22 당근하고 왔습니다 [1] 멜로엘로 23.03.17 2 296
108717 블라인드 게시물 익명 23.03.17 12 880
108716 미니기기 코리아 7행시 [3] Kanata 23.03.17 6 325
108715 근본음식 file 루시우 23.03.17 4 116
108714 반도체 소부장 지원은 꾸준히 잘 이루어졌으면 좋겠네요 [2] 익명 23.03.17 3 213
108713 저도 참석해봅니다 [1] Love헌터 23.03.17 3 100
108712 미니기기코리아로 7행시를 지어봤습니다. 어떤가요?😅 [3] file 긴닉네임24643649 23.03.17 3 156
108711 너무 바쁩니다 [5] sands 23.03.17 21 881
108710 스팀덱이,, 왔는데요. [4] Minny 23.03.17 3 215
108709 에에올 보고왔읍니다 [4] file 이태리밤고구마 23.03.17 2 277
108708 한국타이어 공장 화재원인?? [3] file PaulBasset 23.03.17 1 374
108707 보니까 수출규제 해제를 의결한 것 같던데 [8] 전자개복치 23.03.16 11 971
108706 미워도 다시 한 번인가요 루시우 23.03.16 3 233
108705 우리나라의 반도체 소부장 국산화율은 어느 정도인가요? [13] 익명 23.03.16 0 468
108704 오늘 발표된 22년도 혼인연령 통계 [5] file Angry 23.03.16 4 691
108703 쿨타임 다 차서 시전합니다 [9] file Angry 23.03.16 31 636
108702 맛있는 흰색 아이스크림 [5] file Stellist 23.03.16 10 375
108701 생산직으로 들어가서 기술 배운다는 게 가능한건가요? [5] [성공]함께크는성장 23.03.16 0 418
108700 엠빅뉴스 계정관리자 실수 했네요 ㅋㅋ [7] file 에피 23.03.16 16 849
108699 [해결] 갤럭시로 픽셀1 구글포토 무제한 사용하는분들 어떻게 사용중이신가요? [5] ′Ultra′ 23.03.16 0 471
108698 애플스토어에 심어진 나무는 사과나무일까요 [1] file WildDuck 23.03.16 5 324
108697 진성 갤럭시 팬인 가수.jpg [9] file 프로입털러 23.03.16 8 704
108696 제가 RTX 저전력 그래픽이 탑재된 제품을 선호 하는 이유가 있습니다. [3] 구해줘!맥북 23.03.16 3 246
108695 이게 정상적인 상태는 아니겠죠? [2] 루시우 23.03.16 1 192

추천 IT 소식 [1/]

스킨 기본정보

colorize02 board
2017-03-02
colorize02 게시판

사용자 정의

1. 게시판 기본 설정

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

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

2. 글 목록

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

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

3. 갤러리 설정

4. 글 읽기 화면

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

5. 댓글 설정

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

6. 글 쓰기 화면 설정

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

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