nvBWT gotchas

Has anyone got nvBIO to compile on Red hat or CENTOS?

Problems so far

  1. Need newish version of cmake (at least version 2.8)
  2. Need newish version of gcc GNU compiler (4.7.x seems to be the earliest)
  3. Something odd with our Linux: cannot get past:
    CMake Error The C compiler is not able to compile a simple test program.
    /usr/bin/ld: unrecognized option ‘–build-id’
  4. Need 3.5 compute level GPU or later


  1. fails but sets exit status code to 0 (ie success)
  2. nvBWT.cu converts thrust exception thrust::system_error exception: invalid device function
    into the less meaningful caught a std::runtime_error exception:
  3. thrust converts the CUDA error cudaErrorInvalidDeviceFunction into the less meaninful
  4. The nVidia CUDA help text for cudaErrorInvalidDeviceFunction aught to include as a
    possible reason: the code was compiled for a 3.5 device but you are trying to run it on
    a compute level 1.3 (a GTX295).

As all ways any help, comments or suggestions would be most welcome.

                        Thank you


    Dr. W. B. Langdon,
    Department of Computer Science,
    University College London
    Gower Street, London WC1E 6BT, UK

GI 2015 http://geneticimprovement2015.com/
EuroGP 2015 http://www.evostar.org/2015/cfp_eurogp.php
choose your background http://web4.cs.ucl.ac.uk/staff/W.Langdon/colour_telephone/bgcolor.html
A Field Guide to Genetic Programming
GP EM http://www.springer.com/10710
GP Bibliography http://www.cs.bham.ac.uk/~wbl/biblio/

I would recommend filing specific bug reports and/or feature requests through the form linked from the CUDA registered developer website. While some NVIDIA engineer may spot feedback in the forums, chances are that many of the CUDA engineers are busy preparing for and (later on) attending GTC.

I don’t understand this comment: “thrust converts the CUDA error cudaErrorInvalidDeviceFunction into the less meaninful invalid_device_function”. How is the latter less meaningful compared to the former? What information is lost in this conversion?

Thanks njuffa: the bug reporting site is down for maintenance:-(

I think the thrust conversion of the exception name is not helpful because it does
not say the error arose inside CUDA, which gives a hint that its GPU related. In CUDA
speak “device” might imply something to do with the graphics card. However I take
your point that both are pretty non-specific catch-alls and a better exception might be
one that said the compiled code is not compatible with the graphics card.

Have you ever come across the cmake v gcc problem?
It seems quite common but I have yet to find an answer.

nvbio has a mailing list. You might want to post your questions there.


Dear Txbob,
I have applied to join that group.

Thanks for the pointer, txbob, that’s good to know.

In the context of CUDA I would think that “device” never means anything other than “GPU”, so “invalid device function” clearly indicates that the problem is with a kernel running on the GPU. I think the error message is documented to indicate that the driver could not find a matching binary to execute on the given GPU, whether pre-packaged binary or one JIT compiled from PTX. This includes the specific case you mention as one of many possible error scenarios.

I do not use cmake unless forced to. Like MSVS solution files, I find that use of cmake makes the straightforward process of constructing a compiler or linker command line into something cumbersome and error prone. For most projects (including cross-platform development!) creating makefiles is not very difficult and they are easier to debug if something goes wrong. IMHO. Maybe I am just old fashioned.

Dear njuffa,
Yip I totally agree. Unfortunately nvBIO has decided to use cmake:-(

Yip to experts yes. But the error is being reported by software which claims to be able
to run on both CPU and GPU, in any case the error reporting is not suitable to give to

Will continue to hunt for a way round the cmake problem.

Thanks again:-)

Ok the cmake problem is now fixed:-)
It turns out that our system had only a partial installation of binutils
and once that was sorted out, the configuration (cmake and the
compilation (gcc 4.7.2) of nvBIO succeeded.


As suggested by njuffa, I have put in a report (The bug ID is: 1623995)