Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WOA native building error (Exception 0xC0000005 with CpuElementwiseUnaryKernel.cpp) #1137

Open
xengpro opened this issue Aug 23, 2024 · 13 comments

Comments

@xengpro
Copy link

xengpro commented Aug 23, 2024

Output of 'strings libarm_compute.so | grep arm_compute_version':

Platform: Snapdragon 8cx Gen 3/ X Elite X1E78100

Operating System: Windows 11 (23h2/24h2)

Problem description:
I've tried to build by following the guide from: https://arm-software.github.io/ComputeLibrary/latest/how_to_build.xhtml#S1_6_windows_host, but failed with error like:

PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: clang-cl @C:\\Users\\xeng\\AppData\\Local\\Temp\\tmpdeamyx7s.lnk
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'src\cpu\kernels\CpuElementwiseUnaryKernel.cpp'.
4.      Running pass 'AArch64 Instruction Selection' on function '@"?validate@CpuElementwiseUnaryKernel@kernels@cpu@arm_compute@@SA?AVStatus@4@W4ElementWiseUnary@4@AEBVITensorInfo@4@1@Z"'
Exception Code: 0xC0000005
#0 0x00007ff7aadc9f14 (C:\Program Files\LLVM\bin\clang-cl.exe+0x1829f14)
#1 0x00007ff7aadc88a0 (C:\Program Files\LLVM\bin\clang-cl.exe+0x18288a0)
#2 0x00007ff7aadc6a54 (C:\Program Files\LLVM\bin\clang-cl.exe+0x1826a54)
clang-cl: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 18.1.8
Target: aarch64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin
clang-cl: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-cl: note: diagnostic msg: C:\Users\xeng\AppData\Local\Temp\CpuElementwiseUnaryKernel-33a8dd.cpp
clang-cl: note: diagnostic msg: C:\Users\xeng\AppData\Local\Temp\CpuElementwiseUnaryKernel-33a8dd.sh
clang-cl: note: diagnostic msg:

********************
scons: *** [build\src\cpu\kernels\CpuElementwiseUnaryKernel.obj] Error 1
^C^C^C^C
scons: *** [build\src\core\utils\FormatUtils.obj] Error 3221225786
scons: *** [build\src\runtime\Utils.obj] Error 3221225786
scons: *** [build\src\core\Utils.obj] Error 3221225786
^Cscons: *** [build\src\runtime\NEON\functions\NEDetectionPostProcessLayer.obj] Error 3221225786
scons: *** [build\src\cpu\operators\CpuGemmLowpMatrixMultiplyCore.obj] Error 3221225786
scons: Build interrupted.
scons: building terminated because of errors.
scons: writing .sconsign file.

I've tried code base v23.x and v24.07/08, all failed.
The toolchain I used:

  • vs2022 arm64 17.10.x/17.11.x (msvc latest, which is v143 and it required clang 17 or later)
  • llvm: 17.0.6/18.1.8 woa releases from llvm-project, and 17.0.6 in vs2022
  • python x64 3.10.11/3.11.5 with SCons 4.8.0

logs attached:
v24.08_xelite.zip

@morgolock
Copy link

Hi @xengpro

This seems to be a toolchain problem, could you please try with Clang 16 and let us know if that works?

Hope this helps.

@xengpro
Copy link
Author

xengpro commented Aug 27, 2024

Hi @xengpro

This seems to be a toolchain problem, could you please try with Clang 16 and let us know if that works?

Hope this helps.

Hi @morgolock ,
I tried clang15 earlier, but vs2022 requires clang 17+: "Unexpected compiler version, expected Clang 17.0.0 or newer."

@morgolock
Copy link

Hi @xengpro

There seems to be a problem with the Clang toolchain in VS. In order to compile ACL you have to download the external Clang toolchain I mentioned above. Try downloading https://github.com/llvm/llvm-project/releases/tag/llvmorg-16.0.6 and building ACL with it. That's what we use in the team to build ACL natively on Windows.

Hope this helps.

@xengpro
Copy link
Author

xengpro commented Aug 27, 2024

Hi @morgolock,
Thanks for you help. But I've tried llvmorg-16.0.6 a few minutes earlier, and get same error.

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\include\yvals_core.h(898,1): error:
      static assertion failed: error STL1000: Unexpected compiler version, expected Clang 17.0.0 or newer.
_EMIT_STL_ERROR(STL1000, "Unexpected compiler version, expected Clang 17.0.0 or newer.");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\include\yvals_core.h(519,44): note:
      expanded from macro '_EMIT_STL_ERROR'
#define _EMIT_STL_ERROR(NUMBER, MESSAGE)   static_assert(false, "error " #NUMBER ": " MESSAGE)
                                           ^             ~~~~~
1 error generated.
scons: *** [build\src\common\cpuinfo\CpuInfo.obj] Error 1
scons: building terminated because of errors.

C:\xeng\ACL>clang-cl -v
clang version 16.0.6
Target: aarch64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin

So it seems still not possible for ACL to build completely natively (with Visual Studio 2022 Arm64 build, which is 17.4 and newer ) on windows at the moment?

@morgolock
Copy link

Hi @xengpro

It's possible to build ACL natively using the toolchain I mentioned above, we have jobs building ACL every day natively on Windows. The problem with VS22 is that it does not support inline assembly for arm64 targets.

From what I see in the logs you shared there is a problem with your environment. In the error you shared above I see mention to Clang 17.0.0. It's likely your devenv is not properly setup. If you use the standalone Clang 16 toolchain you should see no references to Clang 17.

@xengpro
Copy link
Author

xengpro commented Aug 28, 2024

Hi @morgolock ,

I'm using standalone clang.

In the error you shared above I see mention to Clang 17.0.0.

It mentions Clang 17 because it detects that Clang 16.0.6 doesn't meet its expectations. So I tried standalone version Clang 18.1.8 and 17.0.6 which can build but get stuck in CpuElementwiseUnaryKernel.cpp. Comments out a few lines in it can let the build proceed, but still stuck somewhere else like framework.cpp.

The problem with VS22 is that it does not support inline assembly for arm64 targets.

That's true. And the Clang (17.0.3) that comes with vs2022 also fails anyway.
So on a X Elite Laptop, I'm using the following setup :

  • vs2022:
    • Version 17.11 arm64 build
    • workloads: desktop c++ (latest, v143), winsdk(22621), no llvm/clang component
  • LLVM woa: standalone version 17.0.6 and 18.1.8
  • Python arm64: 3.12.5 + SCons 4.8.0

It's possible to build ACL natively using the toolchain I mentioned above

Could you share the version of your vs2022 and msvc/winsdk workloads?

@morgolock
Copy link

morgolock commented Aug 28, 2024

Hi @xengpro

image

Snapdragon (TM) 8cx Gen 2 @ 3.15 GHz 3.15 GHz
Windows 11 Enterprise
Microsoft Visual Studio Community 2022 (ARM 64-bit) - Current Version 17.9.0

That's true. And the Clang (17.0.3) that comes with vs2022 also fails anyway.

It sounds like there is a problem with development environment and it is not properly setup.

@xengpro
Copy link
Author

xengpro commented Aug 29, 2024

Hi @morgolock ,

It sounds like there is a problem with development environment and it is not properly setup.

The setup is supposed to be very straight forward, so I couldn't mess it up:

  • install vs2022 latest or newer than 17.4 for arm64 version, add "Desktop development with C++" and "Windows 11 SDK"
  • install llvm woa standalone version (and add to sys path)
  • install python arm64 version then pip install scons.

then for my setup, llvm fails be like:

  • 16.0.6 can't build due to not meeting VS2022 requirement
  • 17.0.6/18.1.8: 0xc000005 exception in CpuElementwiseUnaryKernel.cpp or stuck somewhere else

But thanks to you information, I changed the VS2022 to 17.9.7 and compilation succeeded with 'standalone=0'.

However, when build with with 'standalone=1', the arm_compute.dll is linked but arm_compute.lib not produced:

LINK : fatal error LNK1181: cannot open input file 'arm_compute.lib'
scons: *** [build\arm_compute_graph.dll] Error 1181

@morgolock
Copy link

Hi @xengpro

If you want to build a program that uses ACL you will have to link statically against arm_compute-static-lib.

However, when build with with 'standalone=1', the arm_compute.dll is linked but arm_compute.lib not produced:

Could you please share you full build command? It should build without errors with standalone=1. I'm building with VS22 version 17.9.0 + Clang 16.0.6

Hope this helps,

@xengpro
Copy link
Author

xengpro commented Sep 16, 2024

However, when build with with 'standalone=1', the arm_compute.dll is linked but arm_compute.lib not produced:

Could you please share you full build command? It should build without errors with standalone=1. I'm building with VS22 version 17.9.0 + Clang 16.0.6

Really sorry for the typo. I was using 'standalone=0' when I was trying to get .dll files.

scons opencl=0 neon=1 os=windows examples=0 validation_tests=0 benchmark_examples=0 build=native Werror=0 exceptions=1 standalone=0 -j8 arch=arm64-v8.2-a

@morgolock
Copy link

Hi @xengpro

That's right, we only support building with standalone=1. This means that arm_compute_validation will link statically with arm_compute-static-lib. If you want to write a program that uses ACL you will have to also link statically with arm_compute-static-lib

Hope this helps.

@morgolock
Copy link

Hi @xengpro

I tried to compile ACL with clang 17 or later and I got the same error you reported. This is a problem in the compiler crashing. I've raised a bug in LLVM as the see: llvm/llvm-project#108976

@xengpro
Copy link
Author

xengpro commented Sep 29, 2024

I tried to compile ACL with clang 17 or later and I got the same error you reported. This is a problem in the compiler crashing. I've raised a bug in LLVM as the see: llvm/llvm-project#108976

Cool, thanks~!

That's right, we only support building with standalone=1.

Any plan to add standalone=0 support? Some program, such as onnx runtime, needs to change a lot to use static load.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants