Mac M1芯片同态加密库的安装(TFHE问题)
前些日子买了Mac电脑,尝试在mac上安装之前在Ubuntu上的同态加密库,经试验HElib、SEAL、Palisade等可以完美安装。
但是TFHE的安装按照原来的步骤出现了很多问题!
clang: error: the clang compiler does not support ‘-march=native’
解决办法:
将-march=native改为-mcpu=apple-m1
但是出现了类似于下面的错误
/tfhe/src/libtfhe/fft_processors/nayuki/fft-x8664-avx.s:108:10: error: invalid operand
vmovupd %ymm0, (%rdi,%rcx,8)
/tfhe/src/libtfhe/fft_processors/nayuki/fft-x8664-avx.s:108:10: error: invalid operand
vmovupd %ymm0, (%rdi,%rcx,8)
/tfhe/src/libtfhe/fft_processors/nayuki/fft-x8664-avx.s:110:11: error: unknown token in expression
addq $4, %rcx
..........................
/Users/wbq/Desktop/\345\220\214\346\200\201\345\212\240\345\257\206\345\272\223/tfhe/src/libtfhe/fft_processors/nayuki/fft-x8664-avx.s:189:7: error: invalid operand
popq %r10
^
/Users/wbq/Desktop/\345\220\214\346\200\201\345\212\240\345\257\206\345\272\223/tfhe/src/libtfhe/fft_processors/nayuki/fft-x8664-avx.s:190:2: error: unrecognized instruction mnemonic, did you mean: eret, ret?
retq
^
make[2]: *** [libtfhe/fft_processors/nayuki/CMakeFiles/tfhe-fft-nayuki-avx.dir/fft-x8664-avx.s.o] Error 1
make[1]: *** [libtfhe/fft_processors/nayuki/CMakeFiles/tfhe-fft-nayuki-avx.dir/all] Error 2
make: *** [all] Error 2
经过一波调研…
Mac M1与AVX
- Rosetta translates all x86_64 instructions, but it doesn’t
support the execution of some newer instruction sets and
processor features, such as AVX, AVX2, and AVX512 vector
instructions.
Intel芯片的Mac是完全没有问题的,应该是M1芯片与FFT加速用到的Intel指令集不匹配
安装FFTW
重新配置吧
cmake ../src -DENABLE_TESTS=on -DENABLE_FFTW=on -DENABLE_NAYUKI_AVX=OFF -DENABLE_NAYUKI_PORTABLE=OFF -DENABLE_SPQLIOS_AVX=OFF -DENABLE_SPQLIOS_FMA=OFF
[ 1%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/autogenerated.cpp.o
[ 3%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/lwebootstrappingkey.cpp.o
[ 4%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/lwe.cpp.o
[ 6%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/lwe-functions.cpp.o
[ 7%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/lwekey.cpp.o
[ 9%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/lwekeyswitch.cpp.o
[ 10%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/lweparams.cpp.o
[ 12%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/lwesamples.cpp.o
[ 13%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/multiplication.cpp.o
[ 15%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/numeric-functions.cpp.o
[ 16%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/polynomials.cpp.o
[ 18%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/tgsw.cpp.o
[ 19%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/tlwe.cpp.o
[ 21%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/tlwe-functions.cpp.o
[ 22%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/tgsw-functions.cpp.o
[ 24%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/tlwe-fft-operations.cpp.o
[ 25%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/tgsw-fft-operations.cpp.o
[ 27%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/toruspolynomial-functions.cpp.o
[ 28%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/boot-gates.cpp.o
[ 30%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/lwe-keyswitch-functions.cpp.o
[ 31%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/lwe-bootstrapping-functions.cpp.o
[ 33%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/lwe-bootstrapping-functions-fft.cpp.o
[ 34%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/tfhe_io.cpp.o
[ 36%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/tfhe_generic_streams.cpp.o
[ 37%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/tfhe_garbage_collector.cpp.o
[ 39%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/tfhe_gate_bootstrapping.cpp.o
[ 40%] Building CXX object libtfhe/CMakeFiles/tfhe-core.dir/tfhe_gate_bootstrapping_structures.cpp.o
[ 40%] Built target tfhe-core
[ 42%] Building CXX object libtfhe/fft_processors/fftw/CMakeFiles/tfhe-fft-fftw.dir/fft_processor_fftw.cpp.o
[ 43%] Building CXX object libtfhe/fft_processors/fftw/CMakeFiles/tfhe-fft-fftw.dir/lagrangehalfc_impl.cpp.o
[ 43%] Built target tfhe-fft-fftw
[ 45%] Linking CXX shared library libtfhe-fftw.dylib
[ 45%] Built target tfhe-fftw
[ 46%] Building CXX object test/googletest/googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
[ 48%] Linking CXX static library libgtest.a
[ 48%] Built target gtest
[ 50%] Building CXX object test/googletest/googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o
[ 51%] Linking CXX static library libgtest_main.a
[ 51%] Built target gtest_main
[ 53%] Building CXX object test/CMakeFiles/unittests-fftw.dir/arithmetic_test.cpp.o
[ 54%] Building CXX object test/CMakeFiles/unittests-fftw.dir/lwe_test.cpp.o
[ 56%] Building CXX object test/CMakeFiles/unittests-fftw.dir/polynomial_test.cpp.o
[ 57%] Building CXX object test/CMakeFiles/unittests-fftw.dir/tlwe_test.cpp.o
[ 59%] Building CXX object test/CMakeFiles/unittests-fftw.dir/tgsw_test.cpp.o
[ 60%] Building CXX object test/CMakeFiles/unittests-fftw.dir/tlwe_fft_test.cpp.o
[ 62%] Building CXX object test/CMakeFiles/unittests-fftw.dir/tgsw_fft_test.cpp.o
[ 63%] Building CXX object test/CMakeFiles/unittests-fftw.dir/lwekeyswitch_test.cpp.o
[ 65%] Building CXX object test/CMakeFiles/unittests-fftw.dir/bootstrapping_test.cpp.o
[ 66%] Building CXX object test/CMakeFiles/unittests-fftw.dir/bootstrapping_test_fft.cpp.o
[ 68%] Building CXX object test/CMakeFiles/unittests-fftw.dir/io_test.cpp.o
[ 69%] Building CXX object test/CMakeFiles/unittests-fftw.dir/lagrangehalfc_test.cpp.o
[ 71%] Building CXX object test/CMakeFiles/unittests-fftw.dir/boots_gates_test.cpp.o
[ 72%] Linking CXX executable unittests-fftw
[ 72%] Built target unittests-fftw
[ 74%] Building CXX object test/CMakeFiles/test-bootstrapping-fft-fftw.dir/test-bootstrapping-fft.cpp.o
[ 75%] Linking CXX executable test-bootstrapping-fft-fftw
[ 75%] Built target test-bootstrapping-fft-fftw
[ 77%] Building CXX object test/CMakeFiles/test-decomp-tgsw-fftw.dir/test-decomp-tgsw.cpp.o
[ 78%] Linking CXX executable test-decomp-tgsw-fftw
[ 78%] Built target test-decomp-tgsw-fftw
[ 80%] Building CXX object test/CMakeFiles/test-lwe-fftw.dir/test-lwe.cpp.o
[ 81%] Linking CXX executable test-lwe-fftw
[ 81%] Built target test-lwe-fftw
[ 83%] Building CXX object test/CMakeFiles/test-multiplication-fftw.dir/test-multiplication.cpp.o
[ 84%] Linking CXX executable test-multiplication-fftw
[ 84%] Built target test-multiplication-fftw
[ 86%] Building CXX object test/CMakeFiles/test-tlwe-fftw.dir/test-tlwe.cpp.o
[ 87%] Linking CXX executable test-tlwe-fftw
[ 87%] Built target test-tlwe-fftw
[ 89%] Building CXX object test/CMakeFiles/test-gate-bootstrapping-fftw.dir/test-gate-bootstrapping.cpp.o
[ 90%] Linking CXX executable test-gate-bootstrapping-fftw
[ 90%] Built target test-gate-bootstrapping-fftw
[ 92%] Building CXX object test/CMakeFiles/test-addition-boot-fftw.dir/test-addition-boot.cpp.o
[ 93%] Linking CXX executable test-addition-boot-fftw
[ 93%] Built target test-addition-boot-fftw
[ 95%] Building CXX object test/CMakeFiles/test-long-run-fftw.dir/test-long-run.cpp.o
[ 96%] Linking CXX executable test-long-run-fftw
[ 96%] Built target test-long-run-fftw
[ 98%] Building C object test/CMakeFiles/test-c-binding-fftw.dir/test-c-binding.c.o
[100%] Linking C executable test-c-binding-fftw
[100%] Built target test-c-binding-fftw
反正利用FFTW可以了
build/ test % ls
CMakeFiles test-decomp-tgsw-fftw
CTestTestfile.cmake test-gate-bootstrapping-fftw
Makefile test-long-run-fftw
cmake_install.cmake test-lwe-fftw
googletest test-multiplication-fftw
test-addition-boot-fftw test-tlwe-fftw
test-bootstrapping-fft-fftw unittests-fftw
test-c-binding-fftw