我已经将其发布在另一个线程中,但我认为它更适合于此:

更新(30.07.2014):

我在新的HPC上重新运行基准测试。硬件和软件堆栈都与原始答案中的设置有所不同。

我将结果放在Google电子表格中(还包含原始答案的结果)。

硬件

我们的HPC有两个不同的节点,一个带有Intel Sandy Bridge CPU,另一个带有较新的Ivy Bridge CPU:

桑迪(MKL,OpenBLAS,ATLAS):

CPU:2 x 16 Intel(R)Xeon(R)E2560 Sandy Bridge @ 2.00GHz(16核心)

内存:64 GB

常春藤(MKL,OpenBLAS,ATLAS):

CPU:2.80 GHz @ 2 x 20英特尔®至强®E2680 V2常春藤桥(20核,HT = 40核)

内存:256 GB

软件

该软件堆栈用于两个节点的sam。 代替GotoBLAS2,使用的是OpenBLAS,还有一个多线程ATLAS BLAS,它设置为8个线程(硬编码)。

操作系统:Suse

英特尔编译器:ictce-5.3.0

脾气暴躁的:1.8.0

OpenBLAS:0.2.6

ATLAS :: 3.8.4

点产品基准

基准代码与以下相同。 但是对于新机器,我还运行了5000和8000矩阵尺寸的基准测试。

下表包含原始答案的基准测试结果(重命名为:MKL-> Nehalem MKL,Netlib Blas-> Nehalem Netlib BLAS等)

单线程性能:

多线程性能(8个线程):

线程数与矩阵大小(Ivy Bridge MKL):

基准套件

单线程性能:

多线程(8个线程)性能:

结论

新的基准测试结果与原始答案中的结果相似。 OpenBLAS和MKL的性能相同,但特征值测试除外。本征值测试仅在OpenBLAS上的单线程模式下表现相当不错。在多线程模式下,性能较差。

“矩阵大小与线程的关系图”还显示,尽管MKL和OpenBLAS通常随内核/线程数的增长而很好地扩展,但这取决于矩阵的大小。 对于较小的矩阵,添加更多内核不会大大提高性能。

从Sandy Bridge到Ivy Bridge大约还有30%的性能提升,这可能是由于更高的时钟速率(+ 0.8 Ghz)和/或更好的体系结构所致。

原始答案(04.10.2011):

前段时间,我不得不优化一些使用numpy和BLAS用python编写的线性代数计算/算法,因此我对不同的numpy / BLAS配置进行了基准测试。

我专门测试了:

与ATLAS脾气暴躁

Numpy与GotoBlas2(1.13)

用MKL调皮(11.1 / 073)

Numpy with Accelerate Framework(Mac OS X)

我确实运行了两个不同的基准测试:

大小不同的矩阵的简单点积

基准套件可以在这里找到。

这是我的结果:

机器

Linux(MKL,ATLAS,No-MKL,GotoVlas2):

操作系统Ubuntu Lucid 10.4 64位。

CPU:2 x 4英特尔(R)至强(R)E5504 @ 2.00GHz(8核)

内存:24 GB

英特尔编译器:11.1 / 073

Scipy:0.8

脾气暴躁:1.5

Mac Book Pro(加速框架):

操作系统:Mac OS X Snow Leopard(10.6)

CPU:1个Intel Core 2 Duo 2.93 Ghz(2个内核)

内存:4 GB

Scipy:0.7

脾气暴躁:1.3

Mac Server(加速框架):

操作系统:Mac OS X Snow Leopard Server(10.6)

CPU:4 X Intel(R)Xeon(R)E5520 @ 2.26 Ghz(8核)

内存:4 GB

Scipy:0.8

脾气暴躁的:1.5.1

点产品基准

码:

import numpy as np

a = np.random.random_sample((size,size))

b = np.random.random_sample((size,size))

%timeit np.dot(a,b)

结果:

System | size = 1000 | size = 2000 | size = 3000 |

netlib BLAS | 1350 ms | 10900 ms | 39200 ms |

ATLAS (1 CPU) | 314 ms | 2560 ms | 8700 ms |

MKL (1 CPUs) | 268 ms | 2110 ms | 7120 ms |

MKL (2 CPUs) | - | - | 3660 ms |

MKL (8 CPUs) | 39 ms | 319 ms | 1000 ms |

GotoBlas2 (1 CPU) | 266 ms | 2100 ms | 7280 ms |

GotoBlas2 (2 CPUs)| 139 ms | 1009 ms | 3690 ms |

GotoBlas2 (8 CPUs)| 54 ms | 389 ms | 1250 ms |

Mac OS X (1 CPU) | 143 ms | 1060 ms | 3605 ms |

Mac Server (1 CPU)| 92 ms | 714 ms | 2130 ms |

基准套件

码:

有关基准套件的更多信息,请参见此处。

结果:

System | eigenvalues | svd | det | inv | dot |

netlib BLAS | 1688 ms | 13102 ms | 438 ms | 2155 ms | 3522 ms |

ATLAS (1 CPU) | 1210 ms | 5897 ms | 170 ms | 560 ms | 893 ms |

MKL (1 CPUs) | 691 ms | 4475 ms | 141 ms | 450 ms | 736 ms |

MKL (2 CPUs) | 552 ms | 2718 ms | 96 ms | 267 ms | 423 ms |

MKL (8 CPUs) | 525 ms | 1679 ms | 60 ms | 137 ms | 197 ms |

GotoBlas2 (1 CPU) | 2124 ms | 4636 ms | 147 ms | 456 ms | 743 ms |

GotoBlas2 (2 CPUs)| 1560 ms | 3278 ms | 116 ms | 295 ms | 460 ms |

GotoBlas2 (8 CPUs)| 741 ms | 2914 ms | 82 ms | 262 ms | 192 ms |

Mac OS X (1 CPU) | 948 ms | 4339 ms | 151 ms | 318 ms | 566 ms |

Mac Server (1 CPU)| 1033 ms | 3645 ms | 99 ms | 232 ms | 342 ms |

安装

MKL的安装包括安装完整的Intel Compiler Suite,这很简单。 但是,由于存在一些错误/问题,因此在MKL支持下配置和编译numpy有点麻烦。

GotoBlas2是一个小软件包,可以轻松地编译为共享库。 但是,由于存在错误,您必须在构建共享库后重新创建共享库才能与numpy一起使用。

除了此构建之外,由于某些原因,它无法用于多个目标平台。 因此,我必须为每个平台都创建一个.so文件,我要为其提供优化的libgoto2.so文件。

如果您从Ubuntu的存储库安装numpy,它将自动安装并配置numpy以使用ATLAS。 从源代码安装ATLAS可能需要一些时间,并且需要一些其他步骤(fortran等)。

如果您在具有Fink或Mac Ports的Mac OS X机器上安装numpy,它将配置numpy以使用ATLAS或Apple的Accelerate Framework。您可以通过在numpy.core._dotblas文件上运行ldd或调用numpy.show_config()进行检查。

结论

MKL紧随其后的是GotoBlas2。

在特征值测试中,GotoBlas2的表现令人惊讶地比预期的差。 不知道为什么会这样。

Apple的Accelerate Framework的性能非常好,特别是在单线程模式下(与其他BLAS实现相比)。

GotoBlas2和MKL都可以很好地随线程数扩展。 因此,如果您必须处理在多个线程上运行的大型矩阵,将会很有帮助。

无论如何都不要使用默认的netlib blas实现,因为它对于任何严肃的计算工作来说太慢了。

在我们的群集上,我还安装了AMD的ACML,性能类似于MKL和GotoBlas2。 我没有任何强硬的数字。

我个人建议使用GotoBlas2,因为它更容易安装且免费。

如果您想用C ++ / C进行编码,还可以查看Eigen3,它在某些情况下应该胜过MKL / GotoBlas2,并且非常易于使用。

python内核多线程库_python / numpy中的多线程blas相关推荐

  1. python如何在网络爬虫程序中使用多线程(threading.Thread)

    python如何在网络爬虫程序中使用多线程 一.多线程的基础知识 二.在网络爬虫中使用多线程 2.1 从单线程版本入手 2.2 将单线程版本改写为多线程版本 2.3 运行多线程版本程序 2.4 将多线 ...

  2. 通过Python的fitz库提取pdf中的图片

    文章目录 前言 一.fitz库是什么? 二.安装fitz库 三.查看fitz库版本 四.pymupdf库是什么? 五.安装pymupdf库 六.查看pymupdf库版本 七.fitz和pymupdf是 ...

  3. Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换

    Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片.相互转换 目录 numpy中的array格式数据切片与pandas中的dataframe ...

  4. 通过Python的pdfplumber库提取pdf中表格数据

    文章目录 前言 一.pdfplumber库是什么? 二.安装pdfplumber库 三.查看pdfplumber库版本 四.提取pdf中表格数据 1.引入库 2.定义pdf文件路径 3.打开pdf文件 ...

  5. python多线程库_python多线程库

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点:使 ...

  6. python三维数组怎么表示_python – numpy中的三维数组

    你有一个截断的数组表示.让我们看一个完整的例子: >>> a = np.zeros((2, 3, 4)) >>> a array([[[ 0., 0., 0., 0 ...

  7. python npv 计算公式_Python numpy 中常用的数据运算

    Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.--<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...

  8. python如何创建三维数组_python – numpy中的三维数组

    你有一个截断的数组表示.让我们看一个完整的例子: >>> a = np.zeros((2, 3, 4)) >>> a array([[[ 0., 0., 0., 0 ...

  9. python如何读取数据保存为新格式_Python Numpy中数据的常用保存与读取方法

    在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件 ...

最新文章

  1. 独家 | 一文读懂随机森林的解释和实现(附python代码)
  2. .NET Core程序中使用User Secrets存储敏感数据
  3. QT中关于ipv6和getaddressinfo的开关
  4. 01_关于TensorFlow、什么是数据流图(Data Flow Graph)、TensorFlow的特征、谁可以使用Tensorflow、为啥Google要开源这个神器?
  5. SAP UI5 busy dialog released more often than required
  6. 【数字逻辑设计】判断二进制加法溢出的电路设计
  7. python读取大文件的坑_Python读取大文件的坑“与内存占用检测
  8. VideoCLIP-FacebookCMU开源视频文本理解的对比学习预训练,性能SOTA!适用于零样本学习!...
  9. 第2次预习课-0704
  10. Maven构建生命周期和各种plugin插件
  11. linux压缩文件命令_Linux基础篇(二)--Linux常用命令
  12. 今年水果贵,咱走网购
  13. nginx配置错误页面
  14. 制作集成SATA、RAID和AHCI驱动的Windows XP sp3 安装光盘
  15. 我的世界服务器物品管道,物品导管 (Item Conduit)
  16. 2.3 zio入门——一些常见的zio操作符
  17. 存储微博内容小技巧--印象笔记
  18. English--名词从句
  19. 人工智能中的常用搜索策略
  20. 某知名支付系统的架构演进权威分析

热门文章

  1. 喜迎华诞,openEuler 22.09 正式发布,与1265名开发者共建面向数字基础设施的开源操作系统
  2. python十进制转十六进制
  3. MySQL怎么修改密码/MySQL重装教程(MySQL忘记密码,MySQL安装失败)
  4. Three 之 three.js (webgl)基础 第一个入门 Web 3D 场景
  5. 手机三维模型产品Web3D可视化vr线上展示
  6. 比较QProcess与WinExec的优劣
  7. ubuntu 下安装 skype,google talk
  8. Bash 脚本如何创建临时文件:mktemp 命令和 trap 命令教程
  9. Codeforces 1754B.Kevin and Permutation
  10. 定义列表dl中标签 dt 与标签dd对齐方法,标签ul与标签li对齐