로그인 해주세요.

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

Hahn

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

  • Hahn
  • 조회 수 261
  • 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 58911
핫글 진해 여좌천 현 상황 [12] updatefile 피실 18:13 14 279
핫글 맛있는 소고기 [5] updatefile 쿼드쿼드 17:59 7 111
핫글 특가게시판 보고 산 돈까스 실수 했네요 [6] 에피 16:48 6 217
108706 GPT-4 구독할까 고민이에요 [10] sourire 23.03.15 2 329
108705 오늘의 카페(feat. 백수) [1] file 노빌리티 23.03.15 5 155
108704 갤럭시 일반과 플러스도 눈알 5개될 가능성이 있을까요? [3] 익명 23.03.15 2 362
108703 차이가 확연한? 구글캠과 기본캠 [11] file pietoro 23.03.15 3 358
108702 요즘 로그인 자주 풀리네요 [1] 🤏tozoom 23.03.15 1 91
108701 20일부터 대중교통 마스크 해제 [6] Kanata 23.03.15 4 371
108700 오늘의 치트키 시전합니다! [13] file 텀블러강제수집가 23.03.15 28 563
108699 악전후 속에서도 알을 품는 송골매 부부.live 나르자 23.03.15 3 207
108698 3월 31일에 애플스토어에서 미코키고 [3] file 어디로가야합니까 23.03.15 2 383
108697 ㄷㄷ 알리 환불 [4] file elcid 23.03.14 3 414
108696 우리나라 세대 중 언제가 제일 다이나믹 했을까요? [5] 우주안녕 23.03.14 1 241
파이썬 만학도의 노트북 간이 성능테스트 [6] file Hahn 23.03.14 5 261
108694 슬슬 즐기러 또 나가보겠습니다 [5] file AV_Lover 23.03.14 10 314
108693 도정제 미는 양반들 잘못 생각한게 [5] SM-G986N 23.03.14 3 296
108692 코로나19 누적 확진자수... [1] file 익명 23.03.14 1 267
108691 애플 칩 성능이 저리 좋은 걸 보면 [25] 익명 23.03.14 3 677
108690 미코에서 이상하게 댓글이 2개씩 써질때가 있네요. [2] propeller 23.03.14 0 138
108689 도서정가제는 솔직히 [7] 민초홀릭 23.03.14 15 454
108688 스벅은 그러고 보면 진짜 양이 작은거 같아요.. [3] 에피 23.03.14 4 376
108687 2022년 미코 정모 짤 [5] file Kanata 23.03.14 8 428
108686 시계 뭐살까요 [2] file 아재건달_보노뭘보노 23.03.14 1 148
108685 삼닷에서 네페포인트 쓰고 싶어요 [5] [성공]함께크는성장 23.03.14 3 291
108684 삼성 갤럭시가 절전120hz를 공식 지원했으면 좋겠군요 [6] 익명 23.03.14 1 427
108683 운동하고 오면서 편의점 앞에서 분쟁조정을 봤네요 [11] 흡혈귀왕 23.03.14 7 654
108682 모바일 통신 질문드립니다. 개통 철회 후 원복 포기하면 페널티 있나요? colaH 23.03.13 0 139

추천 IT 소식 [1/]

스킨 기본정보

colorize02 board
2017-03-02
colorize02 게시판

사용자 정의

1. 게시판 기본 설정

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

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

2. 글 목록

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

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

3. 갤러리 설정

4. 글 읽기 화면

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

5. 댓글 설정

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

6. 글 쓰기 화면 설정

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

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