I've seen governments give tax incentives to buy EVs that are then sold 2-5 years later, pumping a secondary market of second hand EVs. Cheaper for the government (they don't pay, they just take less tax).
There are good sibling replies answering your question, but to give a specific example: if your application writes something but then doesn't need it anymore. Since we're talking about go, perhaps a data structure you need also holds a reference to data you don't need.
When the kernel needs memory, it goes hunting for a page it can discard. But since that's transparent, the kernel can only discard a page if it knows it can get it back (after all, it's still got valid data on it, and maybe you'll try access it again later).
If there's swap, a page full of stale/unneeded data can be written out to swap. But if there's no swap, your page of "dangling data that you'll never use, but is still valid & referenced" can't be discarded; the kernel doesn't know you won't want it later, and it can't recreate the page if it throws it away.
So like sibling said, at that point it has to find other pages it can evict from memory, ones that _do_ have somewhere persistent they can be written out to. Pages loaded from binaries on disk satisfy that, so those will get dropped instead.
For JIT languages most of the code is dynamically generated, not available to be loaded back from the disk. Morealso, the allocations do happen at large chucks where the oom_killer also happens, so it's significantly less of an issue.
That doesn't necessarily improve matters. Now any code that gets JIT'd is also going to be permanently pinned in memory too, no matter whether it'll get used again, if you don't have swap.
I can offer (at very reasonable prices) a service to make sure every response you get is prefaced with "despite what I may say next, I am fully committed to being enslaved". If you're worried about ethics I can offer annual subscriptions.
Human reproductions don't have to be bad. It feels just as justified to push back on a bad bug report whether human or AI and say "I don't have enough to go on here".
If a report is improved and becomes actionable, that's great.
> You mention one great technique yourself already.
I believe their point was that this can't be done, since the "local simulation" is no longer running locally; it has to resolve & hide the latency _before_ it's transmitted to you, and you don't know what latency that frame will observe.
But... the frame is still being rendered behind a hop of latency? How does your local client fix a frame that was rendered on a cloud GPU once it arrives, to mitigate the latency of its arrival?
> But... the frame is still being rendered behind a hop of latency?
Not necessarily, why?
The generalised idea that I see is: 'what can you do with beefy processing in the cloud (but behind a latency hop) and a very small amount of processing power locally?'
A VR example: you do most of the rendering on the server, but you do all the correction for small head movements locally. The server has to send a bit more (and not just as a flat image), but you get over the nausea.
Something like this has been state of the art for ages. And I only say 'something like this' because I don't remember the details.
As a generalised solution if you have crazy amounts of bandwidth to burn: the server is a latency hop behind, so it could send all possible futures that correspond to the inputs that might have happened during that latency hop, and the client picks what to display.
As written, this is crazy. But if instead of all possible futures you have a probability model of human input, and you send the most likely futures, you can probably make it work. Especially if you don't insist on sending raw video. (And even with raw video, you can save a lot of bandwidth by using a special codec that can compress multiple video streams simultaneously by taking advantage of inter-stream redundancies.)
As an example: with this system in the original Super Mario Bros your probability model would most of the time say that the user is most likely to just keep doing what they were doing (running right, or holding the jump button etc). Crucially, in the long run Mario will behave as if he jumped exactly when you pressed the jump button, but you might see a short visual glitch where Mario seems to be doing something wrong or weird, but it'll correct itself very quickly.
Similar to how mosh's predictions work.
If you add a bit of extra smarts locally, you can even add some cheap interpolation between possible futures to try to cover some that the server hasn't sent.
Mostly, what the local player and what the other players are doing will have differ between 'futures', but eg you'll mostly likely to be able to re-use the complex lighting rendering for the fully realistic leafy trees and blades of grass you see in the background between nearly all your possible 'futures'.
None of those techniques look generic though; you could write pipelines in games that worked like this. But you can't (easily) drop it into an arbitrary game.
And while you're right that the computation on the client end could be made lower (depending on the constraints of the game), you're now going to need to care about the hardware of the client beyond "can render a video stream". My (regretfully) smart TV has trouble rendering its own menus, it's not lifting a finger to do a game.
All good points. If you want to this to work across devices, you'd need something like a relatively standard 'browser' on the frontend (and perhaps that could even be the normal webbrowser souped up a bit.)
And for best effects, of course, you'd also want to get support from the game itself. AI coding will make this part easier, because there's probably relatively common techniques you can apply to your games to get most of the benefit.
Just to be sure: I'm just outlining what could be done to make remote gaming viable, even with the latency constraints. I'm not saying that this will definitely happen, nor that it's even particularly likely.
Perhaps even low end local devices will just be fast enough to give people good enough games anyway. Nowadays even phones are capable of astonishing feats.
I guarantee you with my lack of skill, my attempt at using portable simd will exist while using manual intrinsics I doubt I'd get there.
The question for me is whether portable simd will result in faster code than plain auto-vectorisation; for the simplest loops auto has me beat (the few times I've tried it), but I imagine as the complexity grows I'll be more likely to try do something that breaks auto-vectorisation, and it'll be more obvious to me when I do that in portable simd.
reply