pachterlab / kallisto

Near-optimal RNA-Seq quantification
https://pachterlab.github.io/kallisto
BSD 2-Clause "Simplified" License
649 stars 171 forks source link

kallisto 0.50.1 fails with "Illegal instruction" when built on machines with AVX-512 #424

Open stianlagstad opened 7 months ago

stianlagstad commented 7 months ago

Similar previous issues:

I thought that the release 0.50.1 should have fixed this, since release notes for 0.50.1 here say:

Fix some compilation issues in Bifrost

and since the issue https://github.com/pachterlab/kallisto/issues/399 is closed, but the issue seems to remain.

Here is what I get when I try to use kallisto (built on an AVX-512 machine) on a non-AVX-512 machine:

root@ef47872a024f:/usr/src/app# cat test.fa
>seq0
FQTWEEFSRAAEKLYLADPMKVRVVLKYRHVDGNLCIKVTDDLVCLVYRTDQAQDVKKIEKF
>seq1
KYRTWEEFTRAAEKLYQADPMKVRVVLKYRHCDGNLCIKVTDDVVCLLYRTDQAQDVKKIEKFHSQLMRLME LKVTDNKECLKFKTDQAQEAKKMEKLNNIFFTLM
>seq2
EEYQTWEEFARAAEKLYLTDPMKVRVVLKYRHCDGNLCMKVTDDAVCLQYKTDQAQDVKKVEKLHGK
>seq3
MYQVWEEFSRAVEKLYLTDPMKVRVVLKYRHCDGNLCIKVTDNSVCLQYKTDQAQDVK
>seq4
EEFSRAVEKLYLTDPMKVRVVLKYRHCDGNLCIKVTDNSVVSYEMRLFGVQKDNFALEHSLL
>seq5
SWEEFAKAAEVLYLEDPMKCRMCTKYRHVDHKLVVKLTDNHTVLKYVTDMAQDVKKIEKLTTLLMR
>seq6
FTNWEEFAKAAERLHSANPEKCRFVTKYNHTKGELVLKLTDDVVCLQYSTNQLQDVKKLEKLSSTLLRSI
>seq7
SWEEFVERSVQLFRGDPNATRYVMKYRHCEGKLVLKVTDDRECLKFKTDQAQDAKKMEKLNNIFF
>seq8
SWDEFVDRSVQLFRADPESTRYVMKYRHCDGKLVLKVTDNKECLKFKTDQAQEAKKMEKLNNIFFTLM
>seq9
KNWEDFEIAAENMYMANPQNCRYTMKYVHSKGHILLKMSDNVKCVQYRAENMPDLKK
>seq10
FDSWDEFVSKSVELFRNHPDTTRYVVKYRHCEGKLVLKVTDNHECLKFKTDQAQDAKKMEK

root@ef47872a024f:/usr/src/app# kallisto index test.fa -i test.fa.idx

Illegal instruction (core dumped)

root@ef47872a024f:/usr/src/app# kallisto version
kallisto, version 0.50.1

If I install kallisto on a machine without AVX-512 however, then I get no problems.

Is it possible to build kallisto and somehow feed the argument -DENABLE_AVX2=OFF to bifrost? Ref https://github.com/pmelsted/bifrost#installation.

stianlagstad commented 7 months ago

I was able to make this work by changing the file CMakeLists.txt and changing this:

ExternalProject_Add(bifrost
    PREFIX ${PROJECT_SOURCE_DIR}/ext/bifrost
    SOURCE_DIR ${PROJECT_SOURCE_DIR}/ext/bifrost
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND mkdir -p build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_CXX_FLAGS=${PROJECT_BIFROST_CMAKE_CXX_FLAGS}
    BUILD_COMMAND cd build && make
    INSTALL_COMMAND ""
)

to this:

ExternalProject_Add(bifrost
    PREFIX ${PROJECT_SOURCE_DIR}/ext/bifrost
    SOURCE_DIR ${PROJECT_SOURCE_DIR}/ext/bifrost
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND mkdir -p build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_CXX_FLAGS=${PROJECT_BIFROST_CMAKE_CXX_FLAGS} -DENABLE_AVX2=OFF
    BUILD_COMMAND cd build && make
    INSTALL_COMMAND ""
)

The change is to add -DENABLE_AVX2=OFF to CONFIGURE_COMMAND, ref https://github.com/pmelsted/bifrost#installation.

Yenaled commented 7 months ago

Thank you so much! I have been looking into these issues related to these instruction sets. I think we should add an option to disable it directly when 'cmaking' kallisto (and perhaps have the disabled version be in the released precompiled binaries). I'll see what @pmelsted says; he and I have been discussing these issues over the past couple of weeks.