Theano2.1.21-基础知识之theano中多核的支持
来自: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中多核的支持的更多相关文章
- 基础知识系列☞C#中→属性和字段的区别
		
"好吧...准备写个'基础知识系列',算是记录下吧,时时看看,更加加深记忆···" 其实本来准备叫"面试系列"... 字段.属性.你先知道的哪个概念? ***我 ...
 - Go语言基础知识总结(持续中)
		
Go基础知识总结 变量声明 Go语言中的变量需要声明以后才可以使用(需要提前定义变量)并且声明后必须使用(不适用会报错) 标准声明 var 变量名 变量类型 example: var name str ...
 - 基础知识系列☞C#中数组Array、ArrayList和List三者的区别
		
数组() #region 数组 //初始化方式_0:先声明再赋值 ]; weekDays_0[] = "Sun"; weekDays_0[] = "Mon"; ...
 - Theano2.1.18-基础知识之theano的扩展
		
来自:http://deeplearning.net/software/theano/tutorial/extending_theano.html Extending Theano 该教程覆盖了如何使 ...
 - Theano2.1.15-基础知识之theano如何处理shapre信息
		
来自:http://deeplearning.net/software/theano/tutorial/shape_info.html How Shape Information is Handled ...
 - [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
		
前言: 只要是有表单存在,那么就有可能有对数据的校验需求.如:判断是否为整数.判断电子邮件格式等等. WPF采用一种全新的方式 - Binding,来实现前台显示与后台数据进行交互,当然数据校验方式也 ...
 - 基础知识(05) -- Java中的类
		
Java中的类 1.类的概念 2.类中的封装 3.对象的三大特征 4.对象状态 5.类与类之间的关系 ------------------------------------------------- ...
 - Javascript 基础知识学习--javascript中的参数传递都是按值传递的
		
ECMAScript中所有函数的参数传递都是按值传递的,无论参数是值类型还是引用类型的.过去我跟大多数人一样觉得跟传值类型相关. 自己写了一个测试的例子,确实如此 function add(a) { ...
 - [C# 基础知识系列]C#中易混淆的知识点
		
一.引言 今天在论坛中看到一位朋友提出这样的一个问题,问题大致(问题的链接为:http://social.msdn.microsoft.com/Forums/zh-CN/52e6c11f-ad28-4 ...
 
随机推荐
- ORACLE DBA_OBJECTS视图中OBJECT_TYPE为LOB的对象查看
			
在ORACLE数据库中,DBA_OBJECTS视图中OBJECT_TYPE为LOB的对象是什么东西呢?其实OBJECT_TYPE为LOB就是大对象(LOB),它指那些用来存储大量数据的数据库字段.下面 ...
 - AS与.net的交互——详解UrlRequest
			
在.net中我们知道有一个叫做WebHttpRequest的东西,用它我们可以实现各种网络偷窥,监控,采集和机器人,如果外加一 个模式识别,那真是吊爆了... 在as中我们也可以实现同样的功能,而且我 ...
 - C# 和 C++ 数据类型对照表
			
又要用C#调用C++写好的api函数,为了方便,将网上的数据类型做个整理,方便以后查找,以后遇到需要的在进行查找 C++ C# WORD ushort DWORD ui ...
 - SQL Server开发接口生成方法
			
为提高开发效率,生成固定格式的接口是必须的,以下以提供新增/修改/删除/读取接口为例: 以常见的表结构为例,特殊表结构可自己尝试去调整方法 主要通过系视图 sys.columns生成方法:为包含列的对 ...
 - 【转】MySQL 数据库存储引擎
			
原文地址:http://blog.jobbole.com/94385/ 简单介绍 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MySQl的特点,而且是一个插入 ...
 - 简易的GCC图形界面GCCUI
			
这个 GCCUI.EXE 是配合上一篇博文<用VC6开发嵌入式LINUX程序>说的:用VC6辅助开发LINUX程序的时候使用.把 gcc 编译器增加一个简易的图形界面,可以自动读取 vc6 ...
 - jquery——彩色投票进度条
			
一.需求 如下图 重点是要实现进度条. 二.分析 html5新增及删除标签一文中提到过html5新增了progress标签.但是肯定有兼容性问题.生成环境不适用,所以要模拟实现. 原理:动态设置< ...
 - 敲-PHP与MySQL,JSON
			
hi 敲代码~ 1.php与mysql 5.4 修改界面 同样是界面和程序. 界面article.modify.php <?php require_once('../connect.php'); ...
 - c++关于析构的那点小事(个人吐槽向
			
#include<iostream> using namespace std; class test { int *i; public: test(int n) { i = new int ...
 - NOIP2010提高组 机器翻译   -SilverN
			
/**/ #include<iostream> #include<cstdio> #include<cmath> #include<cstring> # ...