>source

t1_perf_time과 t1_timeit_time에 대해 다음 프로그램을 다른 시간에 실행할 때마다 왜 나는 얻습니까? 모든 처형 시간이 동일하지 않은 이유는 무엇입니까?

import numpy as np
import time
import timeit
t0_process_time = time.process_time()
t0_perf_time = time.perf_counter()
t0_timeit = timeit.default_timer()
x = np.array([[[1, 2],
               [3, 4]],
              
              [[5, 6],
               [7, 8]], 
              
              [[3, 1],
               [1, 5]]])
x_min = np.amin(x, axis=0)
print(x_min)
print("t1_process_time: ", time.process_time() - t0_process_time)
print("t1_perf_time: ", time.perf_counter() - t0_perf_time)
print("t1_timeit_time: ", timeit.default_timer() - t0_timeit)

결과는 다음과 같습니다.

  • 프로그램 실행 : t1_process_time : 0.0;t1_perf_time : 0.0008847999852150679;t1_timeit_time : 0.0009033000096678734

  • 프로그램 실행 : t1_process_time : 0.0; t1_perf_time : 0.0003133999998681247; t1_timeit_time : 0.0003309999592602253

  • 프로그램 실행 : t1_process_time : 0.0; t1_perf_time : 0.000278300023637712; t1_timeit_time : 0.0003150000120513141

    • 답변 # 1

      시간 델타는 작지만 숫자가 작기 때문에 크게 보입니다. 그러나 주된 문제는 대부분 인쇄하는 데 걸리는 시간을 측정하고 실행마다 크게 달라지는 시스템 호출을 포함한다는 것입니다. 종료 시간 호출을 인쇄물 위로 이동하면보다 일관된 결과를 얻을 수 있습니다.

      import numpy as np
      import time
      import timeit
      t0_process_time = time.process_time()
      t0_perf_time = time.perf_counter()
      t0_timeit = timeit.default_timer()
      x = np.array([[[1, 2],
                     [3, 4]],
                    
                    [[5, 6],
                     [7, 8]], 
                    
                    [[3, 1],
                     [1, 5]]])
      x_min = np.amin(x, axis=0)
      
      t1_process_time = time.process_time()
      t1_perf_time =  time.perf_counter()
      t1_timeit_time = timeit.default_timer()
      #print(x_min)
      print("----------")
      print("t1_process_time: ", t1_process_time - t0_process_time)
      print("t1_perf_time: ", t1_perf_time - t0_perf_time)
      print("t1_timeit_time: ", t1_timeit_time - t0_timeit)
      
      

      그리고 여러 번 실행

      ~/tmp/aaa$ python3 test.py
      ----------
      t1_process_time:  4.363200000001566e-05
      t1_perf_time:  4.216799970890861e-05
      t1_timeit_time:  4.1728000724106096e-05
      ~/tmp/aaa$ python3 test.py
      ----------
      t1_process_time:  4.598000000000102e-05
      t1_perf_time:  4.489000093599316e-05
      t1_timeit_time:  4.4754000555258244e-05
      ~/tmp/aaa$ python3 test.py
      ----------
      t1_process_time:  4.239400000000115e-05
      t1_perf_time:  4.161900142207742e-05
      t1_timeit_time:  4.158100091444794e-05
      ~/tmp/aaa$ python3 test.py
      ----------
      t1_process_time:  4.783699999999502e-05
      t1_perf_time:  4.641800114768557e-05
      t1_timeit_time:  4.633000025933143e-05
      ~/tmp/aaa$ python3 test.py
      ----------
      t1_process_time:  4.620399999999414e-05
      t1_perf_time:  4.536599954008125e-05
      t1_timeit_time:  4.5202999899629503e-05
      ~/tmp/aaa$ python3 test.py
      ----------
      t1_process_time:  4.341699999999005e-05
      t1_perf_time:  4.237100074533373e-05
      t1_timeit_time:  4.228999932820443e-05
      
      

    • 답변 # 2

      이는 시스템 리소스, 특히 다른 프로세스와 공유되는 리소스의 가용성에 따라 달라질 수 있습니다. 시스템 상태에 대한 전체 스냅 샷이 없으면 실제로 알 수 없습니다. 그러나 이것이 우리가 프로그램의 개별 실행을 측정하지 않는 이유입니다. 시스템에 너무 많은 혼란 변수가 있습니다. 런타임에 대한 좋은 프로필을 원한다면 timeit에서 반복 요소를 사용하고 스크립트에서 프로그램을 실행하십시오.

    • 답변 # 3

      이것이 모든 것이 작동하는 방식이기 때문입니다. PC는 항상 다른 방식으로 바쁘고 이제는 브라우저를 처리하고 있으며 이제는 바이러스를 검사하고 배터리 수준이 이전보다 낮아져 프로그램이 실행됩니다. 다른 속도로.

      timeit 당신에게주지 않는 것입니다정확한그런 것이 없기 때문에 처리 시간. 대신 코드 작동 속도에 대한 큰 그림을 제공하거나 동일한 개념에서 두 가지 다른 구현을 비교하여 대부분의 실행에서 가장 빠른 것으로 밝혀진 것을 선택할 수 있습니다.

    • 답변 # 4

      궁극적으로 프로그램의 코드가 수행하는 모든 작업은 논리 게이트에 의해 수행되는 더 간단한 부울 연산으로 축소 될 수 있습니다. 논리 게이트는 크기가 미시적 규모보다 작은 전자 트랜지스터 조합을 통해 하드웨어로 구현됩니다. 이 트랜지스터는 전류가 바이너리에 해당하도록 조작되는 곳입니다.

      컴퓨터의 수학적 연산이 계산하는 데 항상 같은 시간이 소요될 것으로 예상 할 수 있지만 실제로 수학 연산은 트랜지스터와 같은 속성이 주어진 허용 오차 범위 내에있는 덜 확실한 물리적 세계에 의존합니다. 금속의 작은 불순물과 절단 치수의 작은 변화와 같은 것들 때문에 값은 사실상 엔지니어링이 불가능합니다. 벽면 콘센트의 입력 전기 속성도 허용 범위 내에서 달라질 수 있습니다. 컴퓨터의 트랜지스터도 가열되어 전류의 흐름을 변화 시키거나 시간이 지남에 따라 트랜지스터가 파괴 될 수도 있습니다. 전자의 양자 터널링 및 우주로부터의 복사와 같은 현상조차도 컴퓨터 성능에 작은 영향을 미칠 수 있습니다.

      우주는 본질적으로 혼란 스럽기 때문에 컴퓨터는 본질적으로 그 혼란의 대상이됩니다. 컴퓨터는 최대한 영향을받지 않도록 설계되었지만 여전히 영향을받습니다.

  • 이전 r - x, y로 명명 된 모든 변수를 제거하는 방법은 무엇입니까?
  • 다음 JAVA - 자바 - txt 파일에서 다양한 정보가 혼합 된 스캔의 어려움