Hello!
I am trying to build PyTorch 1.10.2 as a wheel for the ARM 32 bits architecture. More specifically, I want to be able to run PyTorch in a Raspberry Pi.
I am able to run the build process up until the 60% mark, where it fails with the following message:
/workdir/pytorch/third_party/XNNPACK/src/qs8-gemm/gen/1x8c4-minmax-fp32-neondot.c: In function ‘xnn_qs8_gemm_minmax_fp32_ukernel_1x8c4__neondot’:
/workdir/pytorch/third_party/XNNPACK/src/qs8-gemm/gen/1x8c4-minmax-fp32-neondot.c:94:18: warning: implicit declaration of function ‘vcvtnq_s32_f32’; did you mean ‘vcvtq_s32_f32’? [-Wimplicit-function-declaration]
vacc0x0123 = vcvtnq_s32_f32(vproduct0x0123);
^~~~~~~~~~~~~~
vcvtq_s32_f32
/workdir/pytorch/third_party/XNNPACK/src/qs8-gemm/gen/1x8c4-minmax-fp32-neondot.c:94:16: error: incompatible types when assigning to type ‘int32x4_t’ from type ‘int’
vacc0x0123 = vcvtnq_s32_f32(vproduct0x0123);
^
What I understand from this error message is that the vcvtnq_s32_f32
function, from XNNPACK, is missing. The default C behaviour is to implicitly declare a prototype with int
as the return type, which is obviously not correct.
I found this issue, which led me to look around the PyTorch repo that I have checked out and the polyfill does exist, in the pytorch/third_party/XNNPACK/src/xnnpack/intrinsics-polyfill.h
file:
// AArch32 GCC, see
// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71233
// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95399
#if XNN_ARCH_ARM && defined(__GNUC__) && !defined(__clang__) && defined(__ARM_NEON__)
#include <arm_neon.h>
static XNN_INTRINSIC
int32x4_t vcvtnq_s32_f32(float32x4_t v) {
return vcvtq_s32_f32(vrndnq_f32(v));
}
#endif // AArch32 GCC
So, not only does the polyfill exist, but the affected file, pytorch/third_party/XNNPACK/src/qs8-gemm/gen/1x8c4-minmax-fp32-neondot.c
, also includes the polyfill:
#include <assert.h>
#include <arm_neon.h>
#include <xnnpack/gemm.h>
#include <xnnpack/intrinsics-polyfill.h>
#include <xnnpack/math.h>
What can I do to make sure that XNNPACK finds and uses the polyfill? This is blocking me from being able to build PyTorch for the Raspberry Pi.