Virya Compute Spreads

The global compute dark spread

One global GPU price, many local power prices

A GPU-hour rents for one price worldwide; power clears hub by hub. Subtract the power a GPU burns, at each market's day-ahead price in its own currency, and the spread becomes a map: where the margin on a GPU-hour is widest, and which grids ever price a reason for compute to switch off.

Loading the latest market data…

GPU generation
Heat rate basis

Power cost per GPU-hour

Where the margin on a GPU-hour is widest

Each bar is what a H100 spends on power in one hour at that hub's latest daily average price, converted to USD at the ECB rate. The spread is the rent minus the bar. Shorter bar, wider spread.

USD per GPU-hour

Strike by hub

Does compute ever curtail here?

The strike in each market's own currency, against its price cap and against the hours of the latest day. A strike above the cap means price alone never makes switching off worth it.

HubDayAvg price
local/MWh
Avg
USD/MWh
Dark spread
USD/GPU-hr
Strike
local/MWh
Price cap
local/MWh
Hours above
strike
Source

Method v0.1 · tables v2026Q4

Two lines of arithmetic

Spread and strike

spreadh,f = Gf − HRf × PUE × (Ph ÷ FXh) ÷ 1000

P*h,f = Gf × 1000 ÷ (HRf × PUE) × FXh

h is the power hub, f the GPU generation, G the rent in USD per GPU-hour, P the hub's daily average day-ahead (or spot) price in local currency per MWh, FX local currency per USD on the same day, HR kWh per GPU-hour, PUE the facility overhead (1.3 reference). P* is the hub price at which the spread reaches zero.

Heat rate, kWh per GPU-hour

GPUNameplateServer levelServer basis

Nameplate is board power, the basis of the Ornn Data paper. Server level is NVIDIA's maximum DGX system power ÷ 8, so it includes CPUs, network and storage.

Read it with these cautions

  • Wholesale is not delivered cost. Grid fees, demand charges, capacity payments and taxes can double the delivered price in Europe and Japan. This is the comparable wholesale layer.
  • FX is its own basis. Local and USD values sit side by side, so a move can be traced to power or to currency.
  • One rent for the world. The rent is a single global index; a local rent can differ.
  • Hours matter for the strike. Daily averages drive the spread; the hourly prices are kept so the strike can be checked hour by hour.
  • Not every market has a day-ahead. Alberta, Great Britain (Market Index Data) and the NEM are spot prices.

Sources

    Open API

    Use the series

    JSON, no key, CORS open. Refreshed at 06:15 and 18:15 UTC. Please cite "Virya Compute Spreads".

    GET /api/spreads

    Newest snapshot: GPU rents, FX, every hub's latest day (hourly prices, averages local and USD, source), and the reference spread and strike per generation at PUE 1.3 on the nameplate heat rate.

    GET /api/history

    One row per day: hub average in USD/MWh and local currency, and each generation's rent. Up to 120 days.