내 코드에서 numba가 순수한 Python보다 느린 이유는 무엇입니까?

탄저균

저는 파이썬을 처음 접했고 numba를 가지고 놀았고 numba에서 순수한 파이썬보다 느리게 실행되는 코드를 작성했습니다. 적은 수의 경우 순수 파이썬은 numba보다 약 4 배 빠르며 많은 수에서는 거의 동일하게 실행됩니다. 내 코드가 numba에서 느리게 실행되는 이유는 무엇입니까?

from numba import njit
@njit
def forr (q):
    p=0
    k=q
    n=0
    while k!=0:
            n += 1
            k=k//10
    
    h=(abs(q-n*9)+q-n*9)//2 
    for j in range(q,h,-1):
        
        s=0
        k=j
        while k!=0:
            s += k%10
            k=k//10
        
        if s+j==q:
            p=1
            print('Yes')
            break
    if p==0:
        print('No')

Arty

Numba 코드가 느리게 실행되는 이유는 다음과 같습니다.

  1. 아마도 Numba JIT가 코드를 처음 컴파일 할 때 몇 초가 걸릴 수있는 첫 번째 함수 실행 시간을 측정 할 것입니다. 정확한 시간 측정을하려면 먼저 numba 함수를 JIT- 사전 컴파일하기 위해 별도의 호출을 수행해야합니다.
  2. 충분한 입력 (입력 번호)을 제공하지 않을 수 있으므로 함수는 시간이 거의 걸리지 않고 numba 함수는 시작하는 데 약간의 오버 헤드가 있습니다. 코드에서 가능하다면 Numba 함수 안에 꽤 오랜 시간이 걸리는 알고리즘을 넣어야하며 실행하는 데 수십 밀리 초 이상이 걸립니다.
  3. 몇 번의 실행으로 측정 할 수 있습니다. 더 정확한 결과를 얻으려면 루프에서 수백 개의 함수 실행을 측정해야합니다.
  4. 데코레이터 cache = True옵션을 넣지 않았습니다 @njit.이 옵션은 처음부터 컴파일하는 대신 각 스크립트 실행시 미리 컴파일 된 코드를 가져 오는 데 도움이됩니다.
  5. 콘솔 작업이 매우 느리기 때문에 시간이 거의 걸리지 않는 함수 내부의 인쇄 함수 호출은 상당한 시간을 차지할 수 있습니다. 함수에서 결과를 반환하고 Numba 함수 외부에서 인쇄하는 것이 좋습니다.

위의 모든 것을 취하여 Numba 코드를 측정하기 위해 다음 코드를 구현 cache = True하고 방금 옵션을 추가 하고 print()측정 시간에 대한 호출을 주석 처리했습니다 (측정 할 때 수백 단어로 콘솔을 망치지 않도록).

다음 코드는 Numba 변형이 29x랩톱에서 배 더 빠르다 는 것을 보여줍니다 . 또한 다음 코드는 command를 통해 한 번 pip 모듈을 설치해야합니다 pip install numba timerit.

온라인으로 시도하십시오!

import timerit, numba
timerit.Timerit._default_asciimode = True

def forr(q):
    p=0
    k=q
    n=0
    while k!=0:
            n += 1
            k=k//10
    
    h=(abs(q-n*9)+q-n*9)//2 
    for j in range(q,h,-1):
        
        s=0
        k=j
        while k!=0:
            s += k%10
            k=k//10
        
        if s+j==q:
            p=1
            #print('Yes')
            break
    if p==0:
        #print('No')
        pass
        
nforr = numba.njit(cache = True)(forr)
nforr(2) # Heat-up, precompile numba

tb = None
for f in [forr, nforr]:
    tim = timerit.Timerit(num = 99, verbose = 1)
    for t in tim:
        f(1 << 60)
    if tb is None:
        tb = tim.mean()
    else:
        print(f'speedup {round(tb / tim.mean(), 1)}x')

산출:

Timed best=1.029 ms, mean=1.040 +- 0.0 ms
Timed best=35.300 us, mean=35.673 +- 0.3 us
speedup 29.2x

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 경우 값 유형 변수가 참조 유형보다 느린 이유는 무엇입니까?

분류에서Dev

내 예제에서 Rcpp 구현이 R 함수보다 훨씬 느린 이유는 무엇입니까?

분류에서Dev

사용자 지정 함수가 내장 함수보다 느린 이유는 무엇입니까?

분류에서Dev

피보나치 합계를 찾을 때 내 코드가 느린 이유는 무엇입니까?

분류에서Dev

내 A * 구현이 플러드 필보다 느린 이유는 무엇입니까?

분류에서Dev

GPU에서이 코드가 CPU보다 10 배 느린 이유는 무엇입니까?

분류에서Dev

coreutils가 Python보다 느린 이유는 무엇입니까?

분류에서Dev

Chrome에서 다운로드 속도가 느린 이유는 무엇입니까?

분류에서Dev

내 실제 다운로드 속도가 speedtest.net에서 찾은 것보다 느린 이유는 무엇입니까?

분류에서Dev

Atom 싱글 코어보다 Atom 듀얼 코어에서 Ubuntu가 느린 이유는 무엇입니까?

분류에서Dev

이 jQuery 코드가이 코드보다 훨씬 느린 이유는 무엇입니까?

분류에서Dev

Python :이 목록 이해가 동등한 for 루프보다 5000 배 느린 이유는 무엇입니까?

분류에서Dev

DataTemplate 내에서 UserControl을 사용하는 것이 직접 xaml보다 느린 이유는 무엇입니까?

분류에서Dev

Python Lambda가 동일한 기능을 가진 Javascript Lambda보다 훨씬 느린 이유는 무엇입니까?

분류에서Dev

다운로드 속도가 초기에 느린 이유는 무엇입니까?

분류에서Dev

MEX 코드가 MATLAB 코드보다 훨씬 느린 이유는 무엇입니까?

분류에서Dev

ThreadPoolExecutor가 for 루프보다 느린 이유는 무엇입니까?

분류에서Dev

Julia가 MATLAB보다 느린 이유는 무엇입니까?

분류에서Dev

Firefox가 SSH보다 느린 이유는 무엇입니까?

분류에서Dev

VLC가 MPV / MPlayer보다 느린 이유는 무엇입니까?

분류에서Dev

ls -i가 ls보다 느린 이유는 무엇입니까?

분류에서Dev

내 Maven 설치가 느린 이유는 무엇입니까?

분류에서Dev

pandas.read_fwf 함수가 일부 Python 대안에 비해 느린 이유는 무엇입니까?

분류에서Dev

내 awk 스크립트가 head + tail 스크립트보다 훨씬 느린 이유는 무엇입니까?

분류에서Dev

스칼라로 작성된 코드가 자바보다 6 배 느린 이유는 무엇입니까?

분류에서Dev

동일한 정밀도에서 mpmath가 gsl보다 느린 이유는 무엇입니까? 그리고 어떤 결과가 옳습니까?

분류에서Dev

내 텍스트보기에 불필요한 공간이 가득한 이유는 무엇입니까? 코드에없는 추가 줄. 스크린 샷

분류에서Dev

페이드 에지가 느린 이유는 무엇입니까?

분류에서Dev

이 함수가 "if 's"보다 dicts를 사용하는 것이 느린 이유는 무엇입니까?

Related 관련 기사

  1. 1

    내 경우 값 유형 변수가 참조 유형보다 느린 이유는 무엇입니까?

  2. 2

    내 예제에서 Rcpp 구현이 R 함수보다 훨씬 느린 이유는 무엇입니까?

  3. 3

    사용자 지정 함수가 내장 함수보다 느린 이유는 무엇입니까?

  4. 4

    피보나치 합계를 찾을 때 내 코드가 느린 이유는 무엇입니까?

  5. 5

    내 A * 구현이 플러드 필보다 느린 이유는 무엇입니까?

  6. 6

    GPU에서이 코드가 CPU보다 10 배 느린 이유는 무엇입니까?

  7. 7

    coreutils가 Python보다 느린 이유는 무엇입니까?

  8. 8

    Chrome에서 다운로드 속도가 느린 이유는 무엇입니까?

  9. 9

    내 실제 다운로드 속도가 speedtest.net에서 찾은 것보다 느린 이유는 무엇입니까?

  10. 10

    Atom 싱글 코어보다 Atom 듀얼 코어에서 Ubuntu가 느린 이유는 무엇입니까?

  11. 11

    이 jQuery 코드가이 코드보다 훨씬 느린 이유는 무엇입니까?

  12. 12

    Python :이 목록 이해가 동등한 for 루프보다 5000 배 느린 이유는 무엇입니까?

  13. 13

    DataTemplate 내에서 UserControl을 사용하는 것이 직접 xaml보다 느린 이유는 무엇입니까?

  14. 14

    Python Lambda가 동일한 기능을 가진 Javascript Lambda보다 훨씬 느린 이유는 무엇입니까?

  15. 15

    다운로드 속도가 초기에 느린 이유는 무엇입니까?

  16. 16

    MEX 코드가 MATLAB 코드보다 훨씬 느린 이유는 무엇입니까?

  17. 17

    ThreadPoolExecutor가 for 루프보다 느린 이유는 무엇입니까?

  18. 18

    Julia가 MATLAB보다 느린 이유는 무엇입니까?

  19. 19

    Firefox가 SSH보다 느린 이유는 무엇입니까?

  20. 20

    VLC가 MPV / MPlayer보다 느린 이유는 무엇입니까?

  21. 21

    ls -i가 ls보다 느린 이유는 무엇입니까?

  22. 22

    내 Maven 설치가 느린 이유는 무엇입니까?

  23. 23

    pandas.read_fwf 함수가 일부 Python 대안에 비해 느린 이유는 무엇입니까?

  24. 24

    내 awk 스크립트가 head + tail 스크립트보다 훨씬 느린 이유는 무엇입니까?

  25. 25

    스칼라로 작성된 코드가 자바보다 6 배 느린 이유는 무엇입니까?

  26. 26

    동일한 정밀도에서 mpmath가 gsl보다 느린 이유는 무엇입니까? 그리고 어떤 결과가 옳습니까?

  27. 27

    내 텍스트보기에 불필요한 공간이 가득한 이유는 무엇입니까? 코드에없는 추가 줄. 스크린 샷

  28. 28

    페이드 에지가 느린 이유는 무엇입니까?

  29. 29

    이 함수가 "if 's"보다 dicts를 사용하는 것이 느린 이유는 무엇입니까?

뜨겁다태그

보관