如何计算Julia中的作业数?

如何计算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有一个@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 = 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
,它返回一个元组中的时间等信息以供进一步分析。这是一个非常有用的宏,但不是我想要的。我想知道是否有一种方法可以跟踪任务,而不是分配。赋值是指将变量设置为值时的赋值。有些东西可以分配一次,但可以分配多次。