Maratyszcza / NNPACK

Acceleration package for neural networks on multi-core CPUs
BSD 2-Clause "Simplified" License
1.67k stars 317 forks source link

Still build problem for ARMv7a #94

Closed zebrajack closed 7 years ago

zebrajack commented 7 years ago

Hi,

Though you have close the issue in #87 , but I still have the problem as the following, have no idea how to figure it out.

root@percipio:~/NNPACK# ninja [1/128] CC src/neon/2d-winograd-8x8-3x3-fp16.c FAILED: /root/NNPACK/build/src/neon/2d-winograd-8x8-3x3-fp16.c.o gcc -o /root/NNPACK/build/src/neon/2d-winograd-8x8-3x3-fp16.c.o -c /root/NNPACK/src/neon/2d-winograd-8x8-3x3-fp16.c -MMD -MF /root/NNPACK/build/src/neon/2d-winograd-8x8-3x3-fp16.c.o.d -O2 -march=armv7-a -mfpu=neon-fp16 -std=gnu99 -g -pthread -I/root/NNPACK/include -I/root/NNPACK/src -I/root/NNPACK/src/ref -I/root/NNPACK/deps/pthreadpool/include -I/root/NNPACK/deps/fxdiv/include -I/root/NNPACK/deps/fp16/include -I/root/NNPACK/deps/psimd/include In file included from /root/NNPACK/src/neon/2d-winograd-8x8-3x3-fp16.c:4:0: /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16': /root/NNPACK/include/nnpack/arm_neon.h:45:10: warning: implicit declaration of function 'vcvt_f32_f16' [-Wimplicit-function-declaration] return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: note: each undeclared identifier is reported only once for each function it appears in /root/NNPACK/include/nnpack/arm_neon.h:45:37: error: expected ')' before 'vld1_u16' return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16_aligned': /root/NNPACK/include/nnpack/arm_neon.h:49:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) ^ /root/NNPACK/include/nnpack/arm_neon.h:50:4: error: expected ')' before 'vld1_u16' vld1_u16((const uint16_t) builtin_assume_aligned(address, sizeof(float16x4_t)))); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32': /root/NNPACK/include/nnpack/arm_neon.h:54:46: warning: implicit declaration of function 'vcvt_f16_f32' [-Wimplicit-function-declaration] vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h:54:3: error: can't convert between vector values of different size vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32_aligned': /root/NNPACK/include/nnpack/arm_neon.h:59:4: error: can't convert between vector values of different size (uint16x4_t) vcvt_f16_f32(vector)); ^ [2/128] CC src/psimd/2d-winograd-8x8-3x3.c FAILED: /root/NNPACK/build/src/psimd/2d-winograd-8x8-3x3.c.o gcc -o /root/NNPACK/build/src/psimd/2d-winograd-8x8-3x3.c.o -c /root/NNPACK/src/psimd/2d-winograd-8x8-3x3.c -MMD -MF /root/NNPACK/build/src/psimd/2d-winograd-8x8-3x3.c.o.d -O2 -march=armv7-a -mfpu=neon-fp16 -std=gnu99 -g -pthread -I/root/NNPACK/include -I/root/NNPACK/src -I/root/NNPACK/src/ref -I/root/NNPACK/deps/pthreadpool/include -I/root/NNPACK/deps/fxdiv/include -I/root/NNPACK/deps/fp16/include -I/root/NNPACK/deps/psimd/include In file included from /root/NNPACK/include/nnpack/activations.h:25:0, from /root/NNPACK/src/psimd/2d-winograd-8x8-3x3.c:6: /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16': /root/NNPACK/include/nnpack/arm_neon.h:45:10: warning: implicit declaration of function 'vcvt_f32_f16' [-Wimplicit-function-declaration] return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: note: each undeclared identifier is reported only once for each function it appears in /root/NNPACK/include/nnpack/arm_neon.h:45:37: error: expected ')' before 'vld1_u16' return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16_aligned': /root/NNPACK/include/nnpack/arm_neon.h:49:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) ^ /root/NNPACK/include/nnpack/arm_neon.h:50:4: error: expected ')' before 'vld1_u16' vld1_u16((const uint16_t) __builtin_assume_aligned(address, sizeof(float16x4_t)))); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32': /root/NNPACK/include/nnpack/arm_neon.h:54:46: warning: implicit declaration of function 'vcvt_f16_f32' [-Wimplicit-function-declaration] vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h:54:3: error: can't convert between vector values of different size vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32_aligned': /root/NNPACK/include/nnpack/arm_neon.h:59:4: error: can't convert between vector values of different size (uint16x4_t) vcvt_f16_f32(vector)); ^ [3/128] CC src/neon/relu.c FAILED: /root/NNPACK/build/src/neon/relu.c.o gcc -o /root/NNPACK/build/src/neon/relu.c.o -c /root/NNPACK/src/neon/relu.c -MMD -MF /root/NNPACK/build/src/neon/relu.c.o.d -O2 -march=armv7-a -mfpu=neon-fp16 -std=gnu99 -g -pthread -I/root/NNPACK/include -I/root/NNPACK/src -I/root/NNPACK/src/ref -I/root/NNPACK/deps/pthreadpool/include -I/root/NNPACK/deps/fxdiv/include -I/root/NNPACK/deps/fp16/include -I/root/NNPACK/deps/psimd/include In file included from /root/NNPACK/src/neon/relu.c:3:0: /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16': /root/NNPACK/include/nnpack/arm_neon.h:45:10: warning: implicit declaration of function 'vcvt_f32_f16' [-Wimplicit-function-declaration] return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: note: each undeclared identifier is reported only once for each function it appears in /root/NNPACK/include/nnpack/arm_neon.h:45:37: error: expected ')' before 'vld1_u16' return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16_aligned': /root/NNPACK/include/nnpack/arm_neon.h:49:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) ^ /root/NNPACK/include/nnpack/arm_neon.h:50:4: error: expected ')' before 'vld1_u16' vld1_u16((const uint16_t) builtin_assume_aligned(address, sizeof(float16x4_t)))); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32': /root/NNPACK/include/nnpack/arm_neon.h:54:46: warning: implicit declaration of function 'vcvt_f16_f32' [-Wimplicit-function-declaration] vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h:54:3: error: can't convert between vector values of different size vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32_aligned': /root/NNPACK/include/nnpack/arm_neon.h:59:4: error: can't convert between vector values of different size (uint16x4_t) vcvt_f16_f32(vector)); ^ [4/128] CC src/neon/2d-winograd-8x8-3x3.c FAILED: /root/NNPACK/build/src/neon/2d-winograd-8x8-3x3.c.o gcc -o /root/NNPACK/build/src/neon/2d-winograd-8x8-3x3.c.o -c /root/NNPACK/src/neon/2d-winograd-8x8-3x3.c -MMD -MF /root/NNPACK/build/src/neon/2d-winograd-8x8-3x3.c.o.d -O2 -march=armv7-a -mfpu=neon-fp16 -std=gnu99 -g -pthread -I/root/NNPACK/include -I/root/NNPACK/src -I/root/NNPACK/src/ref -I/root/NNPACK/deps/pthreadpool/include -I/root/NNPACK/deps/fxdiv/include -I/root/NNPACK/deps/fp16/include -I/root/NNPACK/deps/psimd/include In file included from /root/NNPACK/src/neon/2d-winograd-8x8-3x3.c:4:0: /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16': /root/NNPACK/include/nnpack/arm_neon.h:45:10: warning: implicit declaration of function 'vcvt_f32_f16' [-Wimplicit-function-declaration] return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: note: each undeclared identifier is reported only once for each function it appears in /root/NNPACK/include/nnpack/arm_neon.h:45:37: error: expected ')' before 'vld1_u16' return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16_aligned': /root/NNPACK/include/nnpack/arm_neon.h:49:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) ^ /root/NNPACK/include/nnpack/arm_neon.h:50:4: error: expected ')' before 'vld1_u16' vld1_u16((const uint16_t) builtin_assume_aligned(address, sizeof(float16x4_t)))); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32': /root/NNPACK/include/nnpack/arm_neon.h:54:46: warning: implicit declaration of function 'vcvt_f16_f32' [-Wimplicit-function-declaration] vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h:54:3: error: can't convert between vector values of different size vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32_aligned': /root/NNPACK/include/nnpack/arm_neon.h:59:4: error: can't convert between vector values of different size (uint16x4_t) vcvt_f16_f32(vector)); ^ [5/128] CC src/psimd/2d-fourier-8x8.c FAILED: /root/NNPACK/build/src/psimd/2d-fourier-8x8.c.o gcc -o /root/NNPACK/build/src/psimd/2d-fourier-8x8.c.o -c /root/NNPACK/src/psimd/2d-fourier-8x8.c -MMD -MF /root/NNPACK/build/src/psimd/2d-fourier-8x8.c.o.d -O2 -march=armv7-a -mfpu=neon-fp16 -std=gnu99 -g -pthread -I/root/NNPACK/include -I/root/NNPACK/src -I/root/NNPACK/src/ref -I/root/NNPACK/deps/pthreadpool/include -I/root/NNPACK/deps/fxdiv/include -I/root/NNPACK/deps/fp16/include -I/root/NNPACK/deps/psimd/include In file included from /root/NNPACK/include/nnpack/activations.h:25:0, from /root/NNPACK/src/psimd/2d-fourier-8x8.c:6: /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16': /root/NNPACK/include/nnpack/arm_neon.h:45:10: warning: implicit declaration of function 'vcvt_f32_f16' [-Wimplicit-function-declaration] return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: note: each undeclared identifier is reported only once for each function it appears in /root/NNPACK/include/nnpack/arm_neon.h:45:37: error: expected ')' before 'vld1_u16' return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16_aligned': /root/NNPACK/include/nnpack/arm_neon.h:49:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) ^ /root/NNPACK/include/nnpack/arm_neon.h:50:4: error: expected ')' before 'vld1_u16' vld1_u16((const uint16_t) __builtin_assume_aligned(address, sizeof(float16x4_t)))); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32': /root/NNPACK/include/nnpack/arm_neon.h:54:46: warning: implicit declaration of function 'vcvt_f16_f32' [-Wimplicit-function-declaration] vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h:54:3: error: can't convert between vector values of different size vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32_aligned': /root/NNPACK/include/nnpack/arm_neon.h:59:4: error: can't convert between vector values of different size (uint16x4_t) vcvt_f16_f32(vector)); ^ [6/128] CC src/psimd/2d-fourier-16x16.c FAILED: /root/NNPACK/build/src/psimd/2d-fourier-16x16.c.o gcc -o /root/NNPACK/build/src/psimd/2d-fourier-16x16.c.o -c /root/NNPACK/src/psimd/2d-fourier-16x16.c -MMD -MF /root/NNPACK/build/src/psimd/2d-fourier-16x16.c.o.d -O2 -march=armv7-a -mfpu=neon-fp16 -std=gnu99 -g -pthread -I/root/NNPACK/include -I/root/NNPACK/src -I/root/NNPACK/src/ref -I/root/NNPACK/deps/pthreadpool/include -I/root/NNPACK/deps/fxdiv/include -I/root/NNPACK/deps/fp16/include -I/root/NNPACK/deps/psimd/include In file included from /root/NNPACK/include/nnpack/activations.h:25:0, from /root/NNPACK/src/psimd/2d-fourier-16x16.c:6: /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16': /root/NNPACK/include/nnpack/arm_neon.h:45:10: warning: implicit declaration of function 'vcvt_f32_f16' [-Wimplicit-function-declaration] return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h:45:24: note: each undeclared identifier is reported only once for each function it appears in /root/NNPACK/include/nnpack/arm_neon.h:45:37: error: expected ')' before 'vld1_u16' return vcvt_f32_f16((float16x4_t) vld1_u16((const uint16_t) address)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vld1q_f32_f16_aligned': /root/NNPACK/include/nnpack/arm_neon.h:49:24: error: 'float16x4_t' undeclared (first use in this function) return vcvt_f32_f16((float16x4_t) ^ /root/NNPACK/include/nnpack/arm_neon.h:50:4: error: expected ')' before 'vld1_u16' vld1_u16((const uint16_t) builtin_assume_aligned(address, sizeof(float16x4_t)))); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32': /root/NNPACK/include/nnpack/arm_neon.h:54:46: warning: implicit declaration of function 'vcvt_f16_f32' [-Wimplicit-function-declaration] vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h:54:3: error: can't convert between vector values of different size vst1_u16((uint16_t) address, (uint16x4_t) vcvt_f16_f32(vector)); ^ /root/NNPACK/include/nnpack/arm_neon.h: In function 'vst1q_f16_f32_aligned': /root/NNPACK/include/nnpack/arm_neon.h:59:4: error: can't convert between vector values of different size (uint16x4_t) vcvt_f16_f32(vector)); ^ ninja: build stopped: subcommand failed.

Maratyszcza commented 7 years ago

It looks like you don't have vcvt_f32_f16 defined in arm_neon.h (arm_neon.h is a system header). Probably you have a very old compiler.

zebrajack commented 7 years ago

OK. I have upgrade the compiler from4.8 to 7.1. but still same problem occurs. I assuem the system header locate in /usr/lib/gcc/arm-linux-gnueabihf/7/include(my path) . I manually add definition as "typedef float vcvt_f32_f16" . but it doesn't work.

the file has as the following: arm_neon.zip

Maratyszcza commented 7 years ago

Try to add -mfp16-format=ieee to cflags inside build.ninja

zebrajack commented 7 years ago

I have add it to both cflags and cxxflags. it works perfectly. thanks.

Maratyszcza commented 7 years ago

Fixed in Maratyszcza/confu@63ecb53f5cfbb08df1023910f49b04c5e49f1cc7