python中的os.environ线程控制
·
最近在学习yolov5+deepsort的多目标追踪项目track.py开头使用了os.environ对程序的线程进行了控制,代码如下:
import os
os.environ["OMP_NUM_THREADS"] = "1"
os.environ["OPENBLAS_NUM_THREADS"] = "1"
os.environ["MKL_NUM_THREADS"] = "1"
os.environ["VECLIB_MAXIMUM_THREADS"] = "1"
os.environ["NUMEXPR_NUM_THREADS"] = "1"
这些代码设置了一些环境变量,用于控制并行计算库的线程数,以此来提高计算效率。
- OMP_NUM_THREADS:控制 OpenMP 库的线程数。
- OPENBLAS_NUM_THREADS:控制 OpenBLAS库的线程数。
- MKL_NUM_THREADS:控制 Intel Math Kernel Library (MKL) 的线程数。
- VECLIB_MAXIMUM_THREADS:控制 Accelerate 框架的线程数。
- NUMEXPR_NUM_THREADS:控制 NumExpr 库的线程数。
虽然接触过一些机器学习和深度学习的算法,知道海量的参数训练需要使用强大的算力来进行学习,也尝试训练过一些模型,但对这些比较底层的库了解的很少。
- OpenMP(Open
Multi-Processing)库是一种并行编程模型和API,用于编写多线程和并行程序。它可以在共享内存计算机系统上实现并行处理,包括多核CPU和多CPU系统。OpenMP使用指令来标识代码段,这些代码段可以并行执行。OpenMP库提供了一些运行时函数,用于控制线程数、同步和数据共享等问题,使得开发者可以更加方便地编写并行程序。由于其简单易用的特点,OpenMP已经成为了并行编程中最常用的技术之一。 - OpenBLAS库:是一种开源的基础线性代数子程序(BLAS)库,用于进行矩阵运算和向量运算等数值计算。它支持多线程和向量化指令,可以在多核CPU上实现高性能的矩阵计算。
- Intel Math Kernel Library (MKL):是一种数学函数库,包括线性代数、傅里叶变换、向量数学等功能。MKL是为Intel处理器优化的,可以利用Intel处理器的特殊指令集和硬件加速器,实现高效的数学计算。
- Accelerate框架:是苹果公司开发的一种数学函数库,用于进行科学计算和数字信号处理等任务。它支持多线程和向量化指令,可以在苹果设备上实现高性能的数学计算。
- NumExpr库:是一种用于进行数组计算的Python库,支持多线程和向量化指令,可以在多核CPU上实现高效的数组计算。NumExpr使用了一些优化技术,如内存映射、缓存预取、SIMD指令等,可以提高计算效率。
这些库都是为了提高数值计算和科学计算的效率而设计的,可以利用多核CPU和硬件加速器等技术,实现高性能的计算。
更多推荐



所有评论(0)