로그인 해주세요.

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

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 59819
핫글 하이브 민희진 무속인에게 경영지시 받아 [7] file 펄럭펄럭 24.04.25 10 282
핫글 대형마트 의무휴무일 폐지각 [13] BarryWhite 24.04.25 10 257
핫글 일제에 훼손된 수원 화성행궁, 35년 만에 복원 완료 [6] update BarryWhite 24.04.25 8 166
118422 리밴스드 무한버퍼링 무한로딩 해결법 최신 2023.09.04 ReVanced Buffering issue solutions [8] file 펄럭펄럭 23.03.05 7 42629
118421 번개페이 택배거래는 하지 마십시오 여러분 [11] Memeko 21.09.09 3 23733
118420 ㅎㅂ) 여자친구랑 싸우고 야스한썰.manhwa [13] file 쥬지스님 20.05.06 0 22721
118419 2019년 설날 사건사고 속보 모음.jpg [4] file BarryWhite 19.02.05 0 19712
118418 화제의 언토밥 ㅋㅋㅋㅋㅋㅋ [1] file BarryWhite 18.09.28 0 18342
118417 드라스틱 안드10이상 지원 업데이트 이후 숨겨진 경로문제&세이브 못 불러오는 문제 해결방법 별빛정원 23.02.19 5 14188
118416 에어프라이어 밑에 키친타올 깔아도 되나요? [7] 범죄자호날두 20.12.18 0 13470
118415 아라가키 유이 결혼하네요 ㄷㄷ [9] 범죄자호날두 19.09.09 0 13028
118414 군대에 반입이 가능한 전자기기는 뭐가 있나요? [11] 룬룬 21.05.13 0 12008
118413 유심인식 안되서 돌겠네요 [24] file F9F 21.05.15 2 10385
118412 당근마켓에 방해금지 시간대에 채팅 보내도 되나요? [3] [성공]함께크는성장 21.07.08 2 9578
118411 애플스토어 환불하면 입금까지 얼마나 걸리나요 [3] 뇌이징 20.09.27 2 8952
118410 노트북 스티커가 그렇게 인식이 안 좋은가요 [10] file 연말정산 21.05.22 2 8839
118409 (약ㅎㅂ)남자라면 최소 3번 보는 움짤 [3] file 맵찔맵찔 20.05.02 1 8608
118408 약간 혐오) 코비 브라이언트 헬기 추락 사고 부검서 [7] file 범죄자호날두 20.06.03 1 8226
118407 한진택배 배송원이 배송준비중 이래서 기대했는데 [6] Score_고동빈 19.11.09 0 8109
118406 퍼런 인사이드에 유명 유튜버의 조작설이 올라왔네요 [29] file mrmeiam 21.08.15 6 8104
118405 테라박스 이거 엄청 좋네요. [7] 못생겨서죄송합니다 21.10.06 2 7073
118404 탈모약 복용한지 5개월 후기 [22] file 지대공지름미사일 21.04.09 40 6941
118403 예비군2년차가 미필분들께 참고하라고 알려드림 ㅋㅋ [7] file 기기덕후 19.02.24 0 6788
118402 [24] 정치닉네임23949591 19.08.21 0 6671
118401 BC카드 치아보험전화?? [7] Memeko 19.10.21 0 6663
118400 공군 다녀오신분 계신가요? [11] 룬룬 21.08.04 0 6495
118399 카카오톡 공감 기능 하트의 의미? [4] Might 21.11.23 2 6365
118398 아찐콘 원본만화 궁금해서 찾아봤는데 [14] file [갤플당]Cyan 20.09.20 4 6312

추천 IT 소식 [1/]

스킨 기본정보

colorize02 board
2017-03-02
colorize02 게시판

사용자 정의

1. 게시판 기본 설정

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

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

2. 글 목록

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

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

3. 갤러리 설정

4. 글 읽기 화면

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

5. 댓글 설정

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

6. 글 쓰기 화면 설정

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

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