Closed brentp closed 4 years ago
I need to sprinkle some {.push stacktrace:off.} with OpenMP or going next line when emit
Strange what is nimln_
? On my platform I get #line
and those compiles properly with linedir
Thanks for taking a look. I have these in the C file:
# define nimfr_(proc, file) \
TFrame FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
# define nimfrs_(proc, file, slots, length) \
struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename; NI len; VarSlot s[slots];} FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
# define nimln_(n, file) \
FR_.line = n; FR_.filename = file;
this happened on 1.0.4 and 1.1.1 (dev).
Can you try with the new commit, On my side it doesn't change the codegen but I had no nimframe inserted for starters
It might have to do with nim.cfg stacktrace:off not propagating properly on nimble installs https://github.com/mratsim/Arraymancer/blob/master/nim.cfg#L60
now in Arraymancer dir with --lineDir:on in nim.cfg, I see:
Error: execution of an external compiler program 'gcc -c -w -I/home/brentp/src/nim/lib -I/home/brentp/src/Arraymancer/tests/_split_tests -o /home/brentp/.cache/nim/tests_tensor_part02_d/@m..@s..@ssrc@slaser@sprimitives@smatrix_multiplication@sgemm_packing.nim.c.o /home/brentp/.cache/nim/tests_tensor_part02_d/@m..@s..@ssrc@slaser@sprimitives@smatrix_multiplication@sgemm_packing.nim.c' failed with exit code: 1
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim: In function ‘pack_B_kc_nc__11bn39ac1x5110D79cGLGBkQ’:
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:79:37: error: stray ‘#’ in program
79 | #pragma omp parallel for
| ^
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:79:38: error: unknown type name ‘pragma’; did you mean ‘_Pragma’?
79 | #pragma omp parallel for
| ^
| _Pragma
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:79:49: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘parallel’
79 | #pragma omp parallel for
| ^
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:80:23: error: ‘j’ undeclared (first use in this function)
80 | for (int j = 0; j < `unroll_stop`; j+=`NR`)
| ^
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:80:23: note: each undeclared identifier is reported only once for each function it appears in
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:80:51: error: expected ‘;’ before ‘)’ token
80 | for (int j = 0; j < `unroll_stop`; j+=`NR`)
| ^
| ;
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:80:51: error: expected statement before ‘)’ token
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim: In function ‘pack_B_kc_nc__11bn39ac1x5110D79cGLGBkQ_2’:
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:79:37: error: stray ‘#’ in program
79 | #pragma omp parallel for
| ^
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:79:38: error: unknown type name ‘pragma’; did you mean ‘_Pragma’?
79 | #pragma omp parallel for
| ^
| _Pragma
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:79:49: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘parallel’
79 | #pragma omp parallel for
| ^
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:80:23: error: ‘j’ undeclared (first use in this function)
80 | for (int j = 0; j < `unroll_stop`; j+=`NR`)
| ^
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:80:51: error: expected ‘;’ before ‘)’ token
80 | for (int j = 0; j < `unroll_stop`; j+=`NR`)
| ^
| ;
/home/brentp/src/Arraymancer/src/laser/primitives/matrix_multiplication/gemm_packing.nim:80:51: error: expected statement before ‘)’ token
stack trace: (most recent call last)
/tmp/nimblecache/nimscriptapi.nim(165, 16)
/home/brentp/src/Arraymancer/arraymancer_7004.nims(155, 8) testTask
/home/brentp/src/Arraymancer/arraymancer_7004.nims(146, 10) test
/home/brentp/src/nim/lib/system/nimscript.nim(252, 7) exec
/home/brentp/src/nim/lib/system/nimscript.nim(252, 7) Error: unhandled exception: FAILED: nim c -o:build/tests_tensor_part02 -r tests/_split_tests/tests_tensor_part02.nim [OSError]
Error: Exception raised during nimble script execution
and in my project, I see:
Error: execution of an external compiler program 'gcc -c -w -mpopcnt -fopenmp -I/home/brentp/src/nim/lib -I/home/brentp/src/somalier/src -o /home/brentp/.cache/nim/somalier_d/@m..@s..@s..@s.nimble@spkgs@sarraymancer-0.5.2@snn_primitives@snnp_softmax_cross_entropy.nim.c.o /home/brentp/.cache/nim/somalier_d/@m..@s..@s..@s.nimble@spkgs@sarraymancer-0.5.2@snn_primitives@snnp_softmax_cross_entropy.nim.c' failed with exit code: 1
/home/brentp/.cache/nim/somalier_d/@m..@s..@s..@s.nimble@spkgs@sarraymancer-0.5.2@snn_primitives@snnp_softmax_cross_entropy.nim.c: In function ‘sparse_softmax_cross_entropy__U2kN4wTjyBGH8VUyHptJTg’:
/home/brentp/.cache/nim/somalier_d/@m..@s..@s..@s.nimble@spkgs@sarraymancer-0.5.2@snn_primitives@snnp_softmax_cross_entropy.nim.c:35:19: error: invalid form of ‘#pragma omp atomic’ before ‘;’ token
35 | FR_.line = n; FR_.filename = file;
| ^
/home/brentp/.cache/nim/somalier_d/@m..@s..@s..@s.nimble@spkgs@sarraymancer-0.5.2@snn_primitives@snnp_softmax_cross_entropy.nim.c:904:3: note: in expansion of macro ‘nimln_’
904 | nimln_(111, "/home/brentp/.nimble/pkgs/arraymancer-0.5.2/nn_primitives/nnp_s"
| ^~~~~~
I made another tentative. Still can't reproduce.
thanks for having a look. with f06c43d, if I add --lineDir:on
to the top of arraymancer's nim.cfg then run
nim c --lineDir:on -r tests/_split_tests/tests_tensor_part02.nim
I see:
...
CC: stdlib_hashes.nim
Error: execution of an external compiler program 'gcc -c -w -I/home/brentp/src/nim/lib -I/home/brentp/src/Arraymancer/tests/_split_tests -o /home/brentp/.cache/nim/tests_tensor_part02_d/@m..@s..@ssrc@slaser@sprimitives@smatrix_multiplication@sgemm.nim.c.o /home/brentp/.cache/nim/tests_tensor_part02_d/@m..@s..@ssrc@slaser@sprimitives@smatrix_multiplication@sgemm.nim.c' failed with exit code: 1
/home/brentp/src/Arraymancer/src/laser/openmp.nim: In function ‘gemm_impl__bx5PNxdYQ3GkKKa7m9cGDkg’:
/home/brentp/src/Arraymancer/src/laser/openmp.nim:124:74: error: stray ‘#’ in program
124 | {.emit: ["#pragma omp parallel if (", predicate, ")"].}
| ^
/home/brentp/src/Arraymancer/src/laser/openmp.nim:124:75: error: unknown type name ‘pragma’; did you mean ‘_Pragma’?
124 | {.emit: ["#pragma omp parallel if (", predicate, ")"].}
| ^
| _Pragma
/home/brentp/src/Arraymancer/src/laser/openmp.nim:124:86: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘parallel’
124 | {.emit: ["#pragma omp parallel if (", predicate, ")"].}
| ^
/home/brentp/src/Arraymancer/src/laser/openmp.nim: In function ‘gemm_impl__bx5PNxdYQ3GkKKa7m9cGDkg_2’:
/home/brentp/src/Arraymancer/src/laser/openmp.nim:124:74: error: stray ‘#’ in program
124 | {.emit: ["#pragma omp parallel if (", predicate, ")"].}
| ^
/home/brentp/src/Arraymancer/src/laser/openmp.nim:124:75: error: unknown type name ‘pragma’; did you mean ‘_Pragma’?
124 | {.emit: ["#pragma omp parallel if (", predicate, ")"].}
| ^
| _Pragma
/home/brentp/src/Arraymancer/src/laser/openmp.nim:124:86: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘parallel’
124 | {.emit: ["#pragma omp parallel if (", predicate, ")"].}
these tests complete without --lineDir:on
. I am on
$ nim --version
Nim Compiler Version 1.1.1 [Linux: amd64]
Compiled at 2019-12-06
Copyright (c) 2006-2019 by Andreas Rumpf
git hash: 7213969901a4232013a6e6732d7b434970922510
active boot switches: -d:release
Hopefully there are no more OpenMP errors left now.
now in somalier, I get:
Error: execution of an external compiler program 'gcc -c -w -mpopcnt -fopenmp -g3 -Og -I/home/brentp/src/nim/lib -I/home/brentp/src/somalier/src -o /home/brentp/.cache/nim/somalier_d/@m..@s..@s..@s.nimble@spkgs@sarraymancer-0.5.2@snn_primitives@snnp_softmax_cross_entropy.nim.c.o /home/brentp/.cache/nim/somalier_d/@m..@s..@s..@s.nimble@spkgs@sarraymancer-0.5.2@snn_primitives@snnp_softmax_cross_entropy.nim.c' failed with exit code: 1
/home/brentp/.nimble/pkgs/arraymancer-0.5.2/nn_primitives/nnp_softmax_cross_entropy.nim: In function ‘sparse_softmax_cross_entropy__U2kN4wTjyBGH8VUyHptJTg’:
/home/brentp/.nimble/pkgs/arraymancer-0.5.2/nn_primitives/nnp_softmax_cross_entropy.nim:112:37: error: stray ‘#’ in program
112 | #pragma omp atomic""".}
| ^
/home/brentp/.nimble/pkgs/arraymancer-0.5.2/nn_primitives/nnp_softmax_cross_entropy.nim:112:38: error: unknown type name ‘pragma’; did you mean ‘_Pragma’?
112 | #pragma omp atomic""".}
| ^
| _Pragma
/home/brentp/.nimble/pkgs/arraymancer-0.5.2/nn_primitives/nnp_softmax_cross_entropy.nim:112:49: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘atomic’
112 | #pragma omp atomic""".}
| ^
I am attaching the C file in case it helps. o.c.gz
I manage to reproduce the issue by cloning somalier and running the tests It should be fixed for good now.
I'll definitely move away from OpenMP ASAP.
yes, this is fixed. thanks very much!
Note you can recreate the problem below by adding
--lineDir:on
to Arraymancer'snim.cfg
in somalier, I get:
the code from 903-905 is:
I can bypass the error by compiling in release mode.