使用multiprocessing为什么会触发GPU计算
写了一个字符画视频程序,他只能在五六帧的情况下才能和原视频同步:
import cv2
cap = cv2.VideoCapture('badapple.mp4')
for i in range(0,int(cap.get(cv2.CAP_PROP_FRAME_COUNT)),12):
cap.set(cv2.CAP_PROP_POS_FRAMES,i)
image = cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2GRAY)
pixel_string = ''
for y in range(0,1080,60):
for x in range(0,1440,30):
gray_value = image[y][x]
if gray_value<154:
pixel_string += ' '
else:
pixel_string += '8'
pixel_string += '\n'
print(pixel_string)
cap.release()
没有怀着太大希望写了一个进程池,因为运行时CPU利用率已经达到100%,频率接近极限。
import multiprocessing
import cv2
def convert_character_drowing(a,image):
pixel_string = ''
for y in range(0,1080,40):
for x in range(0,1440,20):
gray_value = image[y][x]
if gray_value<52:
pixel_string += ' '
elif gray_value<103:
pixel_string += '1'
elif gray_value<154:
pixel_string += '7'
elif gray_value<215:
pixel_string += '2'
else:
pixel_string += '8'
pixel_string += '\n'
print(pixel_string)
if __name__ == '__main__':
cap = cv2.VideoCapture('badapple.mp4')
pool = multiprocessing.Pool(processes=4)
for i in range(0,int(cap.get(cv2.CAP_PROP_FRAME_COUNT))):
image = cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2GRAY)
pool.apply_async(convert_character_drowing, args=(i,image))
pool.close()
pool.join()
但帧数直线上升,甚至比原视频快,这一看才发现GPU使用率也抬到80%
查阅了很多资料也没有说multiprocessing会占用GPU,不知到底是什么原因触发了GPU的工作,(况且进程池的进程数量没有超过cpu内核数量)如果这是电脑特性的话,那在第一段代码执行时也应该使用GPU啊。
麻烦解释GPU被触发的原因?
附上CPU\GPU的型号
'''CPU
Intel(R) Celeron(R) N5095 @ 2.00GHz
基准速度: 2.00 GHz
插槽: 1
内核: 4
逻辑处理器: 4
虚拟化: 已启用
GPU 0
Intel(R) UHD Graphics
驱动程序版本: 31.0.101.1999
驱动程序日期: 2022/5/31
DirectX 版本: 12 (FL 12.1)
物理位置: PCI 总线 0、设备 2、功能 0
专用 GPU 内存
共享 GPU 内存 0.3/5.9 GB
GPU 内存 0.3/5.9 GB'''