News for hackers. Stuff that matters.
Re:Former Nvidia Dev's Thoughts on Vulkan/Mantle by mreiland on Thursday March 12, 2015 @06:06PM (#9194277)
That last quote really resonates with my experience of software dev in general. "easy" API's generally do it by making a ton of assumptions. Modifying those assumptions becomes a huge pain point and that's if the API even allows you to modify that particular assumption.
Re:Former Nvidia Dev's Thoughts on Vulkan/Mantle by jeremiep on Thursday March 12, 2015 @06:08PM (#9194299)
Exactly. This is why I like Rich Hickey's Simple Made Easy [1] so much. Basically with easy constructs it becomes harder to build simple systems, even though the simple constructs are harder to learn.

[1]: http://www.infoq.com/presentations/Simple-Made-Easy

Re:Former Nvidia Dev's Thoughts on Vulkan/Mantle by malkia on Thursday March 12, 2015 @06:30PM (#9194404)
I love this talk, and Rich Hickey's talks in general, but I think this goes beyond that.

At one point you want full control of the HW, much like you did with game consoles..

On the other you want security: This model must work in a sandboxed (os, process, vm, threads, sharing etc.) environment, along with security checks (oldest one that I remember was making sure vertex index buffers given to the driver/api must not reference invalid memory, something you would make sure is not the case for a console game through tests, but something that the driver/os/etc. must enforce and stop in a non-console game world - PC/OSX/Linux/etc.)

From little I've read on this API, it seems like security is in the hands of the developer, and there doesn't seem to be much OS protection, so most likely I'm missing something... but whatever protection is to be added, definitely would've not been needed in the console world.

Just a rant, I'm not a graphics programmer so it's easy to rant on topics you just scratched the surface...

----

(Not sure why I can't reply to jeremiep below), but thanks for the insight. I was only familiar with one I posted above (and that was back in 1999, back then if my memory serves me well, drawing primitives on Windows NT was slower than 95, because NT had to check all index buffers whether they were not referencing out-of-bounds, while nothing like this was on 98).

Re:Former Nvidia Dev's Thoughts on Vulkan/Mantle by jeremiep on Thursday March 12, 2015 @06:42PM (#9194474)
Security is actually much easier to implement on the GPU than on the CPU. For the simple reason that GPU code has to be pure in order to get this degree of parallelism. A shader is nothing more than a transform applied to inputs (attributes, uniforms and varyings) in order to give outputs (colors, depth, stencil).

Invalid data would simply cause a GPU task to fail while the other tasks happily continue to be executed. Since they are pure and don't interact with one another there is no need for process isolation or virtualization.

Basically, its easy to sandbox a GPU when the only data it contains are values (no pointers) and pure functions (no shared memory). Even with the simplified model the driver still everything it needs to enforce security.

Re:Former Nvidia Dev's Thoughts on Vulkan/Mantle by pandaman on Friday March 13, 2015 @01:30AM (#9195782)
You are describing GPU from 1990s. Modern GPU is essentially a general purpose computer sitting on the PCIe bus and able to do anything the CPU can. It does not have to run pure functions (e.g. see how it can be used for normal graphics tasks in [1]) and can write any location in the memory it can see. Securing it is as easy/hard as securing a CPU: if you screw up and expose some memory to the GPU it can be owned just like the memory exposed to a CPU task[2].

1. https://software.intel.com/en-us/blogs/2013/07/18/order-inde...

2. http://beta.ivc.no/wiki/index.php/Xbox_360_King_Kong_Shader_...

Re:Former Nvidia Dev's Thoughts on Vulkan/Mantle by monocasa on Thursday March 12, 2015 @07:16PM (#9194657)
GPUs these days have MMUs and have address spaces allocated per context. It's implemented internally to the driver though so you don't see it. And it's normally mapped differently, but the point of AMD's HSA stuff is to make the CPU's and GPU's MMU match up.
Re:Former Nvidia Dev's Thoughts on Vulkan/Mantle by jeremiep on Thursday March 12, 2015 @08:18PM (#9194936)
(To anwser the lack of a reply button:)

This is just hn adding a delay until the reply link appears related to how deeply nested the comment is. The deeper the longer the delay. It's a simple but effective way to prevent flame wars and the likes.

Re:Former Nvidia Dev's Thoughts on Vulkan/Mantle by mreiland on Thursday March 12, 2015 @06:18PM (#9194348)
yep, I love that talk and I find myself pointing people towards it all the time :)
Re:Former Nvidia Dev's Thoughts on Vulkan/Mantle by saidajigumi on Thursday March 12, 2015 @10:52PM (#9195461)
> "easy" API's generally do it by making a ton of assumptions.

Well, perhaps a better way of putting it is that "easy" APIs try to model a domain. Sometimes the API designer just nails it, and folks forget eventually take it for granted. The problem is now "solved". For example, the Unix userspace filesystem API (open, close, read, write, etc.) is pretty damn solid for what it is. I admit that I took it for granted until I worked at a place where someone who'd never seen a filesystem API (!!) was tasked with creating one from the ground up. You can guess how that went.

The downside case is where the API's model either never cut it in the first place, or as @wtallis illuminates above with OpenGL, where the model just ages poorly[1].

[1] https://news.ycombinator.com/item?id=9194138

Re:Former Nvidia Dev's Thoughts on Vulkan/Mantle by mreiland on Friday March 13, 2015 @09:49AM (#9197041)
No, it's about the assumptions and it's a mistake to move away from that mindset.

The Unix filesystem api isn't complete, if it were ioctl wouldn't exist. Assumptions all around, and ioctl is the way you adjust those assumptions.

Re:Former Nvidia Dev's Thoughts on Vulkan/Mantle by foobarian on Thursday March 12, 2015 @09:03PM (#9195103)
Gah. At our company a bunch of early Rails apps metastasized into financial/billing modules that do DB access using ActiveRecord. With all the convenient pluralization and automatic field/method naming. And are now on the critical path for our revenue. It's a daily reminder to me of how the "easy API" thing can go wrong :-)