小编bpb*_*own的帖子

如何在python / numpy中自动执行BLAS的环境变量相关基准测试?

我需要一些帮助来弄清楚如何在python中自动执行基准测试。

我正在测试通过python中的numpy调用BLAS库对线程的影响。在linux环境中,OpenBLAS中的线程是通过环境变量控制的OMP_NUM_THREADS。我想做一个测试,使我OMP_NUM_THREADS从1 递增到最大值,在每个线程计数时给例程计时,然后最后对所有线程计数操纵合计计时。

问题如下。可以在python中设置环境变量,但是它们仅影响子进程或子shell。因此,我可以使用以下驱动程序代码正确运行基准测试:

#!/usr/bin/env python                                                                                                     # driver script for thread test
import os

thread_set =[1,2,4,8,16]
for thread in thread_set:

    os.environ['OMP_NUM_THREADS']='{:d}'.format(thread)
    os.system("echo $OMP_NUM_THREADS")
    os.system("numpy_test")
Run Code Online (Sandbox Code Playgroud)

和numpy_test脚本:

#!/usr/bin/env python
#timing test for numpy dot product (using OpenBLAS)                                                      
#based on http://stackoverflow.com/questions/11443302/compiling-numpy-with-openblas-integration
import sys
import timeit

setup = "import numpy; x = numpy.random.random((1000,1000))"
count = 5

t = timeit.Timer("numpy.dot(x, x.T)", setup=setup)
dot_time = t.timeit(count)/count
print("dot: {:7.3g} sec".format(dot_time))
Run Code Online (Sandbox Code Playgroud)

但是分析这是一个非常手动的过程。

特别是,我无法dot_timenumpy_test外部包装例程返回值,因此无法以任何自动化方式分析测试结果。例如,我想绘制dot_time线程数与线程数的关系图,或评估dot_time/ numbers是否是常数。

如果我尝试通过定义python测试函数(避免使用上述os.system() …

python multithreading numpy blas python-3.3

5
推荐指数
1
解决办法
2820
查看次数

标签 统计

blas ×1

multithreading ×1

numpy ×1

python ×1

python-3.3 ×1