相关:

https://jax.readthedocs.io/en/latest/pallas/tpu.html

向量计算设备,如:GPU、TPU等,都是通过向量计算来进行加速的,因此在这类设备中进行向量计算的计算单元是成百上千的,但是进行结构控制的电路单元比较少,可以基本认为在向量设备中进行流程控制是标量的,而不是向量的,也就是说在一个计算周期里面并不能对多个计算单元进行流程控制,而只能是对单个或几个(若干个)计算单元进行流程控制,因为设备中并不能为每一个计算单元配备一个流程控制单元,因为流程控制在整个计算过程的占比太小。但是,在设备的kernel函数中我们往往是无可避免的使用到流程控制语句,因此在编程时就会采用几种方法:

  1. 直接使用标量性质的流程控制语句,在流程控制语句执行时极大的降低设备的运算效率;

  2. 使用循环展开方式,也就是把循环结构改写成顺序执行结构,这也是jax框架中所使用的方法;

  3. 使用向量规约方法来实现原有的循环和判断流程,如jax的cond、fori_loop、for_loop操作。但是该种情况并不通用,很多标量的循环和判断结构无法转换为向量归约,但无法进行向量规约时该种方法不可用。

在jax框架中,进行循环、判断展开操作是自动的,是由编译器自动进行的,不同于CUDA这种底层原语操作,不需要手动编写展开代码,但是也正因为是编译器自动展开的,因此我们需要避免把多个计算操作写在训练结构下,而是应该把多个循环结构下的计算操作写在一起并做成跳转调用操作。

比如:


for i in range(3):
operation_1(i)
operation_2(i)
operation_3(i) 展开后为:
operation_1(0)
operation_2(0)
operation_3(0)
operation_1(1)
operation_2(1)
operation_3(1)
operation_1(2)
operation_2(2)
operation_3(2) 如果我们把展开编译前的代码写为:
def fun(i):
operation_1(i)
operation_2(i)
operation_3(i)
for i in range(3):
fun(i) 那么展开后代码为:
def fun(i):
operation_1(i)
operation_2(i)
operation_3(i)
fun(0)
fun(1)
fun(2)

资料:

Google的jax框架在TPU上的循环控制 —— 向量计算设备的循环结构控制的更多相关文章

  1. TensorFlow-实战Google深度学习框架 笔记(上)

    TensorFlow TensorFlow 是一种采用数据流图(data flow graphs),用于数值计算的开源软件库.在 Tensorflow 中,所有不同的变量和运算都是储存在计算图,所以在 ...

  2. Google C++单元测试框架GoogleTest(总)

    之前一个月都在学习googletest框架,对googletest的文档都翻译了一遍,也都发在了之前的博客里,另外其实还有一部分的文档我没有发,就是GMock的CookBook部分:https://g ...

  3. Google C++单元测试框架GoogleTest---GMock的CheatSheet文档

    CheatSheet文档中包含了GMock所有常用的东西,看了这个基本上就可以用它了,本文接上篇博文:Google C++单元测试框架GoogleTest---Google Mock简介--概念及基础 ...

  4. Google C++单元测试框架GoogleTest---Google Mock简介--概念及基础语法

    就在昨天终于做了gtest的分享,我的预研工作终于结束了,感觉离我辞职的日子不远了,毕竟是专注java二百年啊,要告别实习啦.. 这篇是GoogleMock的简介文档,会在后边附带一个自己的例子. 一 ...

  5. Google C++单元测试框架GoogleTest---AdvancedGuide(译文)下

    因为AdvancedGuide文档太长,分上下两部分,本文档接googletest--AdvancedGuide(译文)上:Google C++单元测试框架GoogleTest---AdvancedG ...

  6. Google C++单元测试框架GoogleTest---GTest的Sample1和编写单元测试的步骤

    如果你还没有搭建gtest框架,可以参考我之前的博客:http://www.cnblogs.com/jycboy/p/6001153.html.. 1.The first sample: sample ...

  7. google多语言通信框架gRPC

    google多语言通信框架gRPC系列(一)概述 gRPC概述 3/26/2016 9:16:08 AM 目录 一.概述 二.编译gRPC 三.C#中使用gRPC 四.C++中使用gRPC 一直在寻找 ...

  8. Google C++测试框架系列:入门

    Google C++测试框架系列:入门 原始链接:V1_6_Primer 注 GTest或者Google Test: Google的C++测试框架. Test Fixtures: 这个词实在找不到对应 ...

  9. [Tensorflow实战Google深度学习框架]笔记4

    本系列为Tensorflow实战Google深度学习框架知识笔记,仅为博主看书过程中觉得较为重要的知识点,简单摘要下来,内容较为零散,请见谅. 2017-11-06 [第五章] MNIST数字识别问题 ...

  10. Reading | 《TensorFlow:实战Google深度学习框架》

    目录 三.TensorFlow入门 1. TensorFlow计算模型--计算图 I. 计算图的概念 II. 计算图的使用 2.TensorFlow数据类型--张量 I. 张量的概念 II. 张量的使 ...

随机推荐

  1. Linux扩展篇-shell编程(十一)- shell编程工具-VS Code

    根据个人多年工作经验,shell没有自己专用的IDE,使用vim开发,对于新手而言不太友好,那如何高效快速书写shell脚本?合适的工具就显得尤为重要,本人比较推荐的就是VS Code.里面有比较成熟 ...

  2. MATLAB神经网络工具箱使用介绍

      本文介绍MATLAB软件中神经网络拟合(Neural Net Fitting)工具箱的具体使用方法.   在MATLAB人工神经网络ANN代码这篇文章中,我们介绍了MATLAB软件中神经网络(AN ...

  3. Python中multiprocessing.Pool进程池实现守护进程的方法

    前言 在multiprocessing.Process中可以使用p.daemon=True将子进程p设置为守护进程. 那么在multiprocessing.Pool进程池中怎么实现这个功能呢? 什么是 ...

  4. Android7.0 配置JACK支持多用户同时编译

    # Android7.0 配置JACK支持多用户同时编译 reference: https://blog.csdn.net/whorus1/article/details/80364772 https ...

  5. Freertos学习:在Posix环境仿真FreeRTOS

    --- title: rtos-freertos-在Posix环境仿真FreeRTOS date: 2020-06-11 16:22:34 categories: tags: - freertos - ...

  6. 在C#中使用RabbitMQ做个简单的发送邮件小项目

    在C#中使用RabbitMQ做个简单的发送邮件小项目 前言 好久没有做项目了,这次做一个发送邮件的小项目.发邮件是一个比较耗时的操作,之前在我的个人博客里面回复评论和友链申请是会通过发送邮件来通知对方 ...

  7. 傻瓜式Java操作MySQL数据库备份(使用mysqldump命令)

    傻瓜式Java操作MySQL数据库备份(使用mysqldump命令) 注释都是由chatGPT生成,有什么问题可以评论交流 @Value("${backup.sql.database}&qu ...

  8. python 自动化神器 多平台纯代码RPA办公自动化python框架

    ​ Pyaibote是一款专注于纯代码RPA(机器人流程自动化)的强大工具,支持Android.Browser和Windows三大主流平台.无论您需要自动化安卓应用.浏览器操作还是Windows应用程 ...

  9. C# 轻量级 ORM 框架 NPoco 的简单应用

    目录 简介 快速入门 安装 NuGet 包 实体类User 数据库类DbFactory 增删改查 Insert Select Update Delete 总结 简介 NPoco 是 PetaPoco ...

  10. 屏幕分辨率基础概念PX,PT,DP,DPR,DPI说明

    屏幕分辨率基础概念说明 缩写 全称 说明 PX Device Pixels 设备像素,指设备的物理像素 PX CSS Pixels CSS像素,指CSS样式代码中使用的逻辑像素 DOT Dot 点,屏 ...