SlideShare a Scribd company logo
PureEducation : https://youtu.be/_IVqMXPFYwI
WRITING FAST CODE
파이콘 한국 2015
김영근 (@scari_net)
발표자 소개
• 김영근 a.k.a. scari
• http://younggun.kim
• Badass Alien @ D9, 스마트스터디
• PyCon KR Organizer
• PyCon US 2015 Session Staff
내가 생각하는 내 코드의 실행 속도
영화 놈놈놈
실제 실행 속도
The Killers : All These Things That I’ve Done M/V

https://youtu.be/sZTpLvsYYHw
목표
• 컴퓨터와 파이썬의 내부 이해하기
• 프로파일링으로 핫스팟 찾기
• 개선 -> 빠른 코드!
진짜 목표
• 빠르면서도 느린 컴퓨터
• 잘 모르겠지만 프로파일링은 좋은 녀석
• 나도 빠른 코드 짜고 싶다.
근데 왜? Why?
10만명이 사용하는 코드의 성능을 1초만 개선하면
10만초 -> 하루하고도 3시간 46분 40초 절약
인류가 낭비하는 시간 절약!
발표 순서 TOC
컴퓨터의 동작 원리부터
파이썬 코드가
어떻게 굴러가는지 확인
프로파일러 한 숟가락 넣고
간단한 개선 작업 후 성능 확인
WARNING
Don’t worry. I know this is PyCon.
컴퓨터의 동작 원리부터
입출력 장치 <<<넘사벽<<< 메모리
모스(Morse) 부호
Modem (2400)
CDMA(2G)
HSPA(3G, DL)
LTE*
USB 2.0
802.11n
USB 3.0
SATA 3.0
Thunderbolt 2
DDR2 1066Mhz
DDR3 1600Mhz
https://en.wikipedia.org/wiki/List_of_device_bit_rates
≈ 21 bps
≈ 2400 bps
≈ 153 kbit/s
≈ 13.98 Mbit/s
≈ 100 Mbit/s
≈ 480 Mbit/s
≈ 600 Mbit/s
≈ 3 Gbit/s
≈ 6 Gbit/s
≈ 20 Gbit/s
≈ 64 Gbit/s
≈ 102.4 Gbit/s
우왕 역시 메모리 짱 빠룸!
(과연...)
DDR3 1600Mhz
FSB 400 (old Xeon)
PCI Express 3.0 (x16)
QuickPath Interconnect
HyperTransport 3.1
L3 Cache(i7-4790X)
L2 Cache(i7-4790X)
≈ 12.8 GB/s
≈ 12.8 GB/s
≈ 16 GB/s
≈ 38.4 GB/s
≈ 51.2 GB/s
≈ 170 GB/s
≈ 308 GB/s
오케이...
컴퓨터의 계산 방식
0 or 1
00100000001000100000000101011110
00100000001000100000000101011110
opcode
addr 1
addr 2
value
MIPS32 Add Immediate instruction (ADDI)
addi $r1, $r2, 350
Clock
Hz (Hertz)
Writing Fast Code (KR)
인스트럭션 당 하나 이상의 클럭
여러 클럭이 필요할 수도 있음
엄마가!
밥 먹으면서!
스마트폰!
어!
보지 말라고!
몇 번을!
말해!
으휴~~~
(찰싹!)
(찰싹!)
(찰싹!)
(찰싹!)
(찰싹!)
(찰싹!)
(찰싹!)
(찰싹!)(찰싹!)(찰싹!)(찰싹!)
Writing Fast Code (KR)
좀 더 알아보기 쉽게
1초에 찰싹 한번 = 1Hz
1초에 찰싹 한번
L1 Cache Acces
L2 Cache Access
L3 Cache Access
RAM Access
SSD I/O
HDD I/O
Internet: Seoul to SF
IPython 실행 (0.6초)
Reboot (5m)
= 1Hz
3초
9초
43초
6분
2-6일
1-12달
12년
63년
32,000년!!
거리로 환산
L1 Cache Acces
L2 Cache Access
L3 Cache Access
RAM Access
SSD I/O
HDD I/O
Internet: SF to Seoul
IPython 실행 (0.6초)
Reboot (5m) 32,000년!!
내 책상
방 창문
집 밖
지하철 역
걸어서 부산까지
걸어서 인천-런던 왕복
명왕성 벗어남...
처녀자리 70 b
안드로메다?
결국 컴퓨터가 하는 일
찰싹 찰싹 맞으며
때로는 먼 우주로부터 데이터를 가져와서
처리하는 것.
1초에 찰싹 한번 = 1Hz
그러니까 일을 덜 하면 덜 아프다..
가 아니고 빠르다.
이제 파이썬
dis
dis
아니고.
pip install dis
Writing Fast Code (KR)
소스 줄 번호
주소 / 명령 파이썬 코드
인자
간단한 list dis질
빈 리스트 생성
[] vs list()
import dis
def create_empty_list():
return list()
def create_empty_list2():
return []
print('list()')
dis.dis(create_empty_list)
print('[]')
dis.dis(create_empty_list2)
Writing Fast Code (KR)
아이템 찾기
import dis
def find_x(x, my_list):
for elem in my_list:
if x == elem: return True
def find_x2(x, my_list):
if x in my_list: return True
print('find_x()')
dis.dis(find_x)
print('find_x2()')
dis.dis(find_x2)
Writing Fast Code (KR)
Writing Fast Code (KR)
어떻게 동작하는지는 오케이.
그럼 얼마나 걸리는지는?
각종 프로파일러
• timeit
• cProfile
• line_profiler
• profiling
timeit
간단.
ipython 에서는 %timeit
shell에서는 python -m timeit -c “”
GC를 비활성 하므로 일반적인 상황과는 다름.
Writing Fast Code (KR)
• cProfile
• 오버헤드 좀 있음.
• 대신 정보량도 많음.
• python -m cProfile code.py
• profiling
• 실시간
• 이흥섭님의 세션을 참고
간단한거
피보나치킨
http://fibonachicken.herokuapp.com
그냥 피보나치 수열 계산
문제 1.
피보나치킨은 nth 피보나치 숫자가 아니라
n-1번째 피보나치를 찾아야 함.
즉, 입력이 nth 피보나치일때 n-1번째 피보나치를 반환하면 됨.
문제 2.
근데 입력이 피보나치 수가 아니면?
배운자의 정리에 의하면 치킨도르.. 아니 제켄도르프 정리를 적용.
필요한 함수
• 일단 피보나치 구현 fib
• 피보나치 수가 아닌지도 알아야 하니까 is_fibonacci
• 이전 피보나치 수를 알아야 하니까 prev_fibonacci
def fib(n):
if n < 2:
return n
return fib(n-2) + fib(n-1)
def is_fibonacci_awful(n):
i = 0
while True:
if fib(i) == n:
return True
elif fib(i) > n:
return False
else:
i += 1
continue
is_fibonacci = is_fibonacci_awful
def prev_fibonacci(n):
for i in range(n-1, 0, -1):
if is_fibonacci(i):
return i
return 0
def fibonachicken(n):
if is_fibonacci(n) and n > 1: #1인 1닭
return prev_fibonacci(n)
chickens = 0
while n > 1:
cfib = prev_fibonacci(n)
chickens += prev_fibonacci(cfib)
n -= cfib
return chickens + n
Writing Fast Code (KR)
(당연하지만) 왜 느릴까?
하는 일을 줄여야 한다.
이것 저것 고치고 다시
Writing Fast Code (KR)
올ㅋ
아리송한 분은 Office Hour로!
근데 사실 잘 만들어 놓은 거 쓰는게 짱.
pandas에서 거저 먹은 성능 개선
Writing Fast Code (KR)
import pandas as pd
intSeries = pd.Series(5, pd.date_range(start='2000-01-01',
end='2000-01-08', freq='555000U'), dtype=‘int64')
timeSeries = intSeries.astype('datetime64[ns]')
%timeit intSeries.resample('1S', how='last')
%timeit timeSeries.resample('1S', how='last')
%prun intSeries.resample('1S', how='last')
%prun timeSeries.resample('1S', how='last')
Writing Fast Code (KR)
Writing Fast Code (KR)
850 배
코드는?
실제 코드는 한 줄
정리
찰싹~
감사합니다

More Related Content

PPTX
파이선 실전공략-1
PDF
알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터
PDF
Profiling - 실시간 대화식 프로파일러
PDF
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
PPTX
Python 생태계의 이해
PDF
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PDF
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
PDF
Python vs Java @ PyCon Korea 2017
파이선 실전공략-1
알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터
Profiling - 실시간 대화식 프로파일러
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
Python 생태계의 이해
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
Python vs Java @ PyCon Korea 2017

What's hot (19)

PDF
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
PPTX
문과생 대상 파이썬을 활용한 데이터 분석 강의
PDF
니름: 쉬운 SOA 단위 테스트
PDF
Tensorflow service & Machine Learning
PPTX
Java와 Python의 만남: Jython과 Sikuli
PDF
[NDC2016] TERA 서버의 Modern C++ 활용기
PDF
H3 2011 파이썬으로 클라우드 하고 싶어요
 
PPTX
파이썬 스터디 15장
PDF
Go로 새 프로젝트 시작하기
PDF
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
PDF
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
PDF
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
PPTX
파이썬 스터디 9장
PDF
모두의 JIT 컴파일러
PDF
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
PDF
[야생의 땅: 듀랑고]의 식물 생태계를 담당하는 21세기 정원사의 OpenCL 경험담
PPTX
Reduce testing time by Multiprocessing in python
PDF
자바, 미안하다! 파이썬 한국어 NLP
PPTX
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
문과생 대상 파이썬을 활용한 데이터 분석 강의
니름: 쉬운 SOA 단위 테스트
Tensorflow service & Machine Learning
Java와 Python의 만남: Jython과 Sikuli
[NDC2016] TERA 서버의 Modern C++ 활용기
H3 2011 파이썬으로 클라우드 하고 싶어요
 
파이썬 스터디 15장
Go로 새 프로젝트 시작하기
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
파이썬 스터디 9장
모두의 JIT 컴파일러
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
[야생의 땅: 듀랑고]의 식물 생태계를 담당하는 21세기 정원사의 OpenCL 경험담
Reduce testing time by Multiprocessing in python
자바, 미안하다! 파이썬 한국어 NLP
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Ad

Viewers also liked (19)

ODP
4. taldea
DOC
Campeonato gaúcho-2015-artilharia
PPTX
UST_inquiry_Poster
PPTX
Sote-tietojärjestelmähankkeiden tilanne ja kehittämistarpeet
PDF
federal reserve.
PPTX
A Provenance Model for Quantified Self Data
PDF
Jari Kallela: Yhteentoimivuus.fi ja julkisen hallinnon kokonaisarkkitehtuuri
PDF
Civilsdaily digest sep 2015
PDF
Maxiflex Clear
PDF
Rh3
PDF
Profit statement a
PDF
La interfaz
PDF
Verbs1
PPTX
Presentation slide share
PPT
Box and whisker
PDF
Gerenciamento de escopo PMBOK
PPTX
Factor and canonical anlysis
DOCX
to be Going to-exercises
PPTX
Walmart sustainability strategy inventory management in the seafood supply ch...
4. taldea
Campeonato gaúcho-2015-artilharia
UST_inquiry_Poster
Sote-tietojärjestelmähankkeiden tilanne ja kehittämistarpeet
federal reserve.
A Provenance Model for Quantified Self Data
Jari Kallela: Yhteentoimivuus.fi ja julkisen hallinnon kokonaisarkkitehtuuri
Civilsdaily digest sep 2015
Maxiflex Clear
Rh3
Profit statement a
La interfaz
Verbs1
Presentation slide share
Box and whisker
Gerenciamento de escopo PMBOK
Factor and canonical anlysis
to be Going to-exercises
Walmart sustainability strategy inventory management in the seafood supply ch...
Ad

Similar to Writing Fast Code (KR) (20)

PDF
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
PDF
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
PPTX
Coding interview
PDF
스타트업 인턴 개발자 3달간의 고군분투기 김은향
PDF
Lecture 1: Introduction to Python and TensorFlow
PDF
NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서
PPTX
파이썬 쪼렙 탈출 1주차
PPTX
NDC 2017 라이브 프로세스 분석을 통한 효율적인 게임 로직 개발 - 김성은
PDF
PHP로 Slack Bot 만들기
PPTX
호서대학교 - 다양한 오픈소스 활용법 (Colab을 이용하여)
PDF
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
PDF
파이썬으로 익히는 딥러닝
PDF
파이썬 소개
PDF
[NDC 2016] 유니티, iOS에서 LINQ 사용하기
PDF
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
PDF
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
PDF
20160126_python
PDF
[NDC08] 최적화와 프로파일링 - 송창규
PDF
JetsonTX2 Python
PDF
Pyconkr2019 make deamon with python
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
Coding interview
스타트업 인턴 개발자 3달간의 고군분투기 김은향
Lecture 1: Introduction to Python and TensorFlow
NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서
파이썬 쪼렙 탈출 1주차
NDC 2017 라이브 프로세스 분석을 통한 효율적인 게임 로직 개발 - 김성은
PHP로 Slack Bot 만들기
호서대학교 - 다양한 오픈소스 활용법 (Colab을 이용하여)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
파이썬으로 익히는 딥러닝
파이썬 소개
[NDC 2016] 유니티, iOS에서 LINQ 사용하기
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
2011 H3 컨퍼런스-파이썬으로 클라우드 하고 싶어요
20160126_python
[NDC08] 최적화와 프로파일링 - 송창규
JetsonTX2 Python
Pyconkr2019 make deamon with python

More from Younggun Kim (12)

PDF
비윈도우즈 환경의 기술 서적 번역 도구 경험 공유
PDF
Ready, Get set, Run
PDF
Python, PyCon and the PSF
PDF
ConfConf 2016 - PyCon
PDF
SOSCON 2016 Keynote
PDF
Contributing to pandas (Korean)
PDF
파이콘한국2017 - Years with Python
PDF
The PSF and our community
PDF
Writing Fast Code - PyCon HK 2015
PDF
Writing Fast Code (JP) - PyCon JP 2015
PDF
파이콘 같이 합시다!
PDF
테크 컨퍼런스에서 사람들과 친해지는 방법
비윈도우즈 환경의 기술 서적 번역 도구 경험 공유
Ready, Get set, Run
Python, PyCon and the PSF
ConfConf 2016 - PyCon
SOSCON 2016 Keynote
Contributing to pandas (Korean)
파이콘한국2017 - Years with Python
The PSF and our community
Writing Fast Code - PyCon HK 2015
Writing Fast Code (JP) - PyCon JP 2015
파이콘 같이 합시다!
테크 컨퍼런스에서 사람들과 친해지는 방법

Writing Fast Code (KR)