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…
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.
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.
| Hub | Day | Avg price local/MWh |
Avg USD/MWh | Dark spread USD/GPU-hr |
Strike local/MWh | Price cap local/MWh |
Hours above strike | Source |
|---|
History
Dark spread over time
One point per day the series has run. Pick a hub; the line uses the generation and assumptions above.
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
| GPU | Nameplate | Server level | Server 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.