delphijuliacompiler-optimizationexecution-time

I want to obtain the ASM (Intel assembly) code generated by Julia


I wrote a simple for loop in Delphi and translated it to Julia. The execution time of the Delphi program, compared with the Julia one, is just pathetic: Julia is 7 times faster - see the program and the results.

I am trying to figure out how this is possible, because Delphi was supposed to be one of the fastest languages on the planet!

I want to compare the ASM code generated by Julia with the ASM code generated by Delphi. In Delphi, I need only one click to get that code. Where I can see the ASM code for a specific function in Julia?

using BenchmarkTools
println("----------- Test for loops")
# test for loops
function for_fun(a)
    total = 0
    big = 0
    small = 0
    for i in 1:a
        total += 1
        if i > 500000
            big += 1
        else
            small += 1
        end    
    end   

    return (total, small, big)
end

res_for = for_fun(1000000000)
println(res_for)
@btime for_fun(1000000000)

Solution

  • You use the @code_native macro applied to the function call. Here's an example

    julia> @code_native 1+1
            .text
            .file   "+"
            .globl  "julia_+_13305"                 # -- Begin function julia_+_13305
            .p2align        4, 0x90
            .type   "julia_+_13305",@function
    "julia_+_13305":                        # @"julia_+_13305"
    ; ┌ @ int.jl:87 within `+`
            .cfi_startproc
    # %bb.0:                                # %top
            leaq    (%rdi,%rsi), %rax
            retq
    .Lfunc_end0:
            .size   "julia_+_13305", .Lfunc_end0-"julia_+_13305"
            .cfi_endproc
    ; └
                                            # -- End function
            .section        ".note.GNU-stack","",@progbits