惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
V
V2EX
PCI Perspectives
PCI Perspectives
Latest news
Latest news
博客园 - 三生石上(FineUI控件)
C
CERT Recently Published Vulnerability Notes
W
WeLiveSecurity
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
WordPress大学
WordPress大学
V
Vulnerabilities – Threatpost
H
Heimdal Security Blog
Attack and Defense Labs
Attack and Defense Labs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - 叶小钗
V
Visual Studio Blog
Jina AI
Jina AI
P
Proofpoint News Feed
罗磊的独立博客
SecWiki News
SecWiki News
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 热门话题
Security Archives - TechRepublic
Security Archives - TechRepublic
The Hacker News
The Hacker News
Hugging Face - Blog
Hugging Face - Blog
N
News and Events Feed by Topic
NISL@THU
NISL@THU
T
Tailwind CSS Blog
T
Tenable Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recent Announcements
Recent Announcements
H
Hacker News: Front Page
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Tor Project blog
宝玉的分享
宝玉的分享
Help Net Security
Help Net Security
S
Security Affairs
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
G
GRAHAM CLULEY

Hacker News - Newest: "AI"

AI can't read an investor deck AI as an attorney? Student uses ChatGPT, Gemini to sue UW over alleged racial discrimination Hacking MCP Servers in AI Systems – The Rug Pull: Tool Changes After Approval GitHub - MeepCastana/KubeezCut: Free Web based video editor GitHub - GenAI-Gurus/awesome-eu-ai-act: Curated tools, official sources, OSS, templates, and guides for EU AI Act compliance. Can AI judge journalism? A Thiel-backed startup says yes, even if it risks chilling whistleblowers Coming soon: 10 Things That Matter in AI Right Now DARPA built an AI to fact-check enemy weapons claims What explains heterogeneity in AI adoption? When AI Meets Muscle: Context-Aware Electrical Stimulation Promises a New Way to Guide Human Movements - Department of Computer Science AI Changed How We Build. It Did Not Change What Matters. Linux rules on using AI-generated code - Copilot is OK, but humans must take 'full responsibility for the… Meta spins up AI version of Mark Zuckerberg to engage with employees Code Mode: Let Your AI Write Programs, Not Just Call Tools | TanStack Blog GitHub - Delavalom/graft: Go framework for building AI agents. Type-safe tools, multi-provider (OpenAI, Anthropic, Gemini, Bedrock), zero vendor SDKs. India's TCS tops estimates, says new AI models did not dent services demand Gen Z's fading AI hype Strong feeling: we are in a folded AI reality GitHub - machinarii/total-recall-catalog: A reference catalog of latest knowledge retrieval, memory & RAG systems GitHub - mensfeld/code-on-incus: Give each AI agent its own isolated machine with root, Docker, and systemd. Active defense detects and stops threats automatically.. Quantization, LoRA, and the 8% Problem: Benchmarking Local LLMs for Production AI Iran war: We spoke to the man making Lego-style AI videos that experts say are powerful propaganda Powell, Bessent discussed Anthropic's Mythos AI cyber threat with major U.S. banks GitHub - immartian/bellamem: Persistent belief-graph memory for AI agents. Retrieves decisive context by importance — not recency, not RAG, not /compact. recursive-mode: The Repo-Native Operating System for AI Engineering After the attack on Sam Altman's home, will AI CEO's go on the offensive? The biggest advance in AI since the LLM Opus 4.6 vs GPT 5.4 One Prompt Unity World Generation Test “AI polls” are fake polls Client Challenge Can AI be a 'child of God'? Inside Anthropic's meeting with Christian leaders How to Switch AI Chatbots and Why You Might Want To GitHub - MattMessinger1/agentic_refund_guardrail: Safe refund policy layer for AI agents — Python + TypeScript. Same behavior, shared tests. Adam/papers/emergent_values_whitepaper.md at master · strangeadvancedmarketing/Adam Ask HN: How do you stop playing 20 questions with your AI coding tools How far can automation and AI support psychotherapy? - @theU GitHub - stagas/rtdiff: realtime git diff gui and AI-assisted commits A Mac Studio for Local AI — 6 Months Later A History of the Early Years of AI at the University of Edinburgh Why AI Coding Tools Still Feel Stuck on Localhost MSN AI Datacenters Are Becoming Strategic Targets twitter.com Penn Researchers Use AI to Surface Unreported GLP-1 Side Effects in Reddit Posts Show HN: MoodSense AI (ML and FastAPI and Gradio, Deployed on Hugging Face) Moodsense Ai - a Hugging Face Space by aman179102 AI models are terrible at betting on soccer—especially xAI Grok GitHub - xialeistudio/echoic GitHub - HimashaHerath/github-dev-wrapped: AI-powered weekly GitHub activity reports deployed to GitHub Pages GitHub - alejandrobalderas/claude-code-from-source: Architecture, patterns & internals of Anthropic's AI coding agent — reverse-engineered from source maps AI and Tech brief: Ireland ascendant GitHub - Titovilal/context0: Context0 - Never Surrender Training for a Marathon with an AI Coach: What Worked and What Didn't Cyber Pulse: Agentic Intel - Apps on Google Play I Built an AI PR Reviewer That Catches Bugs by Not Looking for Bugs Gen Z workers are so fearful AI will take their job they’re intentionally sabotaging their company’s AI rollout | Fortune How AI Is Reimagining the Game of Golf–For Both Players and Courses GitHub - nattergabriel/reseed: A CLI tool for managing and distributing agent skills across projects Is SVG the final frontier? My AI workflow evolved from prompts to a near-autonomous workflow MLSharp Help - 3DGS Viewer & Generator I put my cognitive field based AI's runtime on GitHub Is Numble the first AI-proof game? A3: Kubernetes for autonomous AI agent fleets | Emergent Principles Deepali Vyas ("The Elite Recruiter") GitHub - msmarkgu/RelayFreeLLM: A restful API designed to route user prompts to various AI model providers. Unionized ProPublica staff are on strike over AI, layoffs, and wages Unleashing the Advantage of Quantum AI We're heading for an AI-fueled 'dementia crisis,' brain scientist warns The AI-Assisted Breach of Mexico's Government Infrastructure [pdf] GitHub - stef41/lmscan: 🔍 Detect AI-generated text and fingerprint which LLM wrote it. Open-source GPTZero alternative. Zero dependencies, works offline. MSN GitHub - visionscaper/collabmem: Enabling long-term collaboration with Agentic AI - building up episodic and world model memory over time with in-context awareness We gave an AI a 3 year retail lease in SF and asked it to make a profit | Andon Labs AI Code is Hollowing Out Open Source, and Maintainers are Looking the Other Way What leaked "SteamGPT" files could mean for the PC gaming platform's use of AI AI is the boss at this retail store. What could go wrong? GitHub - Wuzu11517/agentic-proxy: Local proxy meant to help reduce With Drones, Geophysics and ArtificiaI Intelligence, Researchers Prepare to Do Battle Against Land Mines A Single Operator, Two AI Platforms, Nine Government Agencies: The Full Technical Report 在 Steam 上购买 FriedrichAI: Offline AI 立省 10% GitHub - inevolin/resume-cli: Hit Claude usage limits? Resume any AI coding session elsewhere. Switch tools at zero friction. GitHub - atripati/ark: AI Runtime Kernel — a context operating system for AI agents. Eliminates tool bloat, loads only what’s needed, and gives LLMs their reasoning space back. How to Build a Secure AI PR Reviewer with Claude, GitHub Actions, and JavaScript This Startup Wants You to Pay Up to Talk With AI Versions of Human Experts Intel Arc Pro B70 Brings 32GB VRAM to Local AI for $949 WordPress 7.0: The Good, the AI, and the Still Missing AI on the couch: Anthropic gives Claude 20 hours of psychiatry IatroBench: Pre-Registered Evidence of Iatrogenic Harm from AI Safety Measures AI Agents Know About Supabase. They Don't Always Use It Right. The history and future of AI at Google, with Sundar Pichai Inside an AI‑enabled device code phishing campaign How Meta Used AI to Map Tribal Knowledge in Large-Scale Data Pipelines AI for Systems: Using LLMs to Optimize Database Query Execution Forecasting the Economic Effects of AI Introducing Tinker: Play with AI, bring your ideas to life AI sheds light on an ancient gaming mystery People really hate AI but not as much as Iran—or Democrats | Fortune What is an AI Product Engineer? Phoebe Gates wants her $185 million AI startup to succeed with 'no ties to my privilege or my last name': 'I have a chip on my shoulder' | Fortune
Edge AI Power Benchmarking — Part 6: Measuring the Power Efficiency of MemryX MX3
Mario Bergeron · 2026-06-24 · via Hacker News - Newest: "AI"

In Parts 1–3, we established a methodology for independent power measurement on edge AI accelerators. In Parts 4 and 5, we applied it to the Axelera Metis and the DeepX M1.

Series: Edge AI Power Benchmarking

Now we apply the same methodology to the MemryX MX3 M.2 acceleration module.

Installing the MemryX SDK

MemryX provides excellent instructions on installing their driver, runtime, and tools:

After installation, where I created a “venv-mx” python virtual environment, I was able to confirm the presence of the MemryX MX3 module with the mx_bench utility:

(venv-mx) $ mx_bench --hello
Hello from MXA!

Device ID | Chip Count |  Freq | Volt
----------|------------|-------|-----
        0 |          4 |   600 |  700

Reproducing the MemryX benchmarks

Before measuring power, I wanted to reproduce MemryX’s published benchmark. In line with the previous articles, I chose ResNet50, knowing it has the lightest post-processing stage, being a classification model.

  • MemryX Model Zoo
    • ResNet-50 (MXA-Optimized)
      • 14 TFLOPS (600 MHz) : 1778 FPS
      • 20 TFLOPS (850 MHz) : 2317 FPS

They publish two different benchmarks. The first benchmark corresponds to the default configuration (600 MHz clock). The second benchmark is taken in over-clocked mode (850 MHz clock).

Our initial target is to reproduce the benchmark of 1778 FPS.

I will attempt to perform the same in over-clocked mode, but am not certain if my host will support this.

In order to measure the FPS metric for the ResNet50 model, I downloaded the following files from the MemryX model zoo:

Throughput results at 14 TFLOPS

MemryX provides a benchmarking utility, mx_bench, that takes a .dfp compiled model and a frame count, and reports average FPS and system latency:

(venv-mx) $ mx_bench -v -d ResNet_50_MXA_Optimized_224_224_3_onnx.dfp -f 50000

╭─────────────────┬─────┬─────┬────────╮
│                 │     │     │        │
│                 │           ├────    │
│     │     │     ╞══       ══╡        │
│     │     │     │           ├────    │
│     │     │     │     │     │        │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║               Benchmark              ║
║  Copyright (c) 2019-2026 MemryX Inc. ║
╚══════════════════════════════════════╝

Ran 50000 frames
  Model: 0
  Average FPS: 1796.36
  Average System Latency: 3.24 ms

(venv-mx) $ mx_bench -v -d ResNet_50_MXA_Optimized_224_224_3_onnx.dfp -f 50000

╭─────────────────┬─────┬─────┬────────╮
│                 │     │     │        │
│                 │           ├────    │
│     │     │     ╞══       ══╡        │
│     │     │     │           ├────    │
│     │     │     │     │     │        │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║               Benchmark              ║
║  Copyright (c) 2019-2026 MemryX Inc. ║
╚══════════════════════════════════════╝

Ran 50000 frames
  Model: 0
  Average FPS: 1796.36
  Average System Latency: 3.31 ms

Two back-to-back runs on the same module land at exactly the same throughput of 1796.36 FPS, with latency varying only slightly (3.24 ms vs. 3.31 ms).

Not only did I match MemryX’s published 14 TFLOPS (600MHz) benchmark of 1778 FPS, I exceeded it by ~1%, hitting 1796 FPS.

Throughput results at 20 TFLOPS

In order to access the 20 TFLOPS performance of the MemryX MX3, I need to over-clock to 850MHz.

This can be done with the mx_set_powermode command:

(venv-mx) $ sudo mx_set_powermode

Once in the MX3 Power Tweak Utility’s GUI, select:

  • 1 - Set Power Mode (4-chip module)
    • 9 - 850 MHz
    • OK
  • 3- Exit

The fact that all frequencies above 600 MHz are in RED is probably a foreshadowing of what was going to happen, but I moved ahead with 850 MHz just the same.

I noticed that the frequency change only took effect after a reboot.

(venv-mx) $ mx_bench --hello
Hello from MXA!

Device ID | Chip Count |  Freq | Volt
----------|------------|-------|-----
        0 |          4 |   850 |  780

(venv-mx) abbeefai@AlbertaBeefAI:/media/abbeefai/TheExpanse/memryx$ mx_bench -v -d ResNet_50_MXA_Optimized_224_224_3_onnx.dfp -f 50000

╭─────────────────┬─────┬─────┬────────╮
│                 │     │     │        │
│                 │           ├────    │
│     │     │     ╞══       ══╡        │
│     │     │     │           ├────    │
│     │     │     │     │     │        │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║               Benchmark              ║
║  Copyright (c) 2019-2026 MemryX Inc. ║
╚══════════════════════════════════════╝

Ran 50000 frames
  Model: 0 
  Average FPS: 2335.41 
  Average System Latency: 2.76 ms

(venv-mx) $ mx_bench -v -d ResNet_50_MXA_Optimized_224_224_3_onnx.dfp -f 100000

╭─────────────────┬─────┬─────┬────────╮
│                 │     │     │        │
│                 │           ├────    │
│     │     │     ╞══       ══╡        │
│     │     │     │           ├────    │
│     │     │     │     │     │        │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║               Benchmark              ║
║  Copyright (c) 2019-2026 MemryX Inc. ║
╚══════════════════════════════════════╝

Ran 100000 frames
  Model: 0 
  Average FPS: 1887.61 
  Average System Latency: 2.42 ms

(venv-mx) $ mx_bench -v -d ResNet_50_MXA_Optimized_224_224_3_onnx.dfp -f 200000

╭─────────────────┬─────┬─────┬────────╮
│                 │     │     │        │
│                 │           ├────    │
│     │     │     ╞══       ══╡        │
│     │     │     │           ├────    │
│     │     │     │     │     │        │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║               Benchmark              ║
║  Copyright (c) 2019-2026 MemryX Inc. ║
╚══════════════════════════════════════╝

Ran 200000 frames
  Model: 0 
  Average FPS: 1425.14 
  Average System Latency: 2.46 ms

This is a fascinating capture.

For a cold-run, I was able to exceed the published benchmark of 2317 FPS by ~0.8%, with a benchmark of 2335 FPS.

However, as the temperature of the MX3 module increased, we quickly hit 100°C, which triggered thermal throttling.

Ultimately, due to the high temperature and thermal throttling, our performance degraded down to 1887 FPS, then 1425 FPS.

These are EXACTLY the thermal dynamics I want to explore in more detail in future exploration.

Since this initial series is only concerned with the vendor’s published benchmarks, which seem to be performed in ideal cold-run scenarios, I will keep the first of the three runs in my power efficiency evaluation.

Measuring MemryX MX3 Power with mb-powermon.py

We will use the methodology that we established in Part 3, using a custom INA228 based power measurement tool.

Also, we will use the same mb-powermon.py utility we have been using throughout the series:

Within the MemryX virtual environment, install the “pyftdi”, “adafruit-blinka”, and “adafruit-circuitpython-ina228” python packages:

(venv-mx) $ pip3 install pyftdi adafruit-blinka adafruit-circuitpython-ina228

Make certain you have permission to access the enumerated FTDI USB device (the same fix-ft232h-permissions.sh script from Parts 3–5 applies here).

Measuring MemryX MX3 Power at 14 TFLOPS

After configuring the MX3 for 14 TFLOPS (600 MHz clock), and rebooting, launch the mb-powermon utility as follows:

(venv-mx) $ python3 mb-powermon.py --probe memryx,adafruit --csv mb-powermon-memryx-ina228-resnet50-20260521-14tflops.csv

If we re-run the inference in a separate console:

(venv-mx) $ mx_bench --hello
Hello from MXA!

Device ID | Chip Count |  Freq | Volt
----------|------------|-------|-----
        0 |          4 |   600 |  700

(venv-mx) $ mx_bench -v -d ResNet_50_MXA_Optimized_224_224_3_onnx.dfp -f 50000

╭─────────────────┬─────┬─────┬────────╮
│                 │     │     │        │
│                 │           ├────    │
│     │     │     ╞══       ══╡        │
│     │     │     │           ├────    │
│     │     │     │     │     │        │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║               Benchmark              ║
║  Copyright (c) 2019-2026 MemryX Inc. ║
╚══════════════════════════════════════╝

Ran 50000 frames
  Model: 0 
  Average FPS: 1796.42 
  Average System Latency: 3.27 ms

(venv-mx) $ mx_bench -v -d ResNet_50_MXA_Optimized_224_224_3_onnx.dfp -f 100000

╭─────────────────┬─────┬─────┬────────╮
│                 │     │     │        │
│                 │           ├────    │
│     │     │     ╞══       ══╡        │
│     │     │     │           ├────    │
│     │     │     │     │     │        │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║               Benchmark              ║
║  Copyright (c) 2019-2026 MemryX Inc. ║
╚══════════════════════════════════════╝

Ran 100000 frames
  Model: 0 
  Average FPS: 1796.46 
  Average System Latency: 3.29 ms

(venv-mx) $ mx_bench -v -d ResNet_50_MXA_Optimized_224_224_3_onnx.dfp -f 200000

╭─────────────────┬─────┬─────┬────────╮
│                 │     │     │        │
│                 │           ├────    │
│     │     │     ╞══       ══╡        │
│     │     │     │           ├────    │
│     │     │     │     │     │        │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║               Benchmark              ║
║  Copyright (c) 2019-2026 MemryX Inc. ║
╚══════════════════════════════════════╝

Ran 200000 frames
  Model: 0 
  Average FPS: 1796.54 
  Average System Latency: 3.27 ms

While this is running, you will see something similar to the following (video playing at 10x speed):

If we convert the output .csv file to a user-friendly .html, we can plot power and temperature for the runs:

(venv) $ python3 csv-to-html-plot.py --input mb-powermon-memryx-ina228-resnet50-20260521-14tflops.csv --output mb-powermon-memryx-ina228-resnet50-20260521-14tflops.html

mb-powermon-memryx-ina228-resnet50-20260521-3-14tflops

Source: mb-powermon-memryx-ina228-resnet50-20260521-3-14tflops.csv · Generated: 2026-05-21 19:03

Power

Power:0000:c5:00.0_POWadafruit-ft232h_P1(3.3V)

Temperature

Temperature:0000:c5:00.0_T00000:c5:00.0_T10000:c5:00.0_T20000:c5:00.0_T3

The INA228 reports a wide range of values during the three runs. Contrary to the other vendors where the power mostly stabilized, the power readings on MX3 are constantly rising. the first run increased to ~11.0 W, the second to ~11.4 W, and the third to ~12.1 W. This rise is mostly likely caused by the on-die temperature readings rising to ~65°C, ~70°C, then ~90°C during each run.

Since this series of articles is concerned with the cold-runs, aiming only to reproduce the vendor’s best case scenarios, I will take the first result of ~11.0 W for comparison purposes.

Measuring MemryX MX3 Power with its on-board telemetry

After my initial results, MemryX sent me a sample of their MX3 module, with on-board telemetry. This allowed me to validate, in a similar fashion to the Hailo-8 module, my independant power measurement methodology.

mb-powermon-memryx-ina228-resnet50-20260603-02-14tflops

Source: mb-powermon-memryx-ina228-resnet50-20260603-02-14tflops.csv · Generated: 2026-06-03 12:53

Power

Power:0000:c5:00.0_POWadafruit-ft232h_P1(3.3V)

Temperature

Temperature:0000:c5:00.0_T00000:c5:00.0_T10000:c5:00.0_T20000:c5:00.0_T3

The first thing that jumps out with these results is that the INA228 measurements are slightly higher than MemryX’s own measurements.

This is the expected behavior. Each shunt resistor drops a small voltage across itself, leaving the load downstream with slightly less supply voltage. Since P = V · I, the load consumes slightly less power, and any downstream sense resistor reads correspondingly lower. The INA228 sits upstream of MemryX’s internal shunt, which contributes to the readings being higher.

Measuring MemryX MX3 Power at 20 TFLOPS

After configuring the MX3 for 20 TFLOPS (850 MHz clock), and rebooting, launch the mb-powermon utility as follows:

(venv-mx) $ python3 mb-powermon.py --probe memryx,adafruit --ina228-max-current 10 --power-max 25.0 --csv mb-powermon-memryx-ina228-resnet50-20260521-20tflops.csv

Notice that we specified two additional arguments for this run:

  • –ina228-max-current 10
    • increase max current to 10A
    • otherwise we get NULL readings when the current is beyond the default max of 5A
  • –power-max 25.0
    • for better viewing of this high power session

If we re-run the inference in a separate console:

(venv-mx) $ mx_bench --hello
Hello from MXA!

Device ID | Chip Count |  Freq | Volt
----------|------------|-------|-----
        0 |          4 |   850 |  780

(venv-mx) $ mx_bench -v -d ResNet_50_MXA_Optimized_224_224_3_onnx.dfp -f 50000

╭─────────────────┬─────┬─────┬────────╮
│                 │     │     │        │
│                 │           ├────    │
│     │     │     ╞══       ══╡        │
│     │     │     │           ├────    │
│     │     │     │     │     │        │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║               Benchmark              ║
║  Copyright (c) 2019-2026 MemryX Inc. ║
╚══════════════════════════════════════╝

Ran 50000 frames
  Model: 0 
  Average FPS: 2335.41 
  Average System Latency: 2.76 ms
  
(venv-mx) $ mx_bench -v -d ResNet_50_MXA_Optimized_224_224_3_onnx.dfp -f 100000

╭─────────────────┬─────┬─────┬────────╮
│                 │     │     │        │
│                 │           ├────    │
│     │     │     ╞══       ══╡        │
│     │     │     │           ├────    │
│     │     │     │     │     │        │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║               Benchmark              ║
║  Copyright (c) 2019-2026 MemryX Inc. ║
╚══════════════════════════════════════╝

Ran 100000 frames
  Model: 0 
  Average FPS: 1887.61 
  Average System Latency: 2.42 ms

(venv-mx) $ mx_bench -v -d ResNet_50_MXA_Optimized_224_224_3_onnx.dfp -f 200000

╭─────────────────┬─────┬─────┬────────╮
│                 │     │     │        │
│                 │           ├────    │
│     │     │     ╞══       ══╡        │
│     │     │     │           ├────    │
│     │     │     │     │     │        │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║               Benchmark              ║
║  Copyright (c) 2019-2026 MemryX Inc. ║
╚══════════════════════════════════════╝

Ran 200000 frames
  Model: 0 
  Average FPS: 1425.14 
  Average System Latency: 2.46 ms

While this is running, you will see something similar to the following (video playing at 10x speed):

If we convert the output .csv file to a user-friendly .html, we can plot power and temperature for the runs:

(venv) $ python3 csv-to-html-plot.py --input mb-powermon-memryx-ina228-resnet50-20260521-20tflops.csv --output mb-powermon-memryx-ina228-resnet50-20260521-20tflops.html

mb-powermon-memryx-ina228-resnet50-20260521-4-20tflops

Source: mb-powermon-memryx-ina228-resnet50-20260521-4-20tflops.csv · Generated: 2026-05-21 21:14

Power

Power:0000:c5:00.0_POWadafruit-ft232h_P1(3.3V)

Temperature

Temperature:0000:c5:00.0_T00000:c5:00.0_T10000:c5:00.0_T20000:c5:00.0_T3

The INA228 reports an average of ~20.2 W during the first run, with the on-die temperature readings quickly rising to ~90°C.

For a short cold-run session, the MX3 achieved 2335 FPS at 20.2 W, for a power efficiency of 116 FPS/W.

If we look at the second and third runs, we see the MX3’s protective thermal throttling start to kick in. Each time the on-die temperatures reach 100°C, we see the power drop. Despite this, we observed the on-die temperature reach 107°C at the end of the third run.

Thermal Considerations

It is very obvious in the 14 TFLOPS results that for the same throughput, we observe different power consumption values (~11.0W, ~11.4 W, ~12.1 W).

This is due to temperature. The hotter the MemryX MX3 silicon gets, and the more power it draws to sustain the same workload.

MemryX provides four temperature readings, corresponding to each of the four MX3 chips:

  • T0 => hottest
  • T1
  • T2
  • T3

Since the first chip is the entry point to the module, it carries the host-side I/O load on top of its share of the inference pipeline, which explains why T0 reads hotter than the other three.

Thermal Throttling

MemryX documents the thermal throttling mechanism in their developer hub’s troubleshooting page:

Each MX3 chip on the M.2 must be kept below 100 °C; otherwise, it will start to thermal throttle by reducing its frequency by 50%.

The throttle status of each chip (along with its temperature) can be monitored at “/sys/memx0/temperature”:

$ watch cat /sys/memx0/temperature

Every 2.0s: cat /sys/memx0/temperature  

CHIP(0) PVT3 Temperature: Temperature: 62 C (335 Kelvin) (ThermalThrottlingState: 0)
CHIP(1) PVT3 Temperature: Temperature: 61 C (334 Kelvin) (ThermalThrottlingState: 0)
CHIP(2) PVT3 Temperature: Temperature: 62 C (335 Kelvin) (ThermalThrottlingState: 0)
CHIP(3) PVT3 Temperature: Temperature: 62 C (335 Kelvin) (ThermalThrottlingState: 0)

(The same information is also available programmatically via the MemryX Runtime APIs.)

If we analyze our session of three runs at 20 TFLOPS:

RunOn-die temperatureThroughput% of cold-run
Run 1 (cold-run)≤ 90°C2335 FPS100 %
Run 2hit 100°C1887 FPS81 %
Run 3back to 100°C1425 FPS61 %

We can see that for Run 2, only one chip (TS0) hit 100 °C, and was therefore throttled at 50%.

For Run 3, we can see each of the four chips hitting reaching 100°C in succession. The first chip (TS0) at the start of the run. The second and third chips (TS1, TS2) in the middle on the run. The fourth chip (TS3) near the end of the run. At their peak, the four chips reached temperatures of TS0=106°C, TS1=103°C, TS2=106°C, and TS3=100°C, and had triggered their thermal throttling, within only 5 minutes into the session.

For sustained 20 TFLOPS throughput, an active cooling solution that keeps all four chips below ~95 °C would be required. Without it, only the first run of a 20 TFLOPS benchmark session reflects the boosted clock — every subsequent run averages a growing fraction of throttled-bottleneck time.

Idle Power

For power-sensitive applications, it is useful to know what the MemryX MX3 module draws when it is powered up but not running inference.

On my AMD Ryzen AI MAX+ 395 PC, which supports ASPM, the MemryX MX3 module negotiated ASPM as off.

I have measured two distinct idle power levels:

  • 1.28 W - ASPM off - after boot, before any AI inference
  • 1.92 W - ASPM off - idle, after AI inference

Since my interest in idle power is between AI inference sessions, I will ignore the pre-inference idle power measurement.

For always-on applications which are not continually performing inference, this idle power is a benchmark in itself:

ManufacturerAcceleratorStateASPMFanPower
HailoHailo-8 (M.2)idleL1no0.5 W
HailoHailo-8 (M.2)idleoffno0.8 W
AxeleraMetis (M.2)idleoffno2.9 W
AxeleraMetis (M.2)idleoffyes3.1 W
DeepXM1 (M.2)idleL1no0.74 W
DeepXM1 (M.2)idleoffno1.04 W
MemryXMX3 (M.2)idleoffno1.9 W

Known Issue with Earlier MX3 modules

With the earlier MX3 modules I already had in my possession, I ran into an issue with where my PC not booting with the MemryX module.

On my AMD Ryzen AI MAX+ 395 PC, I had to change the “Re-Size BAR” configuration to “disabled”, in order to perform this investigation.

$ lspci -vvv
...
c5:00.0 Processing accelerators: MemryX MX3
    ...
	Region 0: Memory at 80000000 (32-bit, non-prefetchable) [size=256M]
	Region 1: Memory at 90000000 (32-bit, non-prefetchable) [size=1M]
	...
...	

The MX3 exposes a fixed 256MB 32-bit non-prefetchable BAR, which means it must be placed in the sub-4GB MMIO window and cannot be relocated above it. With Re-Size BAR enabled, the firmware grants large resizable windows to other devices (most notably the Radeon iGPU) and on a platform without an exposed “Above 4G Decoding” option, this over-commits the sub-4GB space and leaves no contiguous slot for the MX3’s fixed BAR, causing the hanging during boot. Disabling Re-Size BAR forces conservative BAR placement and the MX3 lands cleanly at 0x80000000.

On my AMD Ryzen AI MAX+ 395, both the integrated Radeon iGPU and XDNA NPU remain fully functional with Re-Size BAR disabled. What’s lost is the ReBAR/SAM optimization for the iGPU, which slightly reduces theoretical throughput in workloads that benefit from it.

This issue does not exist with recent MX3 modules, as it allocated two smaller BARs, instead of one large BAR.

$ lspci -vvv
...
c5:00.0 Processing accelerators: MemryX MX3
    ...
	Region 0: Memory at cc000000 (64-bit, non-prefetchable) [size=16M]
	Region 2: Memory at cb000000 (64-bit, non-prefetchable) [size=16M]
	Region 4: Memory at cd000000 (32-bit, non-prefetchable) [size=1M]
	...
...	

Conclusion

In this article, we have successfully applied our power measurement methodology to the MemryX MX3 M.2 module.

On MemryX’s MXA-optimized resnet50 model, the MX3 configured for 14 TFLOPS (600 MHz) delivers 1796 FPS at ~11.0 W — roughly 163 FPS/W.

This is very impressive throughput, placing the MX3 in second place at 1796 FPS. With its higher power consumption, however, it falls in the last place in terms of power efficiency for resnet50.

Although the MX3 takes first place with 2335 FPS when in 20 TFLOPS mode, it cannot hold on to this crown due to thermal throttling.

ManufacturerAcceleratorModelThroughputPowerEfficiency
HailoHailo-8 (M.2)resnet501371 FPS4.0 W343 FPS/W
AxeleraMetis (M.2)resnet502050 FPS7.6 W270 FPS/W
DeepXM1 (M.2)resnet501009 FPS4.7 W214 FPS/W
MemryXMX3 (M.2) 14 TFLOPSresnet501796 FPS11.0 W163 FPS/W
MemryXMX3 (M.2) 20 TFLOPSresnet502335 FPS20.2 W116 FPS/W

NOTE: The MX3 (M.2) 20 TFLOPS benchmark is unsustainable, since it quickly hits 100°C, and undergoes thermal throttling. This mode would require a more aggresive thermal dissipation solution, such as Thermalright HR10 PRO.

It is important to note that the Axelera Metis module has LPDDR, where-as the Hailo-8 and MemryX MX3 modules do not. Also, the MemryX module has 2 lanes, where-as the others have 4.

ManufacturerAcceleratorPCIe lanesSRAMLPDDR
HailoHailo-8 (M.2)4undisclosednone
AxeleraMetis (M.2)452 MB1 GB LPDDR4X
DeepXM1 (M.2)4undisclosed4 GB LPDDR5
MemryXMX3 (M.2)262 MB (42 MB weight + 20 MB feature-map)none

One of the new features from MemryX is that we no longer need to combine models into a single DFP, for multi-inference pipelines. This is definitely a feature that I want to evaluate in future exploration.

The ease of use of the MemryX flow cannot be overstated here. As an industry example of adoption, it is worth noting that MemryX MX3 is the only M.2 AI Accelerator currently supported by Edge Impulse.

What Next?

I have followed a consistent methodology for these comparative benchmarks:

  • reproduce the manufacturer’s published ResNet-50 benchmark with their utilities
  • use manufacturer’s provided (default) thermal solution
  • measure power independently during a cold-run
  • rank power efficiency based on FPS/W

That said, I still do not know exactly what is happening inside each manufacturer’s benchmarking code. An ideal comparison would use the same vendor-independent code for everything except inference.

Finally, it is important to note that benchmarking a single simple network (i.e. ResNet-50) does not tell the whole story. Some larger models simply do not fit on certain accelerators. Others contain layers that are not supported by the vendor’s software solution.

In future articles, I will explore a more diverse and representative collection of models using vendor-independent code, and also cover multi-inference cascade pipelines. This will reveal the many complex layers of edge AI benchmarking.

If there are models, applications, or thermal conditions you would like to see covered, I invite you to reach out to me at:

  • edgeai@mariobergeron.com

Vendor Engagement Disclaimer

I already had in hand several MemryX modules, which were provided for previous articles:

The drafts of this article were shared with MemryX prior to publication.

For this article, MemryX provided a sample of recent MemryX MX3 module with on-board power telemetry.

Model NumberBARPower telemetryDescription
MX-M256Mn/aEarlier MX3 module
MX-MF16M+16Mn/aRecent MX3 module
MX-MFG16M+16MsupportedRecent MX3 module with current sensor

MemryX confirmed that 20 TFLOPS operation can be maintained with the following thermal solution:

Version History

DateDescription
2026/05/22Initial Draft
2026/06/04Incorporate Vendor Feedback