[VOLK] volk_profile failures

I compiled GNU Radio 3.7.7.1 natively on an ODROID XU3-Lite with Ubuntu
14.04.2 LTS. I ran volk_profile and got a lot of failures for various
embedded architectures. Any ideas what could be happening? Could it be
something with the compile flags I chose?

volk_16ic_s32f_deinterleave_32f_x2: fail on arch neon
volk_16ic_s32f_deinterleave_32f_x2: fail on arch neon
volk_16ic_s32f_deinterleave_32f_x2: fail on arch u_orc
volk_16ic_s32f_deinterleave_32f_x2: fail on arch u_orc
volk_32fc_s32f_magnitude_16i: fail on arch u_orc
volk_32fc_x2_multiply_32fc: fail on arch a_generic
volk_32fc_x2_multiply_32fc: fail on arch a_generic
volk_32fc_x2_multiply_32fc: fail on arch a_generic
volk_32fc_x2_multiply_32fc: fail on arch neon
volk_32fc_x2_multiply_32fc: fail on arch neon
volk_32fc_x2_multiply_32fc: fail on arch neon
volk_32fc_x2_multiply_32fc: fail on arch neon_opttests
volk_32fc_x2_multiply_32fc: fail on arch neon_opttests
volk_32fc_x2_multiply_32fc: fail on arch neon_opttests
volk_32fc_x2_multiply_32fc: fail on arch neonasm
volk_32fc_x2_multiply_32fc: fail on arch neonasm
volk_32fc_x2_multiply_32fc: fail on arch neonasm
volk_32fc_x2_multiply_32fc: fail on arch u_orc
volk_32fc_x2_multiply_32fc: fail on arch u_orc
volk_32fc_x2_multiply_32fc: fail on arch u_orc
volk_32f_sqrt_32f: fail on arch neon
volk_32f_x3_sum_of_poly_32f: fail on arch a_neon
volk_32f_x3_sum_of_poly_32f: fail on arch neonvert
volk_32fc_s32fc_multiply_32fc: fail on arch neon

The full output of volk_profile is here:
https://gist.github.com/nowls/37c78d89342053bae0ea

Resulting volk_config:

Some relevant configuration info taken from CMakeCache.txt (gcc/g++
version and C/CXX/ASM flags):

CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g+±4.9
CMAKE_CXX_COMPILER_WITH_PATH:FILEPATH=/usr/bin/g+±4.9
CMAKE_CXX_FLAGS:STRING=-mcpu=cortex-a15.cortex-a7
-mtune=cortex-a15.cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
-funsafe-math-optimizations
CMAKE_CXX_FLAGS_DEBUG:STRING=-g
CMAKE_CXX_FLAGS_DEBUGPARANOID:STRING=-Wall -Wextra -g -O0
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_CXX_FLAGS_NOOPTWITHASM:STRING=-Wall -save-temps -g -O0
CMAKE_CXX_FLAGS_O2WITHASM:STRING=-Wall -save-temps -g -O2
CMAKE_CXX_FLAGS_O3WITHASM:STRING=-Wall -save-temps -g -O3
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc-4.9
CMAKE_C_COMPILER_WITH_PATH:FILEPATH=/usr/bin/gcc-4.9
CMAKE_C_FLAGS:STRING=-mcpu=cortex-a15.cortex-a7
-mtune=cortex-a15.cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
-funsafe-math-optimizations
CMAKE_C_FLAGS_DEBUG:STRING=-g
CMAKE_C_FLAGS_DEBUGPARANOID:STRING=-Wall -Wextra -g -O0
CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_C_FLAGS_NOOPTWITHASM:STRING=-Wall -save-temps -g -O0
CMAKE_C_FLAGS_O2WITHASM:STRING=-Wall -save-temps -g -O2
CMAKE_C_FLAGS_O3WITHASM:STRING=-Wall -save-temps -g -O3
CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_ASM_FLAGS:STRING=-mcpu=cortex-a15.cortex-a7
-mtune=cortex-a15.cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
-funsafe-math-optimizations
CMAKE_ASM_FLAGS_DEBUG:STRING=-g
CMAKE_ASM_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_ASM_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG

Sean Nowlan

Hi Sean,

I didn’t read all of the debug info, but your symptoms are a result of
ORC doing bad things.

You can either uninstall ORC or upgrade to the latest release (0.4.23).
The
commit you really need is this one:
http://cgit.freedesktop.org/gstreamer/orc/commit/?id=acdaac31c648fd10f1bd0a49c4c33b483bb9c35c

If you choose to upgrade ORC let me know how it goes.

Cheers,
Nathan

​Ok, I will install ORC 0.4.23 from source. Is ORC involved with all the
other architectures that had failures?

Sean


From: West, Nathan [email protected]
Sent: Friday, June 5, 2015 6:48 PM
To: Nowlan, Sean
Cc: [email protected]
Subject: Re: [Discuss-gnuradio] [VOLK] volk_profile failures

Hi Sean,

I didn’t read all of the debug info, but your symptoms are a result of
ORC doing bad things.

You can either uninstall ORC or upgrade to the latest release (0.4.23).
The commit you really need is this one:
http://cgit.freedesktop.org/gstreamer/orc/commit/?id=acdaac31c648fd10f1bd0a49c4c33b483bb9c35c

If you choose to upgrade ORC let me know how it goes.

Cheers,
Nathan

On Friday, June 5, 2015, Nowlan, Sean
<[email protected]mailto:[email protected]> wrote:

I compiled GNU Radio 3.7.7.1 natively on an ODROID XU3-Lite with Ubuntu
14.04.2 LTS. I ran volk_profile and got a lot of failures for various
embedded architectures. Any ideas what could be happening? Could it be
something with the compile flags I chose?

volk_16ic_s32f_deinterleave_32f_x2: fail on arch neon
volk_16ic_s32f_deinterleave_32f_x2: fail on arch neon
volk_16ic_s32f_deinterleave_32f_x2: fail on arch u_orc
volk_16ic_s32f_deinterleave_32f_x2: fail on arch u_orc
volk_32fc_s32f_magnitude_16i: fail on arch u_orc
volk_32fc_x2_multiply_32fc: fail on arch a_generic
volk_32fc_x2_multiply_32fc: fail on arch a_generic
volk_32fc_x2_multiply_32fc: fail on arch a_generic
volk_32fc_x2_multiply_32fc: fail on arch neon
volk_32fc_x2_multiply_32fc: fail on arch neon
volk_32fc_x2_multiply_32fc: fail on arch neon
volk_32fc_x2_multiply_32fc: fail on arch neon_opttests
volk_32fc_x2_multiply_32fc: fail on arch neon_opttests
volk_32fc_x2_multiply_32fc: fail on arch neon_opttests
volk_32fc_x2_multiply_32fc: fail on arch neonasm
volk_32fc_x2_multiply_32fc: fail on arch neonasm
volk_32fc_x2_multiply_32fc: fail on arch neonasm
volk_32fc_x2_multiply_32fc: fail on arch u_orc
volk_32fc_x2_multiply_32fc: fail on arch u_orc
volk_32fc_x2_multiply_32fc: fail on arch u_orc
volk_32f_sqrt_32f: fail on arch neon
volk_32f_x3_sum_of_poly_32f: fail on arch a_neon
volk_32f_x3_sum_of_poly_32f: fail on arch neonvert
volk_32fc_s32fc_multiply_32fc: fail on arch neon

The full output of volk_profile is here:
https://gist.github.com/nowls/37c78d89342053bae0ea

Resulting volk_config:

Some relevant configuration info taken from CMakeCache.txt (gcc/g++
version and C/CXX/ASM flags):

CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g+±4.9
CMAKE_CXX_COMPILER_WITH_PATH:FILEPATH=/usr/bin/g+±4.9
CMAKE_CXX_FLAGS:STRING=-mcpu=cortex-a15.cortex-a7
-mtune=cortex-a15.cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
-funsafe-math-optimizations
CMAKE_CXX_FLAGS_DEBUG:STRING=-g
CMAKE_CXX_FLAGS_DEBUGPARANOID:STRING=-Wall -Wextra -g -O0
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_CXX_FLAGS_NOOPTWITHASM:STRING=-Wall -save-temps -g -O0
CMAKE_CXX_FLAGS_O2WITHASM:STRING=-Wall -save-temps -g -O2
CMAKE_CXX_FLAGS_O3WITHASM:STRING=-Wall -save-temps -g -O3
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc-4.9
CMAKE_C_COMPILER_WITH_PATH:FILEPATH=/usr/bin/gcc-4.9
CMAKE_C_FLAGS:STRING=-mcpu=cortex-a15.cortex-a7
-mtune=cortex-a15.cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
-funsafe-math-optimizations
CMAKE_C_FLAGS_DEBUG:STRING=-g
CMAKE_C_FLAGS_DEBUGPARANOID:STRING=-Wall -Wextra -g -O0
CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_C_FLAGS_NOOPTWITHASM:STRING=-Wall -save-temps -g -O0
CMAKE_C_FLAGS_O2WITHASM:STRING=-Wall -save-temps -g -O2
CMAKE_C_FLAGS_O3WITHASM:STRING=-Wall -save-temps -g -O3
CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_ASM_FLAGS:STRING=-mcpu=cortex-a15.cortex-a7
-mtune=cortex-a15.cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
-funsafe-math-optimizations
CMAKE_ASM_FLAGS_DEBUG:STRING=-g
CMAKE_ASM_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_ASM_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG

Sean Nowlan

Most likely.

What we’ve seen before is that ORC didn’t preserve registers according
to
ARM specifications. This basically results in unpredictable data
corruption. The commit I pointed to is the fix (vpush certain registers
if
used, then vpop after the routine).

The visible corruption is seen by corrupting the test tolerance. If you
look at ctest -V you should see that the "error"s are actually the same
result, but since tolerance gets corrupted the test erroneously is
false.
The only QA failures should be on kernels that have an ORC protokernel,
but
this bug can affect non-ORC protokernels for that kernel.

Nathan

On Sat, Jun 6, 2015 at 12:47 PM, Nowlan, Sean
[email protected]

On Sat, Jun 6, 2015 at 4:51 PM, Nowlan, Sean
[email protected]
wrote:

CPPFLAGS=“-mcpu=cortex-a15.cortex-a7 -mtune=cortex-a15.cortex-a7
-mfpu=neon-vfpv4 -mfloat-abi=hard -funsafe-math-optimizations”

UHD built fine w/ ORC 0.4.23.

Sean

Just disable ORC Altogether in VOLK. Most of the kernels have
replacement
NEON proto-kernels now, anyways. Pass -DENABLE_ORC=False to cmake.

Tom

That makes sense. I installed ORC 0.4.23 and tried to recompile GR, but
the build is failing on Volk. GCC segfaults a couple times before
failing with an error on volk_16ic_magnitude_16i_a_orc_impl. Full output
here:

ORC 0.4.23 was built with:

CFLAGS=“-mcpu=cortex-a15.cortex-a7 -mtune=cortex-a15.cortex-a7
-mfpu=neon-vfpv4 -mfloat-abi=hard -funsafe-math-optimizations”

CPPFLAGS=“-mcpu=cortex-a15.cortex-a7 -mtune=cortex-a15.cortex-a7
-mfpu=neon-vfpv4 -mfloat-abi=hard -funsafe-math-optimizations”

UHD built fine w/ ORC 0.4.23.

Sean


From: West, Nathan [email protected]
Sent: Saturday, June 6, 2015 12:57 PM
To: Nowlan, Sean
Cc: [email protected]
Subject: Re: [Discuss-gnuradio] [VOLK] volk_profile failures

Most likely.

What we’ve seen before is that ORC didn’t preserve registers according
to ARM specifications. This basically results in unpredictable data
corruption. The commit I pointed to is the fix (vpush certain registers
if used, then vpop after the routine).

The visible corruption is seen by corrupting the test tolerance. If you
look at ctest -V you should see that the "error"s are actually the same
result, but since tolerance gets corrupted the test erroneously is
false. The only QA failures should be on kernels that have an ORC
protokernel, but this bug can affect non-ORC protokernels for that
kernel.

Nathan

On Sat, Jun 6, 2015 at 12:47 PM, Nowlan, Sean
<[email protected]mailto:[email protected]> wrote:

​Ok, I will install ORC 0.4.23 from source. Is ORC involved with all the
other architectures that had failures?

Sean


From: West, Nathan
<[email protected]mailto:[email protected]>
Sent: Friday, June 5, 2015 6:48 PM
To: Nowlan, Sean
Cc: [email protected]mailto:[email protected]
Subject: Re: [Discuss-gnuradio] [VOLK] volk_profile failures

Hi Sean,

I didn’t read all of the debug info, but your symptoms are a result of
ORC doing bad things.

You can either uninstall ORC or upgrade to the latest release (0.4.23).
The commit you really need is this one:
http://cgit.freedesktop.org/gstreamer/orc/commit/?id=acdaac31c648fd10f1bd0a49c4c33b483bb9c35c

If you choose to upgrade ORC let me know how it goes.

Cheers,
Nathan

On Friday, June 5, 2015, Nowlan, Sean
<[email protected]mailto:[email protected]> wrote:

I compiled GNU Radio 3.7.7.1 natively on an ODROID XU3-Lite with Ubuntu
14.04.2 LTS. I ran volk_profile and got a lot of failures for various
embedded architectures. Any ideas what could be happening? Could it be
something with the compile flags I chose?

volk_16ic_s32f_deinterleave_32f_x2: fail on arch neon
volk_16ic_s32f_deinterleave_32f_x2: fail on arch neon
volk_16ic_s32f_deinterleave_32f_x2: fail on arch u_orc
volk_16ic_s32f_deinterleave_32f_x2: fail on arch u_orc
volk_32fc_s32f_magnitude_16i: fail on arch u_orc
volk_32fc_x2_multiply_32fc: fail on arch a_generic
volk_32fc_x2_multiply_32fc: fail on arch a_generic
volk_32fc_x2_multiply_32fc: fail on arch a_generic
volk_32fc_x2_multiply_32fc: fail on arch neon
volk_32fc_x2_multiply_32fc: fail on arch neon
volk_32fc_x2_multiply_32fc: fail on arch neon
volk_32fc_x2_multiply_32fc: fail on arch neon_opttests
volk_32fc_x2_multiply_32fc: fail on arch neon_opttests
volk_32fc_x2_multiply_32fc: fail on arch neon_opttests
volk_32fc_x2_multiply_32fc: fail on arch neonasm
volk_32fc_x2_multiply_32fc: fail on arch neonasm
volk_32fc_x2_multiply_32fc: fail on arch neonasm
volk_32fc_x2_multiply_32fc: fail on arch u_orc
volk_32fc_x2_multiply_32fc: fail on arch u_orc
volk_32fc_x2_multiply_32fc: fail on arch u_orc
volk_32f_sqrt_32f: fail on arch neon
volk_32f_x3_sum_of_poly_32f: fail on arch a_neon
volk_32f_x3_sum_of_poly_32f: fail on arch neonvert
volk_32fc_s32fc_multiply_32fc: fail on arch neon

The full output of volk_profile is here:
https://gist.github.com/nowls/37c78d89342053bae0ea

Resulting volk_config:

Some relevant configuration info taken from CMakeCache.txt (gcc/g++
version and C/CXX/ASM flags):

CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g+±4.9
CMAKE_CXX_COMPILER_WITH_PATH:FILEPATH=/usr/bin/g+±4.9
CMAKE_CXX_FLAGS:STRING=-mcpu=cortex-a15.cortex-a7
-mtune=cortex-a15.cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
-funsafe-math-optimizations
CMAKE_CXX_FLAGS_DEBUG:STRING=-g
CMAKE_CXX_FLAGS_DEBUGPARANOID:STRING=-Wall -Wextra -g -O0
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_CXX_FLAGS_NOOPTWITHASM:STRING=-Wall -save-temps -g -O0
CMAKE_CXX_FLAGS_O2WITHASM:STRING=-Wall -save-temps -g -O2
CMAKE_CXX_FLAGS_O3WITHASM:STRING=-Wall -save-temps -g -O3
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc-4.9
CMAKE_C_COMPILER_WITH_PATH:FILEPATH=/usr/bin/gcc-4.9
CMAKE_C_FLAGS:STRING=-mcpu=cortex-a15.cortex-a7
-mtune=cortex-a15.cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
-funsafe-math-optimizations
CMAKE_C_FLAGS_DEBUG:STRING=-g
CMAKE_C_FLAGS_DEBUGPARANOID:STRING=-Wall -Wextra -g -O0
CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_C_FLAGS_NOOPTWITHASM:STRING=-Wall -save-temps -g -O0
CMAKE_C_FLAGS_O2WITHASM:STRING=-Wall -save-temps -g -O2
CMAKE_C_FLAGS_O3WITHASM:STRING=-Wall -save-temps -g -O3
CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_ASM_FLAGS:STRING=-mcpu=cortex-a15.cortex-a7
-mtune=cortex-a15.cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
-funsafe-math-optimizations
CMAKE_ASM_FLAGS_DEBUG:STRING=-g
CMAKE_ASM_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_ASM_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG

Sean Nowlan