Julia:如何对并行代码进行性能分析

3

如何在Julia中适当地对并行代码进行性能分析? 当我运行代码时,

@profile foo(...) 

其中 foo 是我的函数,我得到

julia> Profile.print()
1234 task.jl; anonymous; line: 23
 4    multi.jl; remotecall_fetch; line: 695
  2 multi.jl; send_msg_; line: 172
   2 serialize.jl; serialize; line: 74
    2 serialize.jl; serialize; line: 299
     2 serialize.jl; serialize; line: 130
      2 serialize.jl; serialize; line: 299
       1 dict.jl; serialize; line: 369
        1 serialize.jl; serialize_type; line: 278
       1 serialize.jl; serialize; line: 199
        1 serialize.jl; serialize; line: 227
         1 serialize.jl; serialize; line: 160
          1 serialize.jl; serialize; line: 160
           1 serialize.jl; serialize; line: 299
            1 serialize.jl; serialize; line: 294
             1 io.jl; write; line: 47
              1 ./iobuffer.jl; write; line: 234
               1 ./iobuffer.jl; ensureroom; line: 151
                1 ./array.jl; resize!; line: 503
  2 multi.jl; send_msg_; line: 178
   2 stream.jl; write; line: 724
 1230 multi.jl; remotecall_fetch; line: 696
  1230 ./multi.jl; wait_full; line: 595
   1230 ./task.jl; wait; line: 189
    1229 ./task.jl; wait; line: 269
     1229 ./stream.jl; process_events; line: 529
    1    ./task.jl; wait; line: 282
     1 ./stream.jl; process_events; line: 529
402  task.jl; anonymous; line: 95
 402 REPL.jl; eval_user_input; line: 53
  401 profile.jl; anonymous; line: 14
   401 ...mba/src/model/mcmc.jl; mcmc; line: 314
    401 ./task.jl; sync_end; line: 306
     401 task.jl; wait; line: 48
      401 ./task.jl; wait; line: 189
       401 ./task.jl; wait; line: 269
        401 ./stream.jl; process_events; line: 529
  1   profile.jl; anonymous; line: 16
217  task.jl; task_done_hook; line: 83
 217 ./task.jl; wait; line: 269
  217 ./stream.jl; process_events; line: 529
2个回答

2

不确定是否有效,但您可能需要考虑让工人调用类似以下函数的函数:

function profile_function(func, args...)
    Profile.clear()
    ret = @profile apply(func, args)
    pdata = Profile.retrieve()
    ret, pdata
end

pdata 应包含来自该工作进程的分析数据。您应该能够在 ProfileView 中查看它。


0

这看起来非常有趣,希望设置起来不会太麻烦。 - bdeonovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接