Arm64 NVDA is running with x86 emulation>


valiant8086
 

There were some commits about getting NVDA to run on Arm a few years ago. It does run for sure, but Microsoft had a note somewhere about what you can and cannot run on Windows on Arm and they mentioned that NVDA has an Arm version. I just happened to notice today that while my NVDA runs fine, it's not arm, it's x86. Do we have an Arm64 version of NVDA hiding away somewhere that I need to try for the most efficiency?


--
Cheers:
Aaron Spears, AKA Valiant8086 General Partner at Valiant Galaxy Associates "we make (VERY GOOD AUDIOGAMES) for the blind comunity" http://valiantGalaxy.com


 

Hi,

Maybe or maybe not...

Let's start with a logic puzzle. Consider the following series of questions:

  1. What is the "most common denominator" when it comes to PC processor architecture?
  2. How many processor architectures does Windows 10 on ARM support?
  3. What causes NVDA to run on both x86 and ARM processors?
  4. A big hint: when you open program files folder for NVDA, how many folders starting with the string "lib" are there?

Please reply with your answers, or rather, think about each statement, which will ultimately yield an answer. After that, I will explain the answer(s).

Cheers,

Joseph


 

Hi,

Actually, here's the answer:

  1. The "most common denominator" for PC processor architecture is x86.
  2. Windows 10 on ARM supports three architectures: 64-bit ARM, 32-bit ARM, and 32-bit x86 via emulation.
  3. NVDA can run on both x86 and ARM by being an x86 app with provisions to support other architectures in certain scenarios.
  4. There are three folders starting with the string "lib" in NVDA's program files folder: lib (x86). lib64 (x64), and libArm64.

Answer: NVDA itself is an x86 application. But that's not the complete picture: it is a hybrid ap in the sense of supporting multiple architectures. While NVDA is a 32-bit application becasue of Python interpreter, it comes with DLL's to deal with certain apps, notably ones requiring screen scraping (display model) and accessing things via code injection. These facilities require talking to apps in their native languages, so NVDA does come with an ARM64 version of remote DLL's.

Cheers,

Joseph


valiant8086
 

Hi.


Gotcha. It does show 3 lib folders one says arm64 on it. What I got my information from was the task manager has a column that shows x86, x64, arm32 or arm64, or in the case of the latest office apps, Winword.exe for instance shows arm64 (x86 compatibility) what ever that means. It just says NVDA.exe is x86.


Anyway, you cleared it up. I just mostly wanted to be sure I wasn't running something different than what was the most optimal for this setup. Thanks



Cheers:
Aaron Spears, AKA Valiant8086 General Partner at Valiant Galaxy Associates "we make (VERY GOOD AUDIOGAMES) for the blind comunity" http://valiantGalaxy.com
On 2/16/2022 10:27 AM, Joseph Lee wrote:

Hi,

Actually, here's the answer:

  1. The "most common denominator" for PC processor architecture is x86.
  2. Windows 10 on ARM supports three architectures: 64-bit ARM, 32-bit ARM, and 32-bit x86 via emulation.
  3. NVDA can run on both x86 and ARM by being an x86 app with provisions to support other architectures in certain scenarios.
  4. There are three folders starting with the string "lib" in NVDA's program files folder: lib (x86). lib64 (x64), and libArm64.

Answer: NVDA itself is an x86 application. But that's not the complete picture: it is a hybrid ap in the sense of supporting multiple architectures. While NVDA is a 32-bit application becasue of Python interpreter, it comes with DLL's to deal with certain apps, notably ones requiring screen scraping (display model) and accessing things via code injection. These facilities require talking to apps in their native languages, so NVDA does come with an ARM64 version of remote DLL's.

Cheers,

Joseph