Open SynodicMonth opened 1 month ago
Appears it's not just cores, it's all of sys.info(?!)*
Confirmed same behavior on mojo 2024.7.2521 (a7cec710)
and ubuntu 22.04.4
*Tested 5 of the sys.info calls
from sys.info import *
var workers = num_performance_cores()
var logical = num_logical_cores()
var physical = num_physical_cores()
var SIMD_BIT_WIDTH = simdbitwidth()
var SIMDBITEWIDTH = simdbytewidth()
def main():
print(workers)
print(logical)
print(physical)
print(SIMD_BIT_WIDTH)
print(SIMDBITEWIDTH)
Returns
darin@home:~/Playground/mojo_bug_testing$ mojo 3311_test_extra.mojo
8
16
8
256
32
darin@home:~/Playground/mojo_bug_testing$ mojo build 3311_test_extra.mojo
darin@home:~/Playground/mojo_bug_testing$ ./3311_test_extra
0
0
0
0
0
Aliasing all the above calls does not compile
from sys.info import *
alias workers = num_performance_cores()
alias logical = num_logical_cores()
alias physical = num_physical_cores()
alias SIMD_BIT_WIDTH = simdbitwidth()
alias SIMDBITEWIDTH = simdbytewidth()
def main():
print(workers)
print(logical)
print(physical)
print(SIMD_BIT_WIDTH)
print(SIMDBITEWIDTH)
returns
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:113:4: error: call expansion failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:96:4: note: function instantiation failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:108:57: note: call expansion failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:68:4: note: function instantiation failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:84:18: note: call expansion failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:105:8: note: function instantiation failed
<unknown>:0: note: failed to compile-time evaluate function call
/__w/modular/modular/open-source/mojo/stdlib/stdlib/sys/info.mojo:709:4: note: failed to interpret function @stdlib::sys::info::num_performance_cores()
/__w/modular/modular/open-source/mojo/stdlib/stdlib/sys/info.mojo:716:76: note: call expansion failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/sys/ffi.mojo:342:6: note: failed to interpret operation pop.external_call{func: "KGEN_CompilerRT_NumPerformanceCores" : !kgen.string, funcAttrs: ["willreturn"], memory: #llvm.memory_effects<other = none, argMem = none, inaccessibleMem = none>, resAttrs: [{llvm.noundef}]}(#kgen.pack<> : !kgen.pack<[]>)
/__w/modular/modular/open-source/mojo/stdlib/stdlib/sys/info.mojo:716:76: note: call expansion failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/sys/ffi.mojo:342:6: note: unable to interpret call to unknown external function: KGEN_CompilerRT_NumPerformanceCores
mojo: error: failed to run the pass manager
I can't reproduce this on the current internal build. If you move var workers = num_performance_cores()
into def main
like:
from sys.info import num_performance_cores
def main():
var workers = num_performance_cores()
print(workers)
Does that fix it?
@abduld is a global var
statement undefined behavior at the moment?
I can't reproduce this on the current internal build. If you move
var workers = num_performance_cores()
intodef main
like:from sys.info import num_performance_cores def main(): var workers = num_performance_cores() print(workers)
Does that fix it?
@abduld is a global
var
statement undefined behavior at the moment?
Yes, var in scope of main works.
alias workers
in global throws an error on print for variadic statements [expected?]
alias workers
in def main
returns
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:113:4: error: call expansion failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:96:4: note: function instantiation failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:108:57: note: call expansion failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:68:4: note: function instantiation failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:84:18: note: call expansion failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/builtin/_startup.mojo:105:8: note: function instantiation failed
<unknown>:0: note: failed to compile-time evaluate function call
/__w/modular/modular/open-source/mojo/stdlib/stdlib/sys/info.mojo:709:4: note: failed to interpret function @stdlib::sys::info::num_performance_cores()
/__w/modular/modular/open-source/mojo/stdlib/stdlib/sys/info.mojo:716:76: note: call expansion failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/sys/ffi.mojo:342:6: note: failed to interpret operation pop.external_call{func: "KGEN_CompilerRT_NumPerformanceCores" : !kgen.string, funcAttrs: ["willreturn"], memory: #llvm.memory_effects<other = none, argMem = none, inaccessibleMem = none>, resAttrs: [{llvm.noundef}]}(#kgen.pack<> : !kgen.pack<[]>)
/__w/modular/modular/open-source/mojo/stdlib/stdlib/sys/info.mojo:716:76: note: call expansion failed
/__w/modular/modular/open-source/mojo/stdlib/stdlib/sys/ffi.mojo:342:6: note: unable to interpret call to unknown external function: KGEN_CompilerRT_NumPerformanceCores
mojo: error: failed to run the pass manager
alias workers in global throws an error on print for variadic statements [expected?]
No that is unexpected and we should fix it
Bug description
Using
mojo run
, it works normally and prints 6. Aftermojo compile
, it prints 0.Steps to reproduce
just run the code above.
btw,
This works well in both
mojo run
andmojo compile
.System information