来自: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. Java是如何处理别名(aliasing)的

    什么是Java别名(aliasing) 别名意味着有多个别名指向同一个位置,且这些别名有不同的类型. 在下面的代码例子中,a和b是两个不同的名字,有不同的类型A和B,B继承A B[] b = new ...

  2. 让vc2010的项目在vc2012也能直接使用,而不必修改PlatformToolSet

    在Visual Studio 2010新建的项目到2012里打开会要求修改PlatformToolset的值,从v100改为v110.如果这个项目需要进版本管理(VCS,如git, svn),这将造成 ...

  3. C#语言基础——数组

    数组 一.一位数组 数组初始化,创建数组,数组长度为5 int[] array = new int[5]; array[0] = 1; array[1] = 2; array[2] = 3; arra ...

  4. MySQL数据库备份命令

    原文参考:MySQL数据库备份的命令 - 司南 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql备 ...

  5. A record--Offline deployment of Big Data Platform CDH Cluster

    A record--Offline deployment of Big Data Platform CDH Cluster Tags: Cloudera-Manager CDH Hadoop Depl ...

  6. 关于oracle数据库报12505错误的问题!

    问题阐述: 导致oracle报12505错误的原因比较多,但是最可能一种原因就是客户端的监听出了问题. 解决办法: 在oracle安装目录下找到listener.ora 和 tnsnames.ora, ...

  7. 不要轻易使用linq代替sql

    使用Entityframework+Reposity模式 写出的代码执行效率极低. Linq代码: var querySql = rel_project_personservice.GetItems( ...

  8. 新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (3)

    之前我们多次提到过Resource Manager,也知道Resource Manager是Microsoft Azure提供的一种新型资源管理模式.在Service Management模式(Cla ...

  9. ssh连接失败,排错经验

    一.场景描述 ssh连接服务器,发现连接失败,但是对应服务器的ip能够ping通. 场景: [root@yl-web ~]# ssh root@10.1.101.35 ssh_exchange_ide ...

  10. NOIP2000单词接龙[DFS]

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...