nobs should stop appending -lpthread

Issue #62 wontfix
Dan Bonachea created an issue

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:

  1. 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)
  2. -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.
  3. 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)

  1. Dan Bonachea 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.

  2. Dan Bonachea 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.

  3. Dan Bonachea 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 list test/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.

  4. Log in to comment