[图解tensorflow源码] 入门准备工作


附常用的矩阵计算工具[转]

Link: https://www.cnblogs.com/yao62995/p/5773142.html

 tensorflow使用了自动化构建工具bazel、脚本语言调用c或cpp的包裹工具swig使用EIGEN作为矩阵处理工具、Nvidia-cuBLAS GPU加速计算库、结构化数据存储格式protobuf

Swig

     

1. Simplified Wrapper and Interface Generator (SWIG) ,基本思想就是向脚本语言接口公开 C/C++ 代码。SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby、Perl、Tcl 和 Python。

 
 

参考:

1. 使用SWIG实现Python调用C/C++代码

  

Bazel

1. bazel假定每个目录为[package]单元,目录里面包含了源文件和一个描述文件BUILD,描述文件中指定了如何将源文件转换成构建的输出。

 
 

1. name属性来命名规则,deps属性来描述规则之间的依赖关系
2. 使用冒号来分隔包名和规则名;如果某条规则所依赖的规则在其他目录下,就用"//"开头,如果在同一目录下,可以忽略包名而用冒号开头。
依赖关系:

  

3. bazel命令:

     > bazel build -c opt //tensorflow/tools/pip_package:build_pip_package

4. 调试模式:

     >  bazel build -c dbg

参考:

1. 安装bazel

   > yum install java-1.8.0-openjdk

   > yum install java-1.8.0-openjdk-devel

   > https://github.com/google/bazel/ 下载最新版本bazel_xxx.sh安装

2. 使用bazel构建系统

 
 

3. bazel 命令手册

  

 
 

  

EIGEN

1. Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms. http://eigen.tuxfamily.org/  

  • 支持整数、浮点数、复数,使用模板编程,可以为特殊的数据结构提供矩阵操作。比如在用ceres-solver进行做优化问题(比如bundle adjustment)的时候,有时候需要用模板编程写一个目标函数,ceres可以将模板自动替换为内部的一个可以自动求微分的特殊的double类型。而如果要在这个模板函数中进行矩阵计算,使用Eigen就会非常方便。
  • 支持逐元素、分块、和整体的矩阵操作。
  • 内含大量矩阵分解算法包括LU,LDLt,QR、SVD等等。
  • 支持使用Intel MKL加速
  • 部分功能支持多线程
  • 稀疏矩阵支持良好,到今年新出的Eigen3.2,已经自带了SparseLU、SparseQR、共轭梯度(ConjugateGradient solver)、bi conjugate gradient stabilized solver等解稀疏矩阵的功能。同时提供SPQRUmfPack等外部稀疏矩阵库的接口。
  • 支持常用几何运算,包括旋转矩阵、四元数、矩阵变换、AngleAxis(欧拉角与Rodrigues变换)等等。
  • 更新活跃,用户众多(Google、WilliowGarage也在用),使用Eigen的比较著名的开源项目有ROS(机器人操作系统)、PCL(点云处理库)、Google Ceres(优化算法)。OpenCV自带到Eigen的接口。

2. 常用的矩阵计算工具有blas, cublas(caffe)、atlas、openblas(mxnet)、eigen,还有lapack、mkl(intel)、Armadillo(matlab)

 
 

3. Eigen库包含 Eigen模块和unsupported模块,其中Eigen模块为official module,unsupported模块为开源贡献者开发的,没有official support。

1. 矩阵运算库blas, cblas, openblas, atlas, lapack, mkl
2. eigen 参考文档

https://eigen.tuxfamily.org/dox/

 
 

C++矩阵运算库推荐

 

protobuf

 
 

1. Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

2. 使用
      > 编写.proto文件,编译后生成 .pb.h / .pb.cc文件

      > Writer: SerializeToOstream(),   Reader: ParseFromIstream()

      > required:一个格式良好的消息一定要含有1个这种字段;

      > optional:消息格式中该字段可以有0个或1个值(不超过1个)。

      > repeated:在一个格式良好的消息中,这种字段可以重复任意多次(包括0次)。相当于java中的List。

3. 

 
 

4. grpc需要理解4个方面(service,stub,channel,observer)

  • service,
  • stub:客户端调用 stub 对象,所谓 stub 对象就是具有声明好的方法的 fake object。stub 对象将请求用 protobuf 方式序列化成字节流,用于线上传输,到 server 端后调用真正的实现对象处理。
  • channel,指定连接的服务器地址和端口,用于stub连接到service
  • observer,服务端,观察处理返回和关闭通道

 Protobuf 语法指南

gRPC 入门及源码分析

  

Stream

Executor 

> google stream executor team: work on parallel programming models for CPUs, GPUs and other platforms.
StreamExecutor is a unified wrapper around the CUDA and OpenCL host-side programming models (runtimes). 
>StreamExecutor and libomptarget are libraries that are both meant to solve the problem of providing runtime support for offloading computational work to an accelerator device. The libomptarget library is already hosted within the OpenMP LLVM subproject, and there is currently a proposal to create another LLVM subproject containing StreamExecutor. 
> StreamExecutor is currently used as the runtime for the vast majority of Google's internal GPGPU applications, and a snapshot of it is included in the open-source TensorFlow project, where it serves as the GPGPU runtime.

https://github.com/henline/streamexecutordoc

https://github.com/henline/streamexecutordoc/blob/master/se_and_openmp.rst

 
 

  

TF C++

1. TF源码安装: following the instructions here

2. example:  tensorflow/cc/tutorials/example_trainer.cc

3. 自定义的op Kernel tutorial for adding a new op in C++.

4. TF c++ 调试: debugging Tensorflow's C++ code behind the SWIG interface

         > The simplest interface between Python and C++ is the pure-C API in tensor_c_api.h

  

 

 

[图解tensorflow源码] 入门准备工作附常用的矩阵计算工具[转]的更多相关文章

  1. [图解tensorflow源码] 入门准备工作

     tensorflow使用了自动化构建工具bazel.脚本语言调用c或cpp的包裹工具swig.使用EIGEN作为矩阵处理工具.Nvidia-cuBLAS GPU加速计算库.结构化数据存储格式prot ...

  2. [图解tensorflow源码] [原创] Tensorflow 图解分析 (Session, Graph, Kernels, Devices)

    TF Prepare [图解tensorflow源码] 入门准备工作 [图解tensorflow源码] TF系统概述篇 Session篇 [图解tensorflow源码] Session::Run() ...

  3. [图解tensorflow源码] TF系统概述篇

    Rendezvous 1. 定义在core/framework/rendezvous.h 2. A Rendezvous is an abstraction for passing a Tensor  ...

  4. 图解tensorflow 源码分析

    http://www.cnblogs.com/yao62995/p/5773578.html https://github.com/yao62995/tensorflow

  5. [图解tensorflow源码] [转载] tensorflow设备内存分配算法解析 (BFC算法)

    转载自 http://weibo.com/p/1001603980563068394770   @ICT_吴林阳 tensorflow设备内存管理模块实现了一个best-fit with coales ...

  6. [图解tensorflow源码] Graph 图优化 (graph optimizer)

  7. [图解tensorflow源码] Graph 图构建 (Graph Constructor)

  8. [图解tensorflow源码] Graph 图模块 —— Graph Loading

  9. [图解tensorflow源码] Graph 图模块 (UML视图)

随机推荐

  1. java中序列化的简单认识

    一.什么是序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现实应用中,就可 ...

  2. lock和Monitor(锁对象)

    Monitor对象 1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取 ...

  3. mobx.js 使用教程-react

    1.store: import { observer } from "mobx-react"; import { observable, action, computed ,aut ...

  4. CS229 6.14 Neurons Networks Restricted Boltzmann Machines

    1.RBM简介 受限玻尔兹曼机(Restricted Boltzmann Machines,RBM)最早由hinton提出,是一种无监督学习方法,即对于给定数据,找到最大程度拟合这组数据的参数.RBM ...

  5. Linux性能优化 第一章 性能追踪建议

    1.1常用建议1.1.1记大量的笔记(记录所有的事情)在做性能调优问题的时候很重要的一个操作就是记录下所有的事情,包括每一个输出.执行的结果.可以新建一个文件夹,然后把结果的文件都塞到该文件夹内.包括 ...

  6. 删除n天前的所有目录和文件

    删除目录 find /your_dir/ -maxdepth -type d -mtime + -exec rm -rf {} \; 删除文件 find /目录/ -mtime + -name &qu ...

  7. Cmder - 在右键菜单添加"Cmder Here"

    使用命令行或终端工具的时候都有一个让我们觉得麻烦的问题,就是需要cd很多目录达到目标位置.在可视化操作系统下面我们一般都是已经处在目标目录了,这时需要执行某些命令如: python test.py 现 ...

  8. mysql千万级数据库插入速度和读取速度的调整记录

    一般情况下mysql上百万数据读取和插入更新是没什么问题了,但到了上千万级就会出现很慢,下面我们来看mysql千万级数据库插入速度和读取速度的调整记录吧. 1)提高数据库插入性能中心思想:尽量将数据一 ...

  9. 从入门到熟悉 HTTPS 的 9 个问题

    九个问题从入门到熟悉HTTPS 最近一边做毕设一边学习编程.前两天她问我 HTTPS 的问题,本来想直接扔一篇网上的教程给她.后来想了一下,那些文章大多直接介绍概念, 对新手不太友好,于是我干脆亲自给 ...

  10. python时间日期字符串各种

    python时间日期字符串各种 第一种 字符串转换成各种日期 time 库 # -*- coding: utf-8 -*- import time, datetime # 字符类型的时间 tss1 = ...