Python 为什么我将useOptimized设置为false时执行时间更短
python:3.8.0 openCV:4.2.0 环境:pyCharm 当我设置UseOptimized为false时,执行时间比为true时短。为什么?应该慢一点。怎么搞的? 这是我的代码和输出Python 为什么我将useOptimized设置为false时执行时间更短,python,opencv,Python,Opencv,python:3.8.0 openCV:4.2.0 环境:pyCharm 当我设置UseOptimized为false时,执行时间比为true时短。为什么?应该慢一点。怎么搞的? 这是我的代码和输出 import cv2 print(cv2.useOptimized()) img = cv2.imread('images/ship.bmp') e1 = cv2.getTickCount() res = cv2.medianBlur(img, 49) e2 = cv2.getTickCoun
import cv2
print(cv2.useOptimized())
img = cv2.imread('images/ship.bmp')
e1 = cv2.getTickCount()
res = cv2.medianBlur(img, 49)
e2 = cv2.getTickCount()
print((e2 - e1) / cv2.getTickFrequency())
cv2.setUseOptimized(False)
print(cv2.useOptimized())
e1 = cv2.getTickCount()
res = cv2.medianBlur(img, 49)
e2 = cv2.getTickCount()
print((e2 - e1) / cv2.getTickFrequency())
从openCV文档中可以看出,您观察到这样的结果有几个原因
您的平台不支持任何优化代码,如SSE、AVX
您正在执行的操作不包括优化代码。
您正在执行的操作没有显示优化的好处。即,执行单个medianBlur是一项相对简单的任务,不会消耗太多资源。
您没有重复足够的测试以获得可靠的结果。
您在其上执行脚本的系统正在运行其他导致结果倾斜的进程。
在我的机器上,我运行了以下操作:
import cv2
from enum import Enum
class CPUFeatures(Enum):
CPU_MMX = 1
CPU_SSE = 2
CPU_SSE2 = 3
CPU_SSE3 = 4
CPU_SSSE3 = 5
CPU_SSE4_1 = 6
CPU_SSE4_2 = 7
CPU_POPCNT = 8
CPU_FP16 = 9
CPU_AVX = 10
CPU_AVX2 = 11
CPU_FMA3 = 12
CPU_AVX_512F = 13
CPU_AVX_512BW = 14
CPU_AVX_512CD = 15
CPU_AVX_512DQ = 16
CPU_AVX_512ER = 17
CPU_AVX_512IFMA512 = 18
CPU_AVX_512IFMA = 18
CPU_AVX_512PF = 19
CPU_AVX_512VBMI = 20
CPU_AVX_512VL = 21
CPU_AVX_512VBMI2 = 22
CPU_AVX_512VNNI = 23
CPU_AVX_512BITALG = 24
CPU_AVX_512VPOPCNTDQ = 25
CPU_AVX_5124VNNIW = 26
CPU_AVX_5124FMAPS = 27
CPU_NEON = 100
CPU_MSA = 150
CPU_VSX = 200
CPU_VSX3 = 201
CPU_AVX512_SKX = 256
CPU_AVX512_COMMON = 257
CPU_AVX512_KNL = 258
CPU_AVX512_KNM = 259
CPU_AVX512_CNL = 260
CPU_AVX512_CLX = 261
CPU_AVX512_ICL = 262
CPU_MAX_FEATURE = 512
def run_optimised(img, repeat):
cv2.setUseOptimized(True)
start = cv2.getTickCount()
for i in range(repeat):
cv2.medianBlur(img, 49)
# Get performance count
time = (cv2.getTickCount() - start) / cv2.getTickFrequency()
return time
def run_non_optimised(img, repeat):
cv2.setUseOptimized(False)
start = cv2.getTickCount()
for i in range(repeat):
cv2.medianBlur(img, 49)
# Get performance count
time = (cv2.getTickCount() - start) / cv2.getTickFrequency()
return time
if __name__ == "__main__":
print("Supported CPU features")
for cpu_feature in CPUFeatures:
supported = cv2.checkHardwareSupport(int(cpu_feature.value))
print("{} is {} supported".format(cpu_feature, "" if supported else "not"))
print("\nRunning tests\n")
img = cv2.imread('C:/tiger.jpg')
repeats = 3
iterations = 100
total_optimised = 0
total_non_optimised = 0
for i in range(repeats):
print("Test # {}".format(i))
optimised = run_optimised(img, iterations)
non_optimised = run_non_optimised(img, iterations)
print("Optimised: {}".format(optimised))
print("Non-optimised: {}".format(non_optimised))
total_optimised += optimised
total_non_optimised += non_optimised
print("Final - optimised: {}".format(optimised))
print("Final - non-optimised: {}".format(non_optimised))=
产生了以下输出:
>python test.py
Supported CPU features
CPUFeatures.CPU_MMX is supported
CPUFeatures.CPU_SSE is supported
CPUFeatures.CPU_SSE2 is supported
CPUFeatures.CPU_SSE3 is supported
CPUFeatures.CPU_SSSE3 is supported
CPUFeatures.CPU_SSE4_1 is supported
CPUFeatures.CPU_SSE4_2 is supported
CPUFeatures.CPU_POPCNT is supported
CPUFeatures.CPU_FP16 is supported
CPUFeatures.CPU_AVX is supported
CPUFeatures.CPU_AVX2 is supported
CPUFeatures.CPU_FMA3 is supported
CPUFeatures.CPU_AVX_512F is not supported
CPUFeatures.CPU_AVX_512BW is not supported
CPUFeatures.CPU_AVX_512CD is not supported
CPUFeatures.CPU_AVX_512DQ is not supported
CPUFeatures.CPU_AVX_512ER is not supported
CPUFeatures.CPU_AVX_512IFMA512 is not supported
CPUFeatures.CPU_AVX_512PF is not supported
CPUFeatures.CPU_AVX_512VBMI is not supported
CPUFeatures.CPU_AVX_512VL is not supported
CPUFeatures.CPU_AVX_512VBMI2 is not supported
CPUFeatures.CPU_AVX_512VNNI is not supported
CPUFeatures.CPU_AVX_512BITALG is not supported
CPUFeatures.CPU_AVX_512VPOPCNTDQ is not supported
CPUFeatures.CPU_AVX_5124VNNIW is not supported
CPUFeatures.CPU_AVX_5124FMAPS is not supported
CPUFeatures.CPU_NEON is not supported
CPUFeatures.CPU_MSA is not supported
CPUFeatures.CPU_VSX is not supported
CPUFeatures.CPU_VSX3 is not supported
CPUFeatures.CPU_AVX512_SKX is not supported
CPUFeatures.CPU_AVX512_COMMON is not supported
CPUFeatures.CPU_AVX512_KNL is not supported
CPUFeatures.CPU_AVX512_KNM is not supported
CPUFeatures.CPU_AVX512_CNL is not supported
CPUFeatures.CPU_AVX512_CLX is not supported
CPUFeatures.CPU_AVX512_ICL is not supported
CPUFeatures.CPU_MAX_FEATURE is not supported
Running tests
Test # 0
Optimised: 2.210887199547867
Non-optimised: 2.659088088298851
Test # 1
Optimised: 2.2174625162069614
Non-optimised: 2.341818393377586
Test # 2
Optimised: 2.235847859572912
Non-optimised: 2.352969891067055
Final - optimised: 6.664197575327741
Final - non-optimised: 7.353876372743493
Process finished with exit code 0
当我将res=cv2.mediabluimg,49更改为范围5,49,2中的for I:res=cv2.mediabluimg,I时,输出似乎正常。真0.0064761假0.0066718
>python test.py
Supported CPU features
CPUFeatures.CPU_MMX is supported
CPUFeatures.CPU_SSE is supported
CPUFeatures.CPU_SSE2 is supported
CPUFeatures.CPU_SSE3 is supported
CPUFeatures.CPU_SSSE3 is supported
CPUFeatures.CPU_SSE4_1 is supported
CPUFeatures.CPU_SSE4_2 is supported
CPUFeatures.CPU_POPCNT is supported
CPUFeatures.CPU_FP16 is supported
CPUFeatures.CPU_AVX is supported
CPUFeatures.CPU_AVX2 is supported
CPUFeatures.CPU_FMA3 is supported
CPUFeatures.CPU_AVX_512F is not supported
CPUFeatures.CPU_AVX_512BW is not supported
CPUFeatures.CPU_AVX_512CD is not supported
CPUFeatures.CPU_AVX_512DQ is not supported
CPUFeatures.CPU_AVX_512ER is not supported
CPUFeatures.CPU_AVX_512IFMA512 is not supported
CPUFeatures.CPU_AVX_512PF is not supported
CPUFeatures.CPU_AVX_512VBMI is not supported
CPUFeatures.CPU_AVX_512VL is not supported
CPUFeatures.CPU_AVX_512VBMI2 is not supported
CPUFeatures.CPU_AVX_512VNNI is not supported
CPUFeatures.CPU_AVX_512BITALG is not supported
CPUFeatures.CPU_AVX_512VPOPCNTDQ is not supported
CPUFeatures.CPU_AVX_5124VNNIW is not supported
CPUFeatures.CPU_AVX_5124FMAPS is not supported
CPUFeatures.CPU_NEON is not supported
CPUFeatures.CPU_MSA is not supported
CPUFeatures.CPU_VSX is not supported
CPUFeatures.CPU_VSX3 is not supported
CPUFeatures.CPU_AVX512_SKX is not supported
CPUFeatures.CPU_AVX512_COMMON is not supported
CPUFeatures.CPU_AVX512_KNL is not supported
CPUFeatures.CPU_AVX512_KNM is not supported
CPUFeatures.CPU_AVX512_CNL is not supported
CPUFeatures.CPU_AVX512_CLX is not supported
CPUFeatures.CPU_AVX512_ICL is not supported
CPUFeatures.CPU_MAX_FEATURE is not supported
Running tests
Test # 0
Optimised: 2.210887199547867
Non-optimised: 2.659088088298851
Test # 1
Optimised: 2.2174625162069614
Non-optimised: 2.341818393377586
Test # 2
Optimised: 2.235847859572912
Non-optimised: 2.352969891067055
Final - optimised: 6.664197575327741
Final - non-optimised: 7.353876372743493
Process finished with exit code 0