using ArgParse ############################################################################### # # Parsing command line # ############################################################################### function parse_commandline() settings = ArgParseSettings() @add_arg_table settings begin "--tol" help = "set numerical tolerance for the SDP solver" arg_type = Float64 default = 1e-14 "--iterations" help = "set maximal number of iterations for the SDP solver (default: 20000)" arg_type = Int default = 60000 "--upper-bound" help = "Set an upper bound for the spectral gap" arg_type = Float64 default = Inf "--cpus" help = "Set number of cpus used by solver" arg_type = Int required = false "-N" help = "Consider elementary matrices EL(N)" arg_type = Int default = 2 "-p" help = "Matrices over field of p-elements (p=0 => over ZZ)" arg_type = Int default = 0 "--radius" help = "Radius of ball B_r(e,S) to find solution over" arg_type = Int default = 2 "-X" help = "Consider EL(N, ZZ⟨X⟩)" action = :store_true end return parse_args(settings) end parsed_args = parse_commandline() function cpuinfo_physicalcores() maxcore = -1 for line in eachline("/proc/cpuinfo") if startswith(line, "core id") maxcore = max(maxcore, parse(Int, split(line, ':')[2])) end end maxcore < 0 && error("failure to read core ids from /proc/cpuinfo") return maxcore + 1 end if parsed_args["cpus"] == nothing N = cpuinfo_physicalcores() parsed_args["cpus"] = N info("Setting --cpus to $N") elseif parsed_args["cpus"] > cpuinfo_physicalcores() warn("Number of specified cores exceeds the physical core count. Performance will suffer.") end end addprocs(parsed_args["cpus"]) BLAS.set_num_threads(parsed_args["cpus"]) include("SLNs.jl") include("Orbit.jl") main(SLNs, parsed_args)