>Two higher-end versions will be installed on more expensive BYD-branded cars and its premium Denza and Yangwang brands. These will enable a car to drive autonomously — though also under human supervision — in more complex urban traffic.
The base version is self driving as in lane assist. It will not change lanes for you or 'self drive' to your destination.
I agree with BYD that these are great safety features and give them props for not gating safety behind a paywall.
You could:
- host your own set of static runners on AWS -- which, have a fixed monthly cost.
- pay a provider for hosted runners -- most providers bill in CI Minutes. So you will run out of minutes if jobs run amok, not run up your bill.
- Set up auto-scaling runners that ebb and flow based on demand. This case is the one that represents the risk you are describing of an unexpected bill increase.
2/3 cases of "paying someone else for CI compute" are just as predictable as your solution cost-wise. Yours could be cheaper, but the risk of "unexpected bill increase" is not really there.
For 'large' instances, ARM64 is cheaper: https://docs.github.com/en/billing/managing-billing-for-your...
So what about regular instances?
For the average person with average needs, there is no difference between, for example, a $100 Dell Latitude E5530 from 10+ years ago and a $600 Best Buy low-end Dell laptop from today, so long as the Latitude has been modestly upgraded with 8GB of RAM and a small, used SSD. Its 3rd generation i5 is more than enough to do anything they need. It even runs Windows 11 just fine, so long as you inform the customer about the need to manually install feature updates.
For the general public, buying new computers is an expensive scam that contributes massively to waste. The machines I refurbish would typically have been thrown out or 'recycled' (stripped for precious metals in an expensive process) if not for my intervention. There's no reason for this except number-go-up greed, and it should stop.
private static uint FastDigitCount(ulong value)
{
ReadOnlySpan<byte> digitCounts = [19, 19, 19, 19, 18, 18, 18, 17, 17, 17, 16, 16, 16, 16, 15, 15, 15, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1];
ReadOnlySpan<ulong> digitCountThresholds = [0, 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999, 99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999, 9999999999999999, 99999999999999999, 999999999999999999, 9999999999999999999];
var leadingZeros = BitOperations.LeadingZeroCount(value);
var originalDigitCount = digitCounts[leadingZeros];
return originalDigitCount + (value > digitCountThresholds[originalDigitCount] ? 1u : 0u);
}
Benchmark: https://stackoverflow.com/a/79337820/4503491