Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Long time initialization of CBinding #104

Open
foxtran opened this issue May 26, 2022 · 1 comment
Open

Long time initialization of CBinding #104

foxtran opened this issue May 26, 2022 · 1 comment

Comments

@foxtran
Copy link

foxtran commented May 26, 2022

I have two versions of Julia and CBinding. All tests are done under Ubuntu 20.04, WSL2, Intel(R) Core(TM) i9-10940X CPU @ 3.30GHz.

There are two scripts that have close definitions.

  1. CBinding 0.9.4:
using CBinding

@cstruct {
      x::Int64
      y::Int64
}
  1. CBinding 1.0.9:
using CBinding

c``

c"""
#include <stdint.h>
"""s;

c"""
  struct Point {
      int64_t x;
      int64_t y;
  };
"""j;

Timing (real) of running of some configurations. I got these value by running time julia-ver script.jl

Julia 1.4.1 + CBinding 0.9.4 Julia 1.7.3 + CBinding 0.9.4 Julia 1.7.3 + CBinding 1.0.9
0m1.239s 0m0.948s 0m6.744s
0m1.203s 0m0.989s 0m6.672s
0m1.197s 0m0.972s 0m6.731s
0m1.159s 0m1.027s 0m6.653s
0m1.227s 0m0.987s 0m6.756s

The fastest version of CBinding is 0.9.4 with Julia 1.7.3. The current release is >6 times slower. Is it possible to speed up the upcoming releases?

@krrutkow
Copy link
Member

This appears to be due to Julia compilation on the first time c"..." macro is encountered.

@time @eval using CBinding
@time @eval c``
@time @eval c"""
  struct Point1 {
      long long x;
      long long y;
  };
"""j;
@time @eval c"""
  struct Point2 {
      long long x;
      long long y;
  };
"""j;
$ time julia-ver init-time.jl 
  0.127416 seconds (366.37 k allocations: 23.747 MiB, 23.11% compilation time)
  1.036880 seconds (3.39 M allocations: 204.519 MiB, 3.83% gc time, 2.10% compilation time)
  4.584189 seconds (15.00 M allocations: 879.728 MiB, 7.24% gc time, 99.91% compilation time)
  0.013201 seconds (9.30 k allocations: 347.551 KiB, 20.69% compilation time)

real    0m5.933s
user    0m5.953s
sys     0m0.467s

Since CBinding is using CBinding-generated bindings to interface libclang, this is most likely a manifestation of #98, and is definitely something that can be improved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants