我知道Julia有一个@time宏来输出分配的内存量,但有没有办法测量函数中的赋值数量?
答案 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
。但原始代码没有一个任务。
因此,最接近的是使用宏来重写赋值,以便它们递增计数器(除了实际执行分配之外)。这当然可能会大大降低您的代码速度,所以我不推荐它。