nobs should stop appending -lpthread
Currently nobs unconditionally blindly appends -lpthread
to links for every unit test it builds, and to the LIBFLAGS in upcxx-meta, thus to all application builds.
This is bad for several reasons:
- It's not portable. On some platforms the proper spelling for this option differs (eg on BSD the correct usage is
-pthread
with no-l
) - -lpthread is not sufficient to get thread-safe system libraries. Many system headers also require defines like
-D_THREAD_SAFE
or-D_REENTRANT
to provide correct operation in a thread-safe environment. - Nobs is appending it even for the single-threaded backend. The main reason a single-threaded backend exists in GASNet (and UPC++) is to excise this very dependency. Appending -lpthread means if some part of the runtime or app code accidentally adds a dependency on the pthread library (eg an unconditional use of a mutex), it's likely to just silently work and silently degrade performance.
GASNet's makefile fragments already add the appropriate flags for pthreads support in the GASNET_DEFINES and GASNET_LIBS for the PAR backend. This should already be correctly present in the parallel backend. nobs should just rely on that and stop ever adding -lpthread.
If there is a GASNet-free unit test that requires threading (uts_threads) then -lpthread should be added to just that test, with the understanding that test might not build portably.
Comments (10)
-
Account Deleted -
reporter I don't know of a place where it's actively causing a failure right now, so I'm ok deferring it until after release unless that changes.
-
reporter - changed milestone to 2018.03.31 release
Deferred for next release
-
reporter - changed milestone to 2017.12.31 release
-
reporter - removed milestone
-
reporter This issue was discussed in the 1/10/18 meeting, and we agreed to defer it for now as it is not currently known to break any supported system.
The GASNet SEQ makefile fragments do not export threading settings, because in GASNet-1 SEQ clients are forbidden from using threads. UPC++ could scrape these settings from the PAR makefile fragment, or wait until EX changes the way threading modes works with endpoints.
-
-
assigned issue to
-
assigned issue to
-
reporter - changed milestone to Deferred indefinitely
- marked as trivial
This issue was triaged at the 2018-06-13 Pagoda meeting and assigned a new milestone/priority.
This issue was deferred indefinitely, because it does not affect correct operation on currently supported platforms.
-
reporter An additional wrinkle here:
With Apple XCode clang on macOS sierra and high-sierra,
-pthread
is an (undocumented) compile-time only option. nobs' blind use of-pthread
with this linker generates a link warning whenever nobs is asked to build any test on the listtest/nobsrule.py:REQUIRES_PTHREAD
. Eg: (on our shared high-sierra system)$ nobs exe test/hello_threads.cpp g++ -std=c++11 -D_GNU_SOURCE=1 -I/Users/bonachea/UPC/upcxx/.nobs/art/ce4bc5d3e5fb44b18a55a9427df19bded46adaa2 -DNOBS_DISCOVERY -MM -MT x /Users/bonachea/UPC/upcxx/test/hello_threads.cpp g++ -std=c++11 -D_GNU_SOURCE=1 -I/Users/bonachea/UPC/upcxx/.nobs/art/ce4bc5d3e5fb44b18a55a9427df19bded46adaa2 -O2 -Wall -c /Users/bonachea/UPC/upcxx/test/hello_threads.cpp -o /Users/bonachea/UPC/upcxx/.nobs/art/fb5db0f6ceb5cb65adac0e1722f61372ea8c4706.hello_threads.cpp.o g++ -o /Users/bonachea/UPC/upcxx/.nobs/art/9ea3877e32ee7c63825bc9862d843b0e65c2da6f.x /Users/bonachea/UPC/upcxx/.nobs/art/fb5db0f6ceb5cb65adac0e1722f61372ea8c4706.hello_threads.cpp.o -pthread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ g++ -o /Users/bonachea/UPC/upcxx/.nobs/art/9ea3877e32ee7c63825bc9862d843b0e65c2da6f.x /Users/bonachea/UPC/upcxx/.nobs/art/fb5db0f6ceb5cb65adac0e1722f61372ea8c4706.hello_threads.cpp.o -pthread clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument] $ env UPCXX_BACKEND=gasnet_par nobs exe test/view.cpp g++ -std=c++11 -D_GNU_SOURCE=1 -I/Users/bonachea/UPC/upcxx/.nobs/art/ce4bc5d3e5fb44b18a55a9427df19bded46adaa2 -DNOBS_DISCOVERY -MM -MT x /Users/bonachea/UPC/upcxx/test/view.cpp g++ -std=c++11 -D_GNU_SOURCE=1 -I/Users/bonachea/UPC/upcxx/.nobs/art/ce4bc5d3e5fb44b18a55a9427df19bded46adaa2 -DUPCXX_ASSERT_ENABLED=0 -DUPCXX_BACKEND=1 -DUPCXX_BACKEND_GASNET_PAR=1 -DUPCXX_MPSC_QUEUE_ATOMIC=1 -D_GNU_SOURCE=1 -DGASNET_PAR -D_REENTRANT -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/smp-conduit -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/other -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/extended-ref/vis -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/extended-ref/coll -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/extended-ref/ratomic -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/extended-ref -I/Users/bonachea/UPC/upcxx/.nobs/art/e6b1e9feb08d8f6a29257cfa78ebd1e8cc68b227 -DNOBS_DISCOVERY -MM -MT x /Users/bonachea/UPC/upcxx/test/view.cpp g++ -std=c++11 -D_GNU_SOURCE=1 -I/Users/bonachea/UPC/upcxx/.nobs/art/ce4bc5d3e5fb44b18a55a9427df19bded46adaa2 -DUPCXX_ASSERT_ENABLED=0 -DUPCXX_BACKEND=1 -DUPCXX_BACKEND_GASNET_PAR=1 -DUPCXX_MPSC_QUEUE_ATOMIC=1 -D_GNU_SOURCE=1 -DGASNET_PAR -D_REENTRANT -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/smp-conduit -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/other -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/extended-ref/vis -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/extended-ref/coll -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/extended-ref/ratomic -I/Users/bonachea/UPC/upcxx/.nobs/art/7d560b063cb08a1d11d9d765d389248a83d3ee06/GASNet-EX-collaborator-snapshot/extended-ref -I/Users/bonachea/UPC/upcxx/.nobs/art/e6b1e9feb08d8f6a29257cfa78ebd1e8cc68b227 -O2 -Wall -O3 -Wno-unused -Wunused-result -Wno-unused-parameter -Wno-address -c /Users/bonachea/UPC/upcxx/test/view.cpp -o /Users/bonachea/UPC/upcxx/.nobs/art/71ed73975448346e7257776dcb344718598f8ace.view.cpp.o g++ -O2 -O3 -Wno-unused -Wunused-result -Wno-unused-parameter -Wno-address -Wl,-multiply_defined,suppress -o /Users/bonachea/UPC/upcxx/.nobs/art/92b9c3d02846c2f5fb3cdbc9160659ffdaab47b3.x /Users/bonachea/UPC/upcxx/.nobs/art/dc4c665ab3c7610fea84bc72bbec92d12073a76b.copy.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/cbf8f714de923b4fa703cd8a48d831e8504ae7a5.runtime.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/76a4354191c24d64eda6dc1593c58385428e927f.barrier.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/5f4e16843420bbe58fa5784205eb041ac681bfcd.rget.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/978765563b3e21d5a935e1ecbce3ed1d78d684e3.core.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/8ab5aaa4c293774f9f50460f273b844b3402bf05.os_env.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/6c7368814a7c07861003cedea7b510f1a582ef85.atomic.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/b11848c1176c37caf84aa9486049acdceee90b6e.digest.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/620abf23138f0b01ba95c8b3e09ca7c88ee24393.global_fnptr.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/916dd59925b25a2af7851282927b4eebba648bde.segment_allocator.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/06980497320ce9c6cccbbb162e336ae596fa28e7.vis.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/71ed73975448346e7257776dcb344718598f8ace.view.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/917448d772719ce1e1165ef642b86a1c93d96fcc.broadcast.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/28b027910faa198f9fb9e6c7767f7f4399cd1021.upc_link.c.o /Users/bonachea/UPC/upcxx/.nobs/art/d3cd00b3a5833125e84e2d4baf6316cd2170b86b.rput.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/a7d43cc7aa5b49967d52bb7502fcee484c843e98.dl_malloc.c.o /Users/bonachea/UPC/upcxx/.nobs/art/0560e77f1e785857402c9431da937b6c0a6f60f3.diagnostic.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/01f550f60368b1306269a4c4071fcc98b4c4715f.team.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/f8ca8606e70728b77412ce211d6095f725877f6d.persona.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/f708befb4d7bb6b2e13adb882862eddbc8821d0d.cuda.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/3e7ecceabe4a1ab0cf38d9c219402f3ff023a6ff.reduce.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/f21dc161581d13b4278f32e829f65b16558fa81f.upcxx.cpp.o -L/Users/bonachea/UPC/upcxx/.nobs/art/e6b1e9feb08d8f6a29257cfa78ebd1e8cc68b227/smp-conduit -pthread -lgasnet-smp-par ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ g++ -O2 -O3 -Wno-unused -Wunused-result -Wno-unused-parameter -Wno-address -Wl,-multiply_defined,suppress -o /Users/bonachea/UPC/upcxx/.nobs/art/92b9c3d02846c2f5fb3cdbc9160659ffdaab47b3.x /Users/bonachea/UPC/upcxx/.nobs/art/dc4c665ab3c7610fea84bc72bbec92d12073a76b.copy.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/cbf8f714de923b4fa703cd8a48d831e8504ae7a5.runtime.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/76a4354191c24d64eda6dc1593c58385428e927f.barrier.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/5f4e16843420bbe58fa5784205eb041ac681bfcd.rget.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/978765563b3e21d5a935e1ecbce3ed1d78d684e3.core.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/8ab5aaa4c293774f9f50460f273b844b3402bf05.os_env.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/6c7368814a7c07861003cedea7b510f1a582ef85.atomic.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/b11848c1176c37caf84aa9486049acdceee90b6e.digest.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/620abf23138f0b01ba95c8b3e09ca7c88ee24393.global_fnptr.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/916dd59925b25a2af7851282927b4eebba648bde.segment_allocator.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/06980497320ce9c6cccbbb162e336ae596fa28e7.vis.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/71ed73975448346e7257776dcb344718598f8ace.view.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/917448d772719ce1e1165ef642b86a1c93d96fcc.broadcast.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/28b027910faa198f9fb9e6c7767f7f4399cd1021.upc_link.c.o /Users/bonachea/UPC/upcxx/.nobs/art/d3cd00b3a5833125e84e2d4baf6316cd2170b86b.rput.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/a7d43cc7aa5b49967d52bb7502fcee484c843e98.dl_malloc.c.o /Users/bonachea/UPC/upcxx/.nobs/art/0560e77f1e785857402c9431da937b6c0a6f60f3.diagnostic.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/01f550f60368b1306269a4c4071fcc98b4c4715f.team.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/f8ca8606e70728b77412ce211d6095f725877f6d.persona.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/f708befb4d7bb6b2e13adb882862eddbc8821d0d.cuda.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/3e7ecceabe4a1ab0cf38d9c219402f3ff023a6ff.reduce.cpp.o /Users/bonachea/UPC/upcxx/.nobs/art/f21dc161581d13b4278f32e829f65b16558fa81f.upcxx.cpp.o -L/Users/bonachea/UPC/upcxx/.nobs/art/e6b1e9feb08d8f6a29257cfa78ebd1e8cc68b227/smp-conduit -pthread -lgasnet-smp-par clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument]
It's also worth noting that in the second example, GASNet's smp-conduit makefile fragment (smp-par.mak) is already providing the correct value of "empty" in
GASNET_LIBS
for what's needed to link pthreads support on this system, so the nobs addition of-pthread
is both unnecessary and incorrect. -
reporter - changed status to wontfix
pull request #134 retires nobs from end-user support
- Log in to comment
Given the release deadline, is this urgent to hit our supported platforms?