R-并行计算

本文介绍在计算机多核上通过parallel包进行并行计算。

并行计算运算步骤:

  1. 加载并行计算包,如library(parallel)。
  2. 创建几个“workers”,通常一个workers=一个核(core);
  3. 这些workers什么都不知道,它们的全局环境没有变量,也没有加载的R包,所以无论你想让这些workers做什么你都需要提供相应的对象、库;
  4. 使用一些可以并行运行循环的函数,如parApply,parLapply,parSapply。
  5. 当使用完并行后端,且不需要workers的时候,停止它们,否则,它们将继续挂在内存中。

说明:

1-关于并行版本的循环函数。在BaseR中提到循环,有for、while用于循环的函数,也有apply家族函数。相应的,在并行运算中,也有并行运算的apply家族函数。

library(parallel)# run this code instead to use all available CPU cores
#variable c1 is workers (clusters)
#启动workers,包括确定使用的workers数量。workers=cores
cl <- makeCluster(detectCores()) #将当前R中的变量(这里命名为object1和object2,是任何R对象)导出到新创建的workers的全局变量中,以便workers使用它们。注意第一个参数是workers。
clusterExport (cl, varlist = c("object1", "object2"))#对some.vector中的每个元素,分别使用FUN作用,返回结果是向量。
#parSapply函数的第一个参数是workers;
#操作类似sapply函数,可先查阅saplly函数的用法。
#将返回结果存储在result对象中
result <- parSapply (cl, some.vector, FUN = function (i) {some.function1; some.function2})#关闭workers
stopCluster (cl)

示例:

从标准正态分布中生成1e6个随机数,计算这些随机数的均值,这个过程重复100次。

非并行版本代码:

lapply (1:100, FUN = function (x) mean (rnorm (1000000)))

并行版本代码:

library (parallel)
cl <- makeCluster (4)
res <- parLapply (cl, X = 1:100, fun = function (x) mean (rnorm (1000000)))
stopCluster (cl)

注意:这里使用的lapply和parLapply,sapply函数是lapply函数的简化版,sapply函数返回的是向量,lapply返回的是列表。lapply(list +  apply),sapply (simplify+apply).

当计算机运行上述两个函数的时候,我们打开任务管理器(快捷键:ctrl+Alt+Del),非并行程序仅使用部分计算机容量,在这个例子中,非并行版本的程序仅使用了39%的CPU,而并行版本的CPU为100%。

 

 

 

 R语言的microbenchmark包来进行性能测试,microbenchmark函数是microbenchmark包中的一个函数,用于测量代码块的执行时间。microbenchmark函数的结果将返回一个数据框,其中包含了每次执行的时间结果,以及一些统计信息,如平均时间、最小时间、最大时间等。这段代码的目的是通过microbenchmark函数来测试和比较不同代码块的执行时间,以评估它们的性能。

mb <- microbenchmark::microbenchmark ({lapply (1:100, FUN = function (x) mean (rnorm (1e6)))},{library (parallel)cl <- makeCluster (4L)res <- parLapply (cl, X = 1:100, fun = function (x) mean (rnorm (1e6)))stopCluster (cl)}, times = 10)
mb

运行结果:

Unit: seconds
...min       lq     mean   median       uq      max neval cld7.389548 7.522466 7.566548 7.585431 7.605311 7.703006    10   b2.853429 2.890022 2.954747 2.943975 2.968527 3.114184    10  a 

通过两个版本程序运行时间的对比,可以看到,并行版本的程序的计算时间没有比非并行版本的程序快4倍,因为我们使用的是4个核,按照预期应该是并行版本的程序运行速度要快4倍,没有达到这个预期原因是:管理并行也需要花费一些时间:拆分数据、将它们发送给单个workers,收集结果,并将结果合并在一起。

因此,并行计算适应于计算所花费的时间远高于R与单个内核通信所花费的时间。

事实上,如果将计算1e6个随机数的均值,增加到计算1e7个随机数的均值,重复100次,此时,并行版本的速度将增加几乎4倍(非并行83.8 vs 并行21.5).

注意:除非你有一台相当强大的计算机,否则不要尝试运行下面的代码,因为计算机运行下面的代码需要一段时间。注意到,下面的代码中,将重复次数减少到了5,否则需要更长的时间。

mb <- microbenchmark::microbenchmark ({lapply (1:100, FUN = function (x) mean (rnorm (1e7)))},{library (parallel)cl <- makeCluster (4L)res <- parLapply (cl, X = 1:100, fun = function (x) mean (rnorm (1e7)))stopCluster (cl)}, times = 5)
mb
Unit: seconds
...min       lq     mean   median       uq      max neval cld83.08273 83.82933 83.95855 83.97395 84.39401 84.51273     5   b21.42050 21.43552 21.58001 21.49912 21.58116 21.96373     5  a 

参考:

Parallelization in R [David Zelený]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/11918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++学习(位图)[22]

位图 位图&#xff08;Bitmap&#xff09;是一种数据结构&#xff0c;用于表示一个固定范围的布尔值&#xff08;通常是0或1&#xff09;。它使用一个二进制位来表示一个布尔值&#xff0c;其中每个位的值表示对应位置的元素是否存在或满足某种条件。 位图可以用于解决一些特…

利用MATLAB制作DEM山体阴影

在地理绘图中&#xff0c;我们使用的DEM数据添加山体阴影使得绘制的图件显得更加的美观。 GIS中使用ArcGIS软件就可以达到这一目的&#xff0c;或者使用GMT&#xff0c;同样可以得到山体阴影的效果。 本文提供了一个MATLAB的函数&#xff0c;可以得到山体阴影。 clear all;c…

《面试1v1》如何能从Kafka得到准确的信息

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

安防视频管理平台GB设备接入EasyCVR, 如何获取RTMP与RTSP视频流

安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比…

基于粒子群优化算法的分布式电源选址与定容【多目标优化】【IEEE33节点】(Matlab代码实现)

目录 &#x1f4a5;1 概述 1.1 目标函数 2.2 约束条件 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 分布式电源接入配电网&#xff0c;实现就地消纳&#xff0c;可以提高新能源的利用率、提高电能质量和降低系统网损…

出海周报|Temu在美状告shein、ChatGPT安卓版上线、小红书回应闪退

工程机械产业“出海”成绩喜人&#xff0c;山东相关企业全国最多Temu在美状告shein&#xff0c;跨境电商战事升级TikTok将在美国推出电子商务计划&#xff0c;售卖中国商品高德即将上线国际图服务&#xff0c;初期即可覆盖全球超200个国家和地区ChatGPT安卓版正式上线&#xff…

echarts遇到的问题

文章目录 折线图-区域面积图 areaStyley轴只有整数y轴不从0开始y轴数值不确定&#xff0c;有大有小&#xff0c;需要动态处理折线-显示label标线legend的格式化和默认选中状态x轴的lable超长处理x轴的相关设置 echarts各个场景遇到的问题 折线图-区域面积图 areaStyle areaStyl…

node.js的优点

提示&#xff1a;node.js的优点 文章目录 一、什么是node.js二、node.js的特性 一、什么是node.js 提示&#xff1a;什么是node.js? Node.js发布于2009年5月&#xff0c;由Ryan Dahl开发&#xff0c;是一个基于ChromeV8引擎的JavaScript运行环境&#xff0c;使用了一个事件驱…

【c语言进阶】字符函数和字符串函数知识总结

字符函数和字符串函数 前期背景求字符串长度函数strlen函数strlen函数三种模拟实现 长度不受限制的字符串函数strcpy函数strcpy函数模拟实现strcat函数strcat函数模拟实现strcmp函数strcmp函数模拟实现 长度受限制的字符串函数strncpy函数strncpy函数模拟实现strncat函数strnca…

粘包处理的方式

为什么出现粘包&#xff1a; 发送端在发送的时候由于 Nagel 算法的存在会将字节数较小的数据整合到一起发送&#xff0c;导致粘包&#xff1b;接收端不知道发送端数据的长度&#xff0c;导致接收时无法区分数据&#xff1b; 粘包处理的方式&#xff1a; 通过在数据前面加上报…

最新版本docker 设置国内镜像源 加速办法

解决问题:加速 docker 设置国内镜像源 目录: 国内加速地址 修改方法 国内加速地址 1.Docker中国区官方镜像 https://registry.docker-cn.com 2.网易 http://hub-mirror.c.163.com 3.ustc https://docker.mirrors.ustc.edu.cn 4.中国科技大学 https://docker.mirrors…

windows11打不开任务管理器,

目录 第一章、win11系统任务管理器打不开&#xff1f;第二章、解决方式修改注册表 友情提醒&#xff1a; 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接跳转到文章指定位置。 第一章、win11系统任务管理器打不开&#xff1f; Win11任务管理…

FPGA+EMMC 8通道存储小板

FPGA 采用XILINX公司A7100作为主芯片 AD采用AD7606及一款陀螺仪传感器&#xff0c;可以实时存储到EMMC&#xff0c;系统分为采集模式及回放模式 通过232接口对工作模式进行配置&#xff0c;采样率可以动态配置 回放采用W5100S通过TCP协议进行回放数据

【C语言进阶篇】回调函数都学了吧!那么用冒泡排序实现qsort函数你会嘛?

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言&#x1f4ac; qsort 和 冒泡排序的区别&#x1f4d1; qsort 的特点&#x1f4d1; 冒泡排序 …

JS逆向之猿人学爬虫第20题-wasm

文章目录 题目地址sign参数分析python算法还原往期逆向文章推荐题目地址 https://match.yuanrenxue.cn/match/20第20题被置顶到了第1页,题目难度 写的是中等 算法很简单,就一个标准的md5算法,主要是盐值不确定, 而盐值就在wasm里面,可以说难点就在于wasm分析 sign参数分…

[Linux]进程间通信

[Linux]进程间通信 文章目录 [Linux]进程间通信进程间通信什么是进程间通信进程间通信的目的进程间通信的本质为什么存在进程间通信进程间通信的分类 管道什么是管道匿名管道本质pipepipe的使用匿名管道读写情况匿名管道的特征 命名管道本质命令行创建命名管道创建和删除命名管…

如何在电脑上查看连接过的wifi信息?

忘记wifi密码&#xff1f;想要看看wifi信息&#xff1f; 我想这篇文章可以帮到你O(∩_∩)O哈哈~。 通过网络连接中心查看 电脑上找到“网络和共享中心” 点击连接的wifi名称 点击无线属性 在安全选项中就有密码 通过电脑命令行工具查看推荐 通过winr快捷键打开电脑运…

手动搭建gateway,项目集成gateway实现Token效果

目录 背景步骤1、首先创建springboot项目2、引入依赖3、配置文件&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff08;超级重要&#xff01;&#xff01;&#xff01;根据自己的需要进行配置&#xff09;4、相关类我们在服务中进行的白名单中接口的操作如…

信驰达推出RTL8720DN系列2.4G和5G双频Wi-Fi+蓝牙二合一模块

近日&#xff0c;领先的无线物联网通信模块厂商深圳信驰达科技RF-star推出了基于RTL8720DN SoC的2.4 GHz和5 GHz双频Wi-Fi蓝牙二合一模块—RF-WM-20DNB1。 图 1信驰达RF-WM-20DNB1 Wi-Fi模块 RF-WM-20DNB1是一款低功耗单芯片无线蓝牙和Wi-Fi组合模块&#xff0c;支持双频(2.4 G…

详细介绍如何使用HuggingFace和PyTorch进行医学图像分割-附源码

医学图像分割是一种创新过程,使外科医生能够拥有虚拟的“X 射线视觉”。它是医疗保健领域非常有价值的工具,可提供非侵入性诊断和深入分析。考虑到这一点,在这篇文章中,我们将探索威斯康辛大学麦迪逊分校胃肠道图像分割Kaggle 挑战数据集。作为该项目的一部分,我们将使用 …