如何计算Julia中的作业数?
我知道Julia有一个@time宏,可以输出分配的内存量,但是有没有办法测量函数中的赋值数量?问题是计算赋值的数量是在机器运行代码时,寄存器或内存加载和存储不再与原始代码的分配相对应。例如,代码如何计算Julia中的作业数?,julia,Julia,我知道Julia有一个@time宏,可以输出分配的内存量,但是有没有办法测量函数中的赋值数量?问题是计算赋值的数量是在机器运行代码时,寄存器或内存加载和存储不再与原始代码的分配相对应。例如,代码 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
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
。但是原始代码没有一个赋值
因此,最接近的方法是使用宏重写赋值,以便它们增加计数器(除了实际执行赋值之外)。当然,这可能会大大降低代码的速度,因此我不建议这样做。问题在于计算分配的数量是,当机器运行代码时,寄存器或内存加载和存储不再与原始代码的分配相对应。例如,代码
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
。但是原始代码没有一个赋值
因此,最接近的方法是使用宏重写赋值,以便它们增加计数器(除了实际执行赋值之外)。当然,这可能会大大降低您的代码速度,因此我不建议您这样做。此宏也会打印分配数。
@timev
将打印有关分配数及其类型的更多信息。@RezaAfzalan+1 for@timev
感谢您给我指点!还有一个@timed
,它返回一个元组中的时间等信息以供进一步分析。这是一个非常有用的宏,但不是我想要的。我想知道是否有一种方法可以跟踪任务,而不是分配。赋值是指将变量设置为值时的赋值。某些内容可以分配一次,但分配多次。此宏还打印分配数量。@timev
将打印有关分配数量及其类型的详细信息。@RezaAfzalan+1 for@timev
感谢您为我指点!还有一个@timed
,它返回一个元组中的时间等信息以供进一步分析。这是一个非常有用的宏,但不是我想要的。我想知道是否有一种方法可以跟踪任务,而不是分配。赋值是指将变量设置为值时的赋值。有些东西可以分配一次,但可以分配多次。