JuliaPerf / MCAnalyzer.jl

A set of tools for machine code analyzing of Julia code
Other
46 stars 9 forks source link

IOError; could not spawn from the README example #13

Closed miguelraz closed 5 years ago

miguelraz commented 5 years ago
julia> analyze(mysum, Tuple{Vector{Float64}})
ERROR: IOError: could not spawn `/home/mrg/Desktop/iaca-lin64 -arch SKL /tmp/tmp6JsdjR/a.out`: permission denied (EACCES)
Stacktrace:
 [1] _spawn_primitive(::String, ::Cmd, ::Array{Any,1}) at ./process.jl:400
 [2] setup_stdios(::getfield(Base, Symbol("##505#506")){Cmd}, ::Array{Any,1}) at ./process.jl:413
 [3] _spawn at ./process.jl:412 [inlined]
 [4] #run#515(::Bool, ::Function, ::Cmd) at ./process.jl:725
 [5] run at ./process.jl:724 [inlined]
 [6] iaca(::Symbol, ::String, ::String) at /home/mrg/.julia/packages/MCAnalyzer/ReUXL/src/MCAnalyzer.jl:22
 [7] #invokelatest#1 at ./essentials.jl:742 [inlined]
 [8] invokelatest at ./essentials.jl:741 [inlined]
 [9] (::getfield(MCAnalyzer, Symbol("##2#4")){typeof(mysum),DataType,Symbol,typeof(MCAnalyzer.jloptimize!)})(::String) at /home/mrg/.julia/packages/MCAnalyzer/ReUXL/src/MCAnalyzer.jl:91
 [10] mktempdir(::getfield(MCAnalyzer, Symbol("##2#4")){typeof(mysum),DataType,Symbol,typeof(MCAnalyzer.jloptimize!)}, ::String) at ./file.jl:581
 [11] mktempdir(::Function) at ./file.jl:579
 [12] analyze at /home/mrg/.julia/packages/MCAnalyzer/ReUXL/src/MCAnalyzer.jl:82 [inlined] (repeats 3 times)
 [13] top-level scope at none:0

but

shell> ls -la
total 8576
drwxrwxrwx  2 mrg mrg    4096 oct 23  2017 ./
drwxr-xr-x 26 mrg mrg   16384 abr 29 08:48 ../
-rwxrwxrwx  1 mrg mrg 8755272 oct 23  2017 iaca*
-rwxrwxrwx  1 mrg mrg    1840 oct 23  2017 iacaMarks.h*

and

shell> pwd
/home/mrg/Desktop/iaca-lin64

shell> ls
iaca*  iacaMarks.h*

julia> ENV["IACA_PATH"] = "/home/mrg/Desktop/iaca-lin64"
"/home/mrg/Desktop/iaca-lin64"

on Julia 1.1, Linux 16.04.

vchuravy commented 5 years ago

It needs the full path to the binary e.g. :julia> ENV["IACA_PATH"] = "/home/mrg/Desktop/iaca-lin64/iaca"

miguelraz commented 5 years ago

Success!

julia> analyze(mysum, Tuple{Vector{Float64}})
Intel(R) Architecture Code Analyzer Version -  v3.0-28-g1ba2cbb build date: 2017-10-23;16:42:45
Analyzed File -  /tmp/tmp1kDxv7/a.out
Binary Format - 64Bit
Architecture  -  SKL
Analysis Type - Throughput

Throughput Analysis Report
--------------------------
Block Throughput: 4.00 Cycles       Throughput Bottleneck: Dependency chains
Loop Count:  32
Port Binding In Cycles Per Iteration:
--------------------------------------------------------------------------------------------------
|  Port  |   0   -  DV   |   1   |   2   -  D    |   3   -  D    |   4   |   5   |   6   |   7   |
--------------------------------------------------------------------------------------------------
| Cycles |  0.5     0.0  |  0.5  |  1.0     1.0  |  1.0     1.0  |  0.0  |  0.5  |  0.5  |  0.0  |
--------------------------------------------------------------------------------------------------

DV - Divider pipe (on port 0)
D - Data fetch pipe (on ports 2 and 3)
F - Macro Fusion with the previous instruction occurred
* - instruction micro-ops not bound to a port
^ - Micro Fusion occurred
# - ESP Tracking sync uop was issued
@ - SSE instruction followed an AVX256/AVX512 instruction, dozens of cycles penalty is expected
X - instruction not supported, was not accounted in Analysis

| Num Of   |                    Ports pressure in cycles                         |      |
|  Uops    |  0  - DV    |  1   |  2  -  D    |  3  -  D    |  4   |  5   |  6   |  7   |
-----------------------------------------------------------------------------------------
|   1      |             |      | 1.0     1.0 |             |      |      |      |      | mov rdx, qword ptr [rdi]
|   2      | 0.5         | 0.5  |             | 1.0     1.0 |      |      |      |      | vaddsd xmm0, xmm0, qword ptr [rdx+rcx*8]
|   1      |             |      |             |             |      | 0.5  | 0.5  |      | add rcx, 0x1
|   1*     |             |      |             |             |      |      |      |      | cmp rax, rcx
|   0*F    |             |      |             |             |      |      |      |      | jnz 0xffffffffffffffe9