Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

> Cute. It's fun to see game programmer code.

This. I work almost exclusively with game programmers and it can be ... difficult at times. They seem to be largely unaware of the larger computer science community that's existed since the mid sixties, often "discovering" things that were solved by the science years ago.



On the other hand, game programmers are just as frequently the only ones exercising anything close to the full functionality of today's hardware. It's kind of depressing how little use SIMD, multicore, and GPU (compute or otherwise) get outside of games. Games have done a pretty good job keeping up with the ending of Moore's Law for sequential code, but we continue to use our old sequential libraries and leave so much performance on the table in the app world.

I do agree that the apps and server world is ahead, in many cases way ahead, in terms of effective development practices and programming languages. But we've lost sight of how to get performance out of the hardware.


I was re-exploring that issue recently. It wasn't obvious to me which of two strategies I commonly saw are best: extend existing languages with parallel constructs as in Cilk/C, ParaSail/Ada, or Lime/Java; create custom languages + compilers like Cray's Chapel or academic Triolet whose output cleanly integrates with apps in an existing language. My uncertainty comes from the fact that general-purpose languages founded in sequential use might be too hard to max out on arbitrary multi-core & CPU architectures. What's your opinion on which looks to be the best route so far?

Cilk http://supertech.lcs.mit.edu/cilk/

ParaSail http://www.embedded.com/design/other/4375616/ParaSail--Less-...

Lime Compilation http://researcher.watson.ibm.com/researcher/files/us-bacon/D...

Chapel http://chapel.cray.com/overview.html

Triolet http://impact.crhc.illinois.edu/shared/Papers/dissertation-r...


Anything and everything. I don't believe there's a one-size-fits-all solution for parallelism.


> game programmers are just as frequently the only ones exercising anything close to the full functionality of today's hardware

I know some ML and HPC cats who obsess about hitting peak gigaflops...


Yeah, I was too broad there, sorry about that. There are definitely a few fields like scientific computing and HFT that are very good at extracting performance out of modern hardware.

Still, app and server developers, by and large, have not been able to do this (and I count myself among them!) We use languages with no support for SIMD, we stick to language implementations without optimizing compilers, single-threaded language implementations are very popular, we ignore GPU computing despite the fact that the die space reserved for the GPU is as large or larger than the die space reserved for the CPU cores nowadays, and so on.


This is a really good counterpoint, and I think it reflects how the client's nature can very much shape the development process.

Big-budget video games often have very different feature requirements compared to ofter types of software, not to mention especially strict deadlines, so their attitudes towards shipping products is going to be different.


The problem is that the majority of applications we get hired to develop are either some kind of CRUD or data transformation project.


The constraints and things that matter are different. I've had both experiences like you and also the opposite ones. As an example the constant factor in time usage is surprisingly important in games. Amortized time consumption is not the absolute end all be all.

Designing any soft realtime application is subtly different from traditional application. Your frametime budget is 16ms. It's rock solid. You spend 17ms and you're down to 30fps and you could've just spent 33ms.

That's actually the reason why garbage collection is big no no in games. One cannot afford even 1ms gc pauses. And in server world that's considered blazingly fast. If a game is for some reason developed using a language with GC it's just skipped by making object pools. And then tediously checking that no allocations and freeing actually happens during a frame.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: