当前位置:网站首页>julia系列6:并行计算
julia系列6:并行计算
2022-08-02 15:50:00 【IE06】
1 协程/任务
1.1 定义
协程也称为任务,如果一个计算以任务的方式执行,那它就很可能会被其他任务中断,原先的任务在恢复后,会从被中断的地方继续工作。
这种过程看似很像函数调用,但有两点不同:1)任务切换不需要任何空间,因此可以完成任意数量任务的切换,而且无需考虑堆栈问题。2)任务切换可以按照任何顺序来进行。
任务比较适合生产者-消费者模式,一个过程用来生产值,另一个用来消费值。消费者不能简单的调用生产者来得到值,因为两者的执行时间不一定协同,但是在任务中,两者则可以正常运行。
1.2 Channel
Julia中提供了Channel来解决生产者消费者的协同问题,其实Channel就是一个FIFO(first-in first-out)队列。使用put!和take!(或是fetch,不删除)函数来具体实现。任务的一个特性就是随着任务的结束,channel对象会自动关闭,无需人为干预。
如果一个 Channel 是空的,读取的 task(即执行 take! 的task)会被阻塞直到有新的数据准备好了;如果一个 Channel 是满的,那么写入的 task(即执行 put! 的 task)则会被阻塞,直到 Channel 有空余。在控制台里面表现为堵塞住,无法继续执行命令
isready 可以用来检查一个 channel 中是否有已经准备好的元素,而等待一个元素准备好 则用 wait。
Channel也可以接收一个函数,介绍及示例如下:
接下来看下任务的调度。用@task定义,然后用schedule进行调度。
2 线程
使用Threads.nthreads()查看当前的线程数,默认是启动一个线程。
使用export JULIA_NUM_THREADS=4(Linux OSX)或set JULIA_NUM_THREADS=4(Windows)来设置启动4个线程。当我们要在Jupyter中使用多个线程时,可以在Julia的运行目录中下打开命令行,先设置线程数,再启动Julia。
其中Ref和[]分别是取地址和引用。
3 进程
多进程也叫多核心或者分布式处理,就是用一个CPU的多个核心或者多个CPU进行编程。使用julia -p n启动多进程,也可以进入后添加。
Julia 中的分布式编程基于两个基本概念:远程引用(remote references)和远程调用(remote calls)。远程引用是一个对象,任意一个进程可以通过它访问存储在某个特定进程上的对象。远程调用指是某个进程发起的执行函数的请求,该函数会在另一个(也可能是同一个)进程中执行。
远程引用有两种类型:Future 和 RemoteChannel。
一次远程调用会返回一个 Future 作为结果。
远程调用会立即返回;也就是说,执行远程调用的进程接下来会继续执行下一个操作,而远程调用则会在另外的进程中进行。你可以通过对返回的 Future 执行 wait 操作来等待远程调用结束,然后用 fetch 获取结果。
对于 RemoteChannel 而言,它可以被反复写入。
例如,多个进程可以通过引用同一个远程 Channel 来协调相互之间的操作。
每个进程都有一个对应的 id,提供 Julia 交互环境的进程的 id 永远是1。我们把用来执行并行任务的进程称为 “worker”,假如总共只有一个进程,那么进程1就被认为是 worker,否则,除了进程1以外的进程都称作 worker。
边栏推荐
猜你喜欢
MPLS实验
【Transformer专题】一、Attention is All You Need(Transformer)
如何为项目匹配资源技能和要求?
20 Lectures on Disassembly of Multi-merchant Mall System Functions-Platform Distribution Overview
A tour of gRPC:06 - gRPC client straming 客户端流
06-线程池(3大方法、7大参数,4种拒绝策略)
多商户商城系统功能拆解20讲-平台端分销概况
(LinkedList与链表) 和 (ArrayList与顺序表)的区别
CWE4.8:2022年危害最大的25种软件安全问题
【2022河南萌新联赛第(四)场:郑州轻工业大学】【部分思路题解+代码解析】
随机推荐
PostGresql listen与notify命令
【Transformer专题】Vision Transformer(ViT)原理 + 代码
tiup mirror modify
动态权重之多任务不平衡论文 (二) MetaBalance
SIGIR'22 推荐系统论文之POI篇
防抖节流(后续继续更新)
2.6 - 进程资源
禅道16.5升级17.3
uWSGI看这几篇就够了
不平衡之钥: 重采样法何其多
打破千篇一律,DIY属于自己独一无二的商城
软件测试面试中90%会遇到的问题:“你会搭建测试环境吗?”
【服务器数据恢复】Raid阵列更换故障硬盘后数据同步失败的数据恢复案例
数据中台应该怎样规划与建设?_光点科技
【[SCOI2005] 互不侵犯】【状压DP(含概念讲解)】
A tour of gRPC: 06 - gRPC client straming
每日练习------定义一个N*N二维数组,从键盘上输入值,找出每行中最大值组成一个一维数组并输出;
05-读写锁、阻塞队列及四组API、同步队列
最强分布式锁工具:Redisson
莫比乌斯反演学习笔记