如何计算朱莉娅的作业数量?

时间:2016-01-15 00:51:52

标签: julia

我知道Julia有一个@time宏来输出分配的内存量,但有没有办法测量函数中的赋值数量?

1 个答案:

答案 0 :(得分:0)

计算分配的问题是,当机器运行代码时,寄存器或内存加载和存储不再对应于原始代码的分配。例如,代码

julia> g(x) = x^3
g (generic function with 1 method)

julia> @code_llvm g(1)

define i64 @julia_g_70778(i64) #0 {
top:
  %1 = mul i64 %0, %0
  %2 = mul i64 %1, %0
  ret i64 %2
}

julia> @code_native g(1)
    .text
Filename: REPL[7]
    pushq   %rbp
    movq    %rsp, %rbp
Source line: 1
    movq    %rdi, %rax
    imulq   %rax, %rax
    imulq   %rdi, %rax
    popq    %rbp
    retq
    nopw    %cs:(%rax,%rax)

显然有四个“作业”,两个movq和两个imulq。但原始代码没有一个任务。

因此,最接近的是使用宏来重写赋值,以便它们递增计数器(除了实际执行分配之外)。这当然可能会大大降低您的代码速度,所以我不推荐它。