Tuesday, June 2, 2020

Re: Building gnuradio and hooking into neonv8

Hi John,

VOLK tries to figure out the correct flags for you. We run CI tests for
aarch64, so these seem to work. Unless you have a good reason to set
compiler flags, I'd recommend to stick with what CMake detects for you.

The line `-- CPU is armv8, Overruled arch neonv7` tells you that armv8
was detected. Thus, we disable neonv7 and enable neonv8 if the compiler
supports it. On another system you'd see the inverse. We had a
discussion if it would be reasonable to enable both archs and select the
correct one during runtime but apparently you either have one arch or
the other, never both.

Cheers
Johannes

On 30.05.20 14:56, John Langworthy wrote:
> Hi Ron,
>
> Just seen your last. I had written this before you sent it, but thought
> worth sharing anyway....
>
> Building volk with that toolchain does fail, see directly below. See
> also further down, cmake output from volk without it (which is successful).
>
> (gr_py36) pi@raspberry:~/volk/build$ cmake -DCMAKE_BUILD_TYPE=Release
> -DPYTHON_EXECUTABLE=~/.conda/envs/gr_py36/python3/bin
> -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchains/arm_cortex_a72_hardfp_native.cmake
> ../
>
> -- The C compiler identification is GNU 7.5.0
>
> -- The CXX compiler identification is GNU 7.5.0
>
> -- Check for working C compiler: /usr/bin/gcc
>
> -- Check for working C compiler: /usr/bin/gcc -- broken
>
> CMake Error at /usr/share/cmake-3.10/Modules/CMakeTestCCompiler.cmake:52
> (message):
>
>   The C compiler
>
>     "/usr/bin/gcc"
>
>   is not able to compile a simple test program.
>
>   It fails with the following output:
>
>     Change Dir: /home/pi/volk/build/CMakeFiles/CMakeTmp
>
>     Run Build Command:"/usr/bin/make" "cmTC_ba179/fast"
>
>     /usr/bin/make -f CMakeFiles/cmTC_ba179.dir/build.make
> CMakeFiles/cmTC_ba179.dir/build
>
>     make[1]: Entering directory '/home/pi/volk/build/CMakeFiles/CMakeTmp'
>
>     Building C object CMakeFiles/cmTC_ba179.dir/testCCompiler.c.o
>
>     /usr/bin/gcc   -march=armv8-a -mtune=cortex-a72 -mfpu=neon-fp-armv8
> -mfloat-abi=hard    -o CMakeFiles/cmTC_ba179.dir/testCCompiler.c.o   -c
> /home/pi/volk/build/CMakeFiles/CMakeTmp/testCCompiler.c
>
>     gcc: error: unrecognized command line option '-mfpu=neon-fp-armv8'
>
>     gcc: error: unrecognized command line option '-mfloat-abi=hard'
>
>     CMakeFiles/cmTC_ba179.dir/build.make:65: recipe for target
> 'CMakeFiles/cmTC_ba179.dir/testCCompiler.c.o' failed
>
>     make[1]: *** [CMakeFiles/cmTC_ba179.dir/testCCompiler.c.o] Error 1
>
>     make[1]: Leaving directory '/home/pi/volk/build/CMakeFiles/CMakeTmp'
>
>     Makefile:126: recipe for target 'cmTC_ba179/fast' failed
>
>     make: *** [cmTC_ba179/fast] Error 2
>
>   CMake will not be able to correctly generate this project.
>
> Call Stack (most recent call first):
>
>   CMakeLists.txt:23 (project)
>
> -- Configuring incomplete, errors occurred!
>
> Without the toolchain, I get:
>
> (gr_py36) pi@raspberry:~/volk/build$ cmake -DCMAKE_BUILD_TYPE=Release
> -DPYTHON_EXECUTABLE=~/.conda/envs/gr_py36/bin/python3.6 ../
>
> -- Build type set to Release.
>
> -- Extracting version information from git describe...
>
> --
>
> -- Python checking for python >= 3.4
>
> -- Python checking for python >= 3.4 - found
>
> --
>
> -- Python checking for mako >= 0.4.2
>
> -- Python checking for mako >= 0.4.2 - found
>
> -- Looking for C++ include filesystem
>
> -- Looking for C++ include filesystem - not found
>
> -- Looking for C++ include experimental/filesystem
>
> -- Looking for C++ include experimental/filesystem - found
>
> -- Performing Test CXX_FILESYSTEM_NO_LINK_NEEDED
>
> -- Performing Test CXX_FILESYSTEM_NO_LINK_NEEDED - Failed
>
> -- Performing Test CXX_FILESYSTEM_STDCPPFS_NEEDED
>
> -- Performing Test CXX_FILESYSTEM_STDCPPFS_NEEDED - Success
>
> -- Looking for aligned_alloc
>
> -- Looking for aligned_alloc - found
>
> -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
>
> -- Checking for module 'orc-0.4 > 0.4.11'
>
> --   No package 'orc-0.4' found
>
> -- orc files (missing: ORC_LIBRARY ORC_INCLUDE_DIR ORCC_EXECUTABLE)
>
> -- Found Doxygen: /usr/bin/doxygen (found version "1.8.13") found
> components:  doxygen missing components:  dot
>
> -- QA Testing is enabled.
>
> --   Modify using: -DENABLE_TESTING=ON/OFF
>
> -- System profiling is disabled.
>
> --   Modify using: -DENABLE_PROFILING=ON/OFF
>
> -- Looking for cpuid.h
>
> -- Looking for cpuid.h - not found
>
> -- Looking for intrin.h
>
> -- Looking for intrin.h - not found
>
> -- Looking for fenv.h
>
> -- Looking for fenv.h - found
>
> -- Looking for dlfcn.h
>
> -- Looking for dlfcn.h - found
>
> -- Compiler name: GNU
>
> -- Performing Test HAVE_WERROR_UNUSED_CMD_LINE_ARG
>
> -- Performing Test HAVE_WERROR_UNUSED_CMD_LINE_ARG - Failed
>
> -- Performing Test have_mfloat_abi_softfp
>
> -- Performing Test have_mfloat_abi_softfp - Failed
>
> -- Performing Test have_mfloat_abi_hard
>
> -- Performing Test have_mfloat_abi_hard - Failed
>
> -- Performing Test have_funsafe_math_optimizations
>
> -- Performing Test have_funsafe_math_optimizations - Success
>
> -- Performing Test have_mfpu_neon
>
> -- Performing Test have_mfpu_neon - Failed
>
> -- Performing Test have_m32
>
> -- Performing Test have_m32 - Failed
>
> -- Performing Test have_m64
>
> -- Performing Test have_m64 - Failed
>
> -- Performing Test have_m3dnow
>
> -- Performing Test have_m3dnow - Failed
>
> -- Performing Test have_msse4_2
>
> -- Performing Test have_msse4_2 - Failed
>
> -- Performing Test have_mpopcnt
>
> -- Performing Test have_mpopcnt - Failed
>
> -- Performing Test have_mmmx
>
> -- Performing Test have_mmmx - Failed
>
> -- Performing Test have_mfma
>
> -- Performing Test have_mfma - Failed
>
> -- Performing Test have_msse
>
> -- Performing Test have_msse - Failed
>
> -- Performing Test have_msse2
>
> -- Performing Test have_msse2 - Failed
>
> -- Performing Test have_msse3
>
> -- Performing Test have_msse3 - Failed
>
> -- Performing Test have_mssse3
>
> -- Performing Test have_mssse3 - Failed
>
> -- Performing Test have_msse4a
>
> -- Performing Test have_msse4a - Failed
>
> -- Performing Test have_msse4_1
>
> -- Performing Test have_msse4_1 - Failed
>
> -- Performing Test have_mavx
>
> -- Performing Test have_mavx - Failed
>
> -- Performing Test have_mavx2
>
> -- Performing Test have_mavx2 - Failed
>
> -- Performing Test have_mavx512f
>
> -- Performing Test have_mavx512f - Failed
>
> -- Performing Test have_mavx512cd
>
> -- Performing Test have_mavx512cd - Failed
>
> -- Architecture is not x86 or x86_64, Overruled arch 3dnow
>
> -- Architecture is not x86 or x86_64, Overruled arch mmx
>
> -- Architecture is not x86 or x86_64, Overruled arch sse
>
> -- Architecture is not x86 or x86_64, Overruled arch sse2
>
> -- Architecture is not x86 or x86_64, Overruled arch sse3
>
> -- Architecture is not x86 or x86_64, Overruled arch ssse3
>
> -- Architecture is not x86 or x86_64, Overruled arch sse4_a
>
> -- Architecture is not x86 or x86_64, Overruled arch sse4_1
>
> -- Architecture is not x86 or x86_64, Overruled arch sse4_2
>
> -- Architecture is not x86 or x86_64, Overruled arch avx
>
> -- Architecture is not x86 or x86_64, Overruled arch avx512f
>
> -- Architecture is not x86 or x86_64, Overruled arch avx512cd
>
> -- Performing Test neon_compile_result
>
> -- Performing Test neon_compile_result - Success
>
> -- Performing Test have_neonv7_result
>
> -- Performing Test have_neonv7_result - Failed
>
> -- Performing Test have_neonv8_result
>
> -- Performing Test have_neonv8_result - Success
>
> -- Compiler doesn't support neonv7, Overruled arch neonv7
>
> -- ORC support not found, Overruled arch orc
>
> -- Available architectures: generic;neon;neonv8;norc
>
> -- Available machines: generic;neon;neonv8
>
> -- BUILD TYPE = RELEASE
>
> -- Base cflags = -O3 -DNDEBUG  -fcx-limited-range -Wall
>
> -- BUILD INFO ::: generic ::: GNU ::: -O3 -DNDEBUG  -fcx-limited-range
> -Wall
>
> -- BUILD INFO ::: neon ::: GNU ::: -O3 -DNDEBUG  -fcx-limited-range
> -Wall -funsafe-math-optimizations
>
> -- BUILD INFO ::: neonv8 ::: GNU ::: -O3 -DNDEBUG  -fcx-limited-range
> -Wall -funsafe-math-optimizations -funsafe-math-optimizations
>
> -- Compiler Version: cc (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0
>
> Copyright (C) 2017 Free Software Foundation, Inc.
>
> This is free software; see the source for copying conditions.  There is NO
>
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
> -- The ASM compiler identification is GNU
>
> -- Found assembler: /usr/bin/cc
>
> -- c flags:  -fcx-limited-range -Wall;
>
> -- asm flags:
>
> -- c flags:  -fcx-limited-range -Wall;
>
> -- asm flags:
>
> -- Did not find liborc and orcc, disabling orc support...
>
> -- Loading version 2.3 into constants...
>
> -- Using install prefix: /usr/local
>
> -- Configuring done
>
> -- Generating done
>
> -- Build files have been written to: /home/pi/volk/build
>
> *From: *Ron Economos <mailto:w6rz@comcast.net>
> *Sent: *30 May 2020 11:48
> *To: *discuss-gnuradio@gnu.org <mailto:discuss-gnuradio@gnu.org>
> *Subject: *Re: Building gnuradio and hooking into neonv8
>
> It's selecting neonv8, but you can do better. Since you're compiling
> from source, you can use a newer version of volk (which detects ARM CPU
> type better).
>
> cd gnuradio/volk
>
> git checkout v2.3.0
>
> Then use this RPi4 specific cmake invocation. Be sure to delete the
> contents of your build directory first.
>
> cmake
> -DCMAKE_TOOLCHAIN_FILE=../volk/cmake/Toolchains/arm_cortex_a72_hardfp_native.cmake
> ../
>
> Give it a try and post your cmake result.
>
> Also, you should install orc. Some kernels can be faster with orc.
>
> sudo apt-get install liborc-0.4-dev
>
> Ron
>
> On 5/30/20 03:06, John Langworthy wrote:
>
> Hi,
>
> I am trying to build gnuradio 3.8.10 on a raspberry pi 4 under 64
> bit ubuntu server. I am unconvinced from the cmake output that it is
> going to plan.
>
> I know I could cross-compile, I'll do that later.
>
> Environment:
>
> gcc (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0
>
> Linux raspberry 5.3.0-1026-raspi2 #28~18.04.1-Ubuntu SMP Thu May 21
> 14:48:58 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
>
> What I don't understand is whether the code (volk) will be built to
> hook into neon properly. The thing that is irking me in cmake's
> output is:
>
> -- CPU is armv8, Overruled arch neonv7
>
> What does this mean?
>
> The full cmake output is listed below.  I'd be very grateful if
> someone can tell me if this is good or bad.
>
> Thank you!
>

No comments:

Post a Comment