Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

OpenMP __par_ symbols not available

jmmv
Beginner
629 Views
Hello,

I'm obtaining run-time traces of the NAS Parallel Benchmarks parallelized with OpenMP and built with ifort. I'm interested in "capturing" the functions generated by ifort, namely those that contain __par_region in their name. These are discussed in the ifort manual, in the section targeted to debugging of OpenMP applications, so I assume that these symbols have to be in the final binaries.

The thing is, I have two build machines. When I build the benchmarks on a SGI Altix (Intel 64) using ifort 11.0 074, the final binary has these symbols:

> nm bin/cg.S | grep conj_grad
4000000000007d00 T conj_grad_
4000000000007d00 t conj_grad_??unw
6000000000013e30 s ___kmpv_zeroconj_grad__9
40000000000081c0 T L_conj_grad__523__par_region9_2$12
400000000000a380 T L_conj_grad__547__tree_reduce11_2$8
400000000000a2c0 T L_conj_grad__631__tree_reduce13_2$9
400000000000a200 T L_conj_grad__656__tree_reduce14_2$10
400000000000a140 T L_conj_grad__700__tree_reduce17_2$11
4000000000111130 r __udt_conj_grad_??unw
>

However, building the same source on an x86_64 box using ifort 11.0 081 (note the slight version difference), the symbols are not there:

> nm bin/cg.S | grep conj_grad
00000000006d3f58 b ___kmpv_zeroconj_grad__9
0000000000406410 T conj_grad_
>

The only options passed to the compiler are "-O -openmp". I have even tried passing -O0 and -g to no avail; same results.

If I compile the sources to assembly code (using -S), I can see that the names are actually generated. But, for some reason, they don't end up in the object code.

Any ideas?

Thank you!
0 Kudos
1 Reply
Ron_Green
Moderator
629 Views
Quoting - jmmv
Hello,

I'm obtaining run-time traces of the NAS Parallel Benchmarks parallelized with OpenMP and built with ifort. I'm interested in "capturing" the functions generated by ifort, namely those that contain __par_region in their name. These are discussed in the ifort manual, in the section targeted to debugging of OpenMP applications, so I assume that these symbols have to be in the final binaries.

The thing is, I have two build machines. When I build the benchmarks on a SGI Altix (Intel 64) using ifort 11.0 074, the final binary has these symbols:

> nm bin/cg.S | grep conj_grad
4000000000007d00 T conj_grad_
4000000000007d00 t conj_grad_??unw
6000000000013e30 s ___kmpv_zeroconj_grad__9
40000000000081c0 T L_conj_grad__523__par_region9_2$12
400000000000a380 T L_conj_grad__547__tree_reduce11_2$8
400000000000a2c0 T L_conj_grad__631__tree_reduce13_2$9
400000000000a200 T L_conj_grad__656__tree_reduce14_2$10
400000000000a140 T L_conj_grad__700__tree_reduce17_2$11
4000000000111130 r __udt_conj_grad_??unw
>

However, building the same source on an x86_64 box using ifort 11.0 081 (note the slight version difference), the symbols are not there:

> nm bin/cg.S | grep conj_grad
00000000006d3f58 b ___kmpv_zeroconj_grad__9
0000000000406410 T conj_grad_
>

The only options passed to the compiler are "-O -openmp". I have even tried passing -O0 and -g to no avail; same results.

If I compile the sources to assembly code (using -S), I can see that the names are actually generated. But, for some reason, they don't end up in the object code.

Any ideas?

Thank you!


Try the -dryrun option on each to verify that they are using the same compiler options.

ron
0 Kudos
Reply