来自:http://deeplearning.net/software/theano/tutorial/multi_cores.html

Multi cores support in Theano

一、BLAS 操作

BLAS是一个针对于某些数学上操作的接口,其中包括两个向量、一个向量和一个矩阵、两个矩阵(即,介于向量/矩阵和矩阵/矩阵之间的点积操作)。当然有许多这样接口的不同的实现方法,有些还是可以并行的。

Theano是想尽可能使用这个接口来保证整体的性能。所以如果想要实现theano的并行,这些操作将会在thenao中并行的运行。

最频繁的来控制线程的数量的方法就是通过 OMP_NUM_THREADS 环境变量来设置。在开启python进程之前,将它设置成你想要使用到的线程的数量。一些BLAS实现也支持其他环境变量。

为了测试你的BLAS是否支持 OpenMP/Multiple 多核,你可以使用 theano/misc/check_blas.py 脚本来测试,命令如下:

OMP_NUM_THREADS=1 python theano/misc/check_blas.py -q
OMP_NUM_THREADS=2 python theano/misc/check_blas.py -q

ps:在windows的cmd上运行的时候,需要用到set OMP_NUM_THREADS=2。(set会临时的定义环境变量,当关闭一个cmd的时候,就会被清除的。)

个人:待分析

二、使用OpenMP来并行的逐元素ops

因为在每个张量元素上独立的进行逐元素操作可以很容易的通过OpenMP来并行化。

为了使用OpenMP,你需要设置 openmp flag 为 True.

你可以使用flag openmp_elemwise_minsize 来设置需要并行的最小的张量size。对于较短的张量来说,使用OpenMP反而可能会减慢该操作。默认的值是20w 。

对于简单的(快速)的操作来说,你可以在非常大的张量得到一个加速;而对于复杂的操作来说,你可以在较小的张量上得到一个不错的加速。

在theano/misc路径下有一个脚本 elemwise_openmp_speedup.py ,你可以用来针对你你的机器来调整 openmp_elemwise_minsize 的值。该脚本是对具有size为 openmp_elemwise_minsize的向量执行两个逐元素操作(一个快速操作,一个慢速操作) 并分别使用OpenMP和未使用两种情况下执行,从而来显示不同情况下的耗时情况。

唯一的用来控制线程数量的方法是通过 OMP_NUM_THREADS 环境变量。在开启python进程之前将它设置成你想要的线程数量。你可以用下面的命令来测试:

OMP_NUM_THREADS=2 python theano/misc/elemwise_openmp_speedup.py
#The output Fast op time without openmp 0.000533s with openmp 0.000474s speedup 1.12
Slow op time without openmp 0.002987s with openmp 0.001553s speedup 1.92

个人:上面的没成功,错误待分析,所以没图。

参考资料:

[1]:官网:http://deeplearning.net/software/theano/tutorial/multi_cores.html

Theano2.1.21-基础知识之theano中多核的支持的更多相关文章

  1. 基础知识系列☞C#中→属性和字段的区别

    "好吧...准备写个'基础知识系列',算是记录下吧,时时看看,更加加深记忆···" 其实本来准备叫"面试系列"... 字段.属性.你先知道的哪个概念? ***我 ...

  2. Go语言基础知识总结(持续中)

    Go基础知识总结 变量声明 Go语言中的变量需要声明以后才可以使用(需要提前定义变量)并且声明后必须使用(不适用会报错) 标准声明 var 变量名 变量类型 example: var name str ...

  3. 基础知识系列☞C#中数组Array、ArrayList和List三者的区别

    数组() #region 数组 //初始化方式_0:先声明再赋值 ]; weekDays_0[] = "Sun"; weekDays_0[] = "Mon"; ...

  4. Theano2.1.18-基础知识之theano的扩展

    来自:http://deeplearning.net/software/theano/tutorial/extending_theano.html Extending Theano 该教程覆盖了如何使 ...

  5. Theano2.1.15-基础知识之theano如何处理shapre信息

    来自:http://deeplearning.net/software/theano/tutorial/shape_info.html How Shape Information is Handled ...

  6. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation

    前言: 只要是有表单存在,那么就有可能有对数据的校验需求.如:判断是否为整数.判断电子邮件格式等等. WPF采用一种全新的方式 - Binding,来实现前台显示与后台数据进行交互,当然数据校验方式也 ...

  7. 基础知识(05) -- Java中的类

    Java中的类 1.类的概念 2.类中的封装 3.对象的三大特征 4.对象状态 5.类与类之间的关系 ------------------------------------------------- ...

  8. Javascript 基础知识学习--javascript中的参数传递都是按值传递的

    ECMAScript中所有函数的参数传递都是按值传递的,无论参数是值类型还是引用类型的.过去我跟大多数人一样觉得跟传值类型相关. 自己写了一个测试的例子,确实如此 function add(a) { ...

  9. [C# 基础知识系列]C#中易混淆的知识点

    一.引言 今天在论坛中看到一位朋友提出这样的一个问题,问题大致(问题的链接为:http://social.msdn.microsoft.com/Forums/zh-CN/52e6c11f-ad28-4 ...

随机推荐

  1. 【转发】Html5 File Upload with Progress

    Html5 File Upload with Progress               Posted by Shiv Kumar on 25th September, 2010Senior Sof ...

  2. 找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}

    int [][]a={{3,2,6},{6,8,2,10},{5},{12,3,23}}; //先对二维数组进行遍历:然后把二维数组合成一个数组 int[] k=new int[11]; int q= ...

  3. 已知2个一维数组:a[]={3,4,5,6,7},b[]={1,2,3,4,5,6,7};把数组a与数组b ,对应的元素乘积再赋值给数组b,如:b[2]=a[2]*b[2];最后输出数组b的元素。

    int[]a={3,4,5,6,7}; int[]b={1,2,3,4,5,6,7}; int[] arry=new int[7]; System.out.print("数组b[]={&qu ...

  4. visual studio 2015 搭建python开发环境,python入门到精通[三]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo, ...

  5. WIN32 API编程之 tap顺序

    用CreateWindow 函数创建的控件,如果想使用tap键切换,最简单的做法是:主窗口有WS_EX_CONTROLPARENT扩展属性,控件有WS_TAPSTOP属性. 然后最重要的是,在处理消息 ...

  6. sqlite3 shell的使用

    sqlite的安装 1. 首先是下载sqlite,可以该页面下载:http://www.sqlite.org/download.html 当前的最新版本为:sqlite-shell-win32-x86 ...

  7. php高级研发或架构师必了解---很多问题面试中常问到!

    一.mysql相关知识    1. mysql优化方式            MYSQL 优化常用方法            mysql 性能优化方案      2.如何分库分表            ...

  8. I am back-电商网站开发&jQuery

    hi 之前有将近两周的时间没有更新,除了懒就是其他的事情耽误了.现在好了,回家了,虽然家里停水,外面又有积雪,天寒地冻的,但诸多不便,都比不过有点闲的好. 开搞每个学PHP的必经之路——电商网站的开发 ...

  9. 使用jMeter测试Solr服务接口

    之前一直用ab做简单的服务接口测试,ab功能强悍,使用简单,但是没有生成专题图和表格等功能,因此,我们决定使用jmeter来作为我们测试工具.接下来,我们将详细介绍jmeter使用的步骤,主要包括:j ...

  10. webdriver的工作原理

    selenium1的原理就是使用js来驱动浏览器,因为现在基本不用,所以不做过多讨论,下面是我整理的webdriver的工作原理,大致就是通过命令请求webdriver,然后webdriver通过浏览 ...