- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通过从流程中删除一个步骤来进行一些优化:
> library(microbenchmark)
> microbenchmark(paste0("this","and","that"))
Unit: microseconds
expr min lq mean median uq max neval
paste0("this", "and", "that") 2.026 2.027 3.50933 2.431 2.837 34.038 100
> microbenchmark(.Internal(paste0(list("this","and","that"),NULL)))
Unit: microseconds
expr min lq mean median uq max neval
.Internal(paste0(list("this", "and", "that"), NULL)) 1.216 1.621 2.77596 2.026 2.027 43.764 100
到现在为止还挺好。
list
被定义为
function (...) .Primitive("list")
我试图进一步“简化”
> microbenchmark(.Internal(paste0(.Primitive("list")("this","and","that"),NULL)))
Unit: microseconds
expr min lq mean median uq max neval
.Internal(paste0(.Primitive("list")("this", "and", "that"), NULL)) 3.241 3.242 4.66433 3.647 3.648 80.638 100
时间增加了!
"list"
是问题的根源,并且在函数的实际调用中处理方式不同
list
但如何?
library(compiler)
ff <- compile(function(...){.Internal(paste0(.Primitive("list")("this","and","that"),NULL))})
ff2 <- compile(function(...){.Internal(paste0(list("this","and","that"),NULL))})
microbenchmark(eval(ff),eval(ff2),times=10000)
> microbenchmark(eval(ff2),eval(ff),times=10000)
Unit: microseconds
expr min lq mean median uq max neval
eval(ff2) 1.621 2.026 2.356761 2.026 2.431 144.257 10000
eval(ff) 1.621 2.026 2.455913 2.026 2.431 89.148 10000
并查看从 microbenchmark 生成的图(只需用
plot()
将其包装以自己查看)运行了很多次,看起来那些在统计上具有相同的性能,尽管看起来像 ff2 的“max”值更差-案子。我不知道该怎么做,但也许这会对某人有所帮助。所以所有这些基本上都说它们编译成相同的代码。这是否意味着他的评论就是答案?
最佳答案
原因.Internal(paste0(.Primitive("list")("this","and","that"),NULL))
较慢似乎是因为Josh O'Brien猜到了。调用.Primitive("list")
直接产生一些额外的开销。
您可以通过一个简单的示例查看效果:
require(compiler)
pl <- cmpfun({.Primitive("list")})
microbenchmark(list(), .Primitive("list")(), pl())
# Unit: nanoseconds
# expr min lq median uq max neval
# list() 63 98.0 112.0 140.5 529 100
# .Primitive("list")() 4243 4391.5 4486.5 4606.0 16077 100
# pl() 79 135.5 148.0 175.5 39108 100
.Primitive
的速度和
.Internal
从 R 提示符。它们都是 C 代码的入口点。
.Primitive
的调用与
.Internal
.这是递归的,因为
.Internal
本身就是一个原语。
> .Internal
function (call) .Primitive(".Internal")
.Internal
,您会遇到同样的缓慢情况。 “直接”......如果您编译“直接”调用,则类似的“加速”。
Internal. <- function() .Internal(paste0(list("this","and","that"),NULL))
Primitive. <- function() .Primitive(".Internal")(paste0("this","and","that"),NULL)
cPrimitive. <- cmpfun({Primitive.})
microbenchmark(Internal., Primitive., cPrimitive., times=1e4)
# Unit: nanoseconds
# expr min lq median uq max neval
# Internal. 26 27 27 28 1057 10000
# Primitive. 28 32 32 33 2526 10000
# cPrimitive. 26 27 27 27 1706 10000
关于r - .Primitive 和 .Internal 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194281/
这只是一个练习,但我无法弄清楚其中的歧义: private static void flipFlop(String str, int i, Integer iRef) { System.out.pri
我假设 jls 中描述的转换是根据优先级排序的。首先具有更高的优先级。 jls 因此我解决了 Boxing 比 Unboxing 具有更高的优先级。我决定检验这个假设。 研究以下代码: public
我的问题看起来很简单。 int i =99999; long square = i*i; System.out.println(square); //prints 1409865409 - inc
我有一种情况,我必须更改 java 常量。 我有下面的代码工作 import java.lang.reflect.Field; import java.lang.reflect.Modifier; p
Section 4.2 of the Java Language Specification指出,“原始值不与其他原始值共享状态”。这到底是什么意思? 最佳答案 这意味着原始类型的每个值都在内存中占据
我想将对原始类型的引用传递给一个方法,这可能会改变它。 考虑以下示例: public class Main { Integer x = new Integer(42); Integer
为了学习依赖类型,我正在用 Idris 重写我的旧 Haskell 游戏。目前游戏“引擎”使用内置的整数类型,例如 Word8 .我想证明一些涉及这些数字的数字属性的引理(例如,双重否定是身份)。但是
我从react-primitives自述文件https://github.com/lelandrichardson/react-primitives#readme中读取内容,指出我们需要安装目标平台库
让我们以jackson序列化器为例,假设我们有一个这样的类: public class Car { private String brand; private Integer weig
出于某种原因,我想做这样的事情: template void write(const Data& data) { std::fstream out {...}; out.write(r
由于 C# 中的 struct 由其成员的位组成,因此您不能拥有包含任何 T 字段的值类型 T: // Struct member 'T.m_field' of type 'T' causes a c
这个问题在这里已经有了答案: Why does int i = 1024 * 1024 * 1024 * 1024 compile without error? (5 个回答) 关闭8年前。 在Jav
在好几个地方我都看到了类似这样的声明: “Scala 编译器在编译代码中尽可能使用 Java 数组、基本类型和 native 算术”(《Scala 编程》一书)。但实际上我没有看到这一点,例如在下面的
术语“同步原语”到底是什么意思?例如:互斥锁,关键部分,等待计时器,事件,监视器,条件变量,信号量。它们都是同步原语吗?我还没有列出其他同步原语吗?这些是有效的问题吗? 最佳答案 同步原语是平台(例如
我正在通读 Rubinius source code ,我不断遇到类似这样的方法: def self.do_something Rubinius.primitive :vm_do_somethin
我正在用解释器编写类似 Scheme 的程序。类似 Scheme 的解释器应该可以很好地与任何实现 IEnumerable 的对象一起工作,这似乎很自然。 解释器不允许突变 - 没有暴露有副作用的函数
ASP.NET Web Api 函数返回一个简单的 JSON 字符串。 当我从 angularjs 调用这个函数时,我得到一个带引号的字符串,而不是一个简单的字符串: return $http.pos
我正在将一个项目(不是我最初的项目)从 python2 转换为 python3。 在我的一个脚本中: sk = (key.Sub[0]/["point", ["_CM"]]).value 这适用于 p
我在一周前运行良好的应用程序中实现了指纹身份验证。没有更改代码,我现在收到以下错误: FATAL EXCEPTION: main Caused by: java.lang.IllegalSta
我在从 URL 接收 JSON 数组时遇到问题。我已经验证我的链接没问题,并且返回了正确的 JSON 数组,它甚至显示在错误消息中。我不确定这是什么意思。 错误: 04-17 21:34:04.435
我是一名优秀的程序员,十分优秀!