Julia : 用@async提升循环性能
@async 用在循环中,可以大幅提升性能,特别是循环量较大时。代码如下:
1、向量
using Distributedn = 1000000
println("n :",n)
println("iter_no_async :")
@time value1 = iter_no_async(n)
println("iter_async :")
@time value2 = iter_async(n)
@assert value1 ==value2function iter_no_async(n)arr = Array{Float64}(undef,n)for i in 1:narr[i] = sin(i^2)endreturn arr
endfunction iter_async(n)arr = Array{Float64}(undef,n)@async for i in 1:narr[i] = sin(i^2)endreturn arr
end
# 100万 =>9倍
julia> @run testfun
n :1000000
iter_no_async :0.037306 seconds (16.38 k allocations: 8.526 MiB)
iter_async :0.004689 seconds (9.04 k allocations: 8.132 MiB)
iter_async (generic function with 1 method)
# 10万=>2倍
julia> @run testfun
n :100000
iter_no_async :0.011192 seconds (16.38 k allocations: 1.659 MiB)
iter_async :0.004836 seconds (9.04 k allocations: 1.266 MiB)
iter_async (generic function with 1 method)
# 1万 => 略有提升
julia> @run testfun
n :10000
iter_no_async :0.007968 seconds (16.38 k allocations: 995.775 KiB)
iter_async :0.005080 seconds (9.04 k allocations: 592.965 KiB)
iter_async (generic function with 1 method)
# 1000 =>不明显
julia> @run testfun
n :1000
iter_no_async :0.008439 seconds (16.38 k allocations: 925.807 KiB)
iter_async :0.007028 seconds (9.03 k allocations: 522.699 KiB)
iter_async (generic function with 1 method)
比如,数组拆分,一个数组要拆分成n个平均的等份,这个时侯,用@async 效果也非常好!性能提升数十倍!
2、矩阵
using Distributed
n = 1000; m = 10
println("n :$n m:$m")
println("iter_no_async :")@time value1 = iter_no_async(n,m)println("iter_async :")
@time value2 = iter_async(n,m)
@assert value1 ==value2function iter_no_async(n,m)arr = Array{Float64}(undef,n,m)for i in 1:nfor j in 1:marr[i,j] = sin(i^2) +sin(j^2)endendreturn arr
endfunction iter_async(n,m)arr = Array{Float64}(undef,n,m)@async for i in 1:n@async for j in 1:marr[i,j] = sin(i^2) +sin(j^2)endendreturn arr
end
julia> @run testfun
n :1000 m:10
iter_no_async :0.011082 seconds (20.51 k allocations: 1.164 MiB)
iter_async :0.005053 seconds (9.26 k allocations: 601.795 KiB)
iter_async (generic function with 1 method)
两层的@async ,性能差不多近2倍。
3、拆分
function split_array(rmap,n)responses = Vector{Array{Float64}}(undef, n)row,col = size(rmap)unit = floor(Int64,row/n)@async for i in 1:nif i<nresponses[i] = rmap[(i-1)*unit + 1 : i*unit,:]elseresponses[i] = rmap[(i-1)*unit + 1 : row,:]endendreturn responses
end
Julia : 用@async提升循环性能相关推荐
- SpringBoot巧用 @Async 提升API接口并发能力!
异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是"异步调用"? "异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依 ...
- SpringBoot巧用 @Async 提升API接口并发能力
异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是"异步调用"? "异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依 ...
- 从软件工程的角度比较Swift、Go和Julia,我有了这些发现
作者 | Erik Engheim 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 从已有代码的扩展和重用方面考虑,这几种语言的类扩展.duck type(鸭子类型)和多分发孰优孰劣? ...
- julia系列1:介绍与安装
参考 https://zhuanlan.zhihu.com/p/41953244 还有这篇教程:https://zhuanlan.zhihu.com/p/60889456 详见julia中文文档:ht ...
- Julia并行计算笔记(一)
本文是<Julia语言程序设计>(魏坤)第14章的读书笔记,加入了很多自己测试和官方文档的内容.内容基本上完整覆盖,不过对照原著风味更佳.全文很长,分为五篇,这是第一篇. 一.进程.线程 ...
- 从用户的角度看 java_[Java教程]开发网站要从用户的角度出发!
[Java教程]开发网站要从用户的角度出发! 0 2016-10-10 21:00:06 我本人就是一个用户,当我在使用全国软考网是所遭遇的问题让我头痛,报名和查看信息要登陆账户时,浏览器总是报错,弹 ...
- 宕机三个月、36亿打水漂,印度骄傲Infosys如何活成了全球笑话?
往期热门文章: 1.Spring Boot巧用 @Async 提升API接口并发能力!NB! 2.再见MybatisPlus,阿里推出新ORM框架! 3.这个 MySQL Bug 99% 的人会踩坑! ...
- CCES dsp mips 优化心得
ADI dsp cces 优化心得 1.runtime checks 勾选会占用很大的mips 2LDF 设置系统的 heap(堆) stack(栈) 3.常用的设置 4.双重循环内,尽量减少内循环的 ...
- 【283期】面试官问:高并发场景下,如何保证全局唯一分布式 ID 生成?
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 前言 系统 ...
- async/await 的基本实现和 .NET Core 2.1 中相关性能提升
前言 这篇文章的开头,笔者想多说两句,不过也是为了以后再也不多嘴这样的话. 在日常工作中,笔者接触得最多的开发工作仍然是在 .NET Core 平台上,当然因为团队领导的开放性和团队风格的多样性(这和 ...
最新文章
- 上传代码到码云(第一次)
- dts插件 foobar pan baidu_SU插件插件库安装教程
- java 鼠标 停止工作原理,java系统级的键盘和鼠标状态
- SVM+HOG:从完全不包含人体的图片中随机剪裁出64*128大小的用于人体检测的负样本
- java静态和动态的区别是什么意思_Java中的动态和静态多态性有什么区别?
- the next journal submission for mechanism should be at this journal
- 如何安装最新版本的 SAP ABAP Development Tool ( ADT ) 2021年度更新
- 数字时钟html5 js,html5 canvas js(数字时钟)实例代码
- 终结者:借助ViewPager实现Fragment左右滑动
- python--下载文件并将文件放到指定文件夹
- iec611313标准下载_IEC 62108-2016
- 测试电脑整机功耗软件,最真实的耗电!PConline权威整机功耗评测
- UltraCompare v21.00分析
- 动态规划-试题(1)-扔玻璃珠
- 无刷直流电动机矢量控制(五)——开环调速原理(方波形式)
- MySQL本天早上8点到明早8点_早上8点是什么时辰
- 全面了解量化风险管理-转载 风控搭建的可以一看
- 关于switch的一些理解
- navicat连接LinuxMySQL10038错误、mysql通过命令行进行导入导出sql文件
- 编程之美学习笔记--一摞烙饼的排序