- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是集群处理的新手,可以使用一些关于如何更好地准备数据和/或从 parallel
调用函数的建议。包裹。我已阅读 parallels
包装小插图,所以对发生了什么有一个模糊的想法。
我要并行化的函数调用二维插值工具akima::interp
.我的输入包含 3 个矩阵(或向量——在 R
中都是相同的):一个包含 x 坐标,一个包含 y 坐标,一个包含一组样本点的“z”或数据值. interp
使用它在规则网格上生成插值数据,以便我可以,例如,绘制字段。设置好这 3 个项目后,我将它们切成“块”并将它们提供给 clusterApply
执行 interp
一块一块地。
我使用的是 Windows7、i7 CPU(8 核)机器。这是 Rprof
的摘要输出对于具有 1e6 个点(1000x1000,如果您愿意)的输入数据集,并映射到 1000x1000 输出网格。
所以我的问题是:
1)似乎“反序列化”花费了大部分时间。这是什么操作,如何减少?
2)一般来说,由于每个worker加载默认的.Rdata
文件,如果我首先将所有输入数据保存到 .Rdata
是否会提高速度?以便它不需要传递给 worker ?
3) 还有什么我根本不知道我应该做的不同的事情吗?
注:sin, atan2, cos, +, max, min
函数发生在 clusterApply
之前调用我。
Rgames> summaryRprof('bigprof.txt')
$by.self
self.time self.pct total.time total.pct
"unserialize" 329.04 99.11 329.04 99.11
"socketConnection" 1.74 0.52 1.74 0.52
"serialize" 0.96 0.29 0.96 0.29
"sin" 0.06 0.02 0.06 0.02
"atan2" 0.04 0.01 0.06 0.02
"cos" 0.04 0.01 0.04 0.01
"+" 0.02 0.01 0.02 0.01
"max" 0.02 0.01 0.02 0.01
"min" 0.02 0.01 0.02 0.01
"row" 0.02 0.01 0.02 0.01
"writeLines" 0.02 0.01 0.02 0.01
$by.total
total.time total.pct self.time self.pct
"mcswirl" 331.98 100.00 0.00 0.00
"clusterApply" 330.00 99.40 0.00 0.00
"staticClusterApply" 330.00 99.40 0.00 0.00
"FUN" 329.06 99.12 0.00 0.00
"unserialize" 329.04 99.11 329.04 99.11
"lapply" 329.04 99.11 0.00 0.00
"recvData" 329.04 99.11 0.00 0.00
"recvData.SOCKnode" 329.04 99.11 0.00 0.00
"makeCluster" 1.76 0.53 0.00 0.00
"makePSOCKcluster" 1.76 0.53 0.00 0.00
"newPSOCKnode" 1.76 0.53 0.00 0.00
"socketConnection" 1.74 0.52 1.74 0.52
"serialize" 0.96 0.29 0.96 0.29
"postNode" 0.96 0.29 0.00 0.00
"sendCall" 0.96 0.29 0.00 0.00
"sendData" 0.96 0.29 0.00 0.00
"sendData.SOCKnode" 0.96 0.29 0.00 0.00
"sin" 0.06 0.02 0.06 0.02
"atan2" 0.06 0.02 0.04 0.01
"cos" 0.04 0.01 0.04 0.01
"+" 0.02 0.01 0.02 0.01
"max" 0.02 0.01 0.02 0.01
"min" 0.02 0.01 0.02 0.01
"row" 0.02 0.01 0.02 0.01
"writeLines" 0.02 0.01 0.02 0.01
"outer" 0.02 0.01 0.00 0.00
"system" 0.02 0.01 0.00 0.00
$sample.interval
[1] 0.02
$sampling.time
[1] 331.98
最佳答案
当clusterApply
被调用时,它首先向每个集群 worker 发送一个任务,然后等待每个人返回相应的结果。如果有更多的任务要做,它会重复这个过程,直到所有的任务都完成。
它用于等待特定工作线程的结果的函数是 recvResult
最终调用 unserialize
从连接到该 worker 的套接字读取数据。因此,如果主进程大部分时间都花在 unserialize
,那么它大部分时间都在等待集群 worker 返回任务结果,这就是您希望在 master 上看到的。如果它在 serialize
上花了很多时间,这意味着它花费了大量时间将任务发送给 worker ,这将是一个坏兆头。
不幸的是,你不知道多少时间 unserialize
花费阻塞,等待结果数据到达,以及实际传输该数据所花费的时间。结果可能很容易被工作人员计算出来并且很大,或者它们可能需要很长时间来计算并且很小:无法从分析数据中分辨出来。
所以要制作unserialize
执行得更快,你需要让工作人员更快地计算他们的结果,或者如果可能的话,让结果更小。此外,使用 makeCluster
可能会有所帮助。 useXDR=FALSE
选项。不使用 XDR 对数据进行编码可能会提高您的性能,同时使 serialize
和 unserialize
快点。
我认为将所有输入数据保存到 .Rdata
没有帮助因为您没有花太多时间向工作人员发送数据,正如在 serialize
中花费的时间很短所见。功能。我怀疑这会让你慢一点。
我能想到的唯一其他建议是尝试使用 parLapply
或 clusterApplyLB
, 而不是 clusterApply
.我建议使用 parLapply
除非您有特定原因使用自 parLapply
以来的其他功能之一往往是最有效的。 clusterApplyLB
当您有需要很长时间但可变长度的任务来执行时,这很有用。
关于r - 如何提高并行集群处理的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19380942/
我正在比较工作簿中的工作表。该工作簿有两张名为 PRE 和 POST 的工作表,每张工作表都有相同的 19 列。行数每天都不同,但特定一天的两张表的行数相同。该宏将 PRE 工作表中的每一行与 POS
我有一个对象数组,我一次循环遍历该数组一个对象,然后进行几次检查以查看该数组中的每个对象是否满足特定条件,如果该对象满足此条件,则复制一个属性将此对象放入数组中(该属性还包含另一个对象)。 for(v
我正在编写一个必须非常快的应用程序。我使用 Qt 5.5 和 Qt Creator,Qt 的 64 位 MSVC2013 编译版本。 我使用非常困倦的 CS 来分析我的应用程序,我看到占用最多独占时间
我有以下 CountDownTimer 在我的 Android 应用程序中不断运行。 CountDownTimer timer_status; timer_status = new CountDown
有一个优化问题,我必须调用随机森林回归器的预测函数数千次。 from sklearn.ensemble import RandomForestRegressor rfr = RandomForestR
我正在努力提高现有 Asp.Net Web 应用程序的数据访问层的性能。场景是。 它是一个基于 Web 的 Asp.Net 应用程序。 数据访问层使用 NHibernate 1.2 构建并作为 WCF
我在我的 Intel Edison 上运行 Debian,并尝试使用 ffmpeg 通过 USB 网络摄像头捕获视频。我正在使用的命令是: ffmpeg -f video4linux2 -i /dev
我有一个 For循环遍历整数 1 到 9 并简单地找到与该整数对应的最底部的条目(即 1,1,1,2,3,4,5 将找到第三个“1”条目)并插入一个空白行。我将数字与仅对应于此代码的应用程序的字符串“
我有一个带有非规范化架构(1 个表)的 postgresql 数据库,其中包含大约 400 万个条目。现在我有这个查询: SELECT count(*) AS Total, (SELECT c
在 Ltac 中实现复杂的策略时,有一些 Ltac 命令或策略调用我预计会失败以及预期失败(例如终止 repeat 或导致回溯)。这些故障通常在故障级别 0 时引发。 更高级别引发的故障“逃避”周
我正在尝试提高 ansible playbook 的性能。我有一个测试剧本如下: --- - name: Test hosts: localhost connection: local g
我正在使用 axios从 Azure 存储 Blob 下载文件 (~100MB)。 axios({ method: 'get', url: uri, onDownloadProgress:
我有一个 ClojureScript 程序,主要对集合执行数学计算。它是在惯用的、独立于主机的 Clojure 中开发的,因此很容易对其进行基准测试。令我惊讶的是(与答案对 Which is fast
我有一个程序必须在硬件允许的情况下尽快发出数千个 http 请求。在现实世界中,这些连接中的每一个都将连接到一个离散的服务器,但我已经编写了一个测试程序来帮助我模拟负载(希望如此)。 我的程序使用 A
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在计算 Clojure 中 3d 点云的边界框。点云表示为 Java 原始浮点数组,点云中的每个点都使用 4 个浮点存储,其中最后一个浮点未使用。像这样: [x0 y0 z0 u0 x1 y1
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我正在尝试使用rayshader 包制作图像。我很高兴能够使用如下代码创建一个 png 文件: library(ggplot2) library(rayshader) example_plot <-
更新 显然,jQuery 模板可以被编译,并且它有助于显示带有 if 语句 的模板的性能 here . 但是如图here ,预编译的 jQuery 模板对我的情况没有多大作用,因为我的模板不包含逻辑
我是编程新手。我有一个启用分页的 ScrollView ,其中包含许多页面(最多十个),并且在每个页面上都有一个自定义按钮。每个自定义按钮都有一个自定义图像。我在 Interface Builder
我是一名优秀的程序员,十分优秀!