|Posted by max haughton|
in reply to Steven Schveighoffer
On Saturday, 11 March 2023 at 13:08:49 UTC, Steven Schveighoffer wrote:
> On 3/10/23 4:10 PM, ryuukk_ wrote:
>> On Friday, 10 March 2023 at 20:53:23 UTC, Hipreme wrote:
>>> Hello guys. I have been working for some time into binding Metal to D.
>>> This has been quite an interesting journey and today I've reached a point where it is usable.
>>> It is far from complete, but I included a lot of comments from Apple's documentation, and also have tested and got an entire Metal hello world working in D.
>>> The API I worked on is really nice, I manually put the opIndex, opIndexAssign, wrapped Objective C Runtime Arrays to a strongly typed array in D. The main point into this binding is getting Metal to run on Hipreme Engine, so, I don't plan into supporting what I don't use. That said, I still welcome any contribution to make this a standard way to program using Apple's Metal.
>>> I'll put an example folder the moment I get a dub fix for macOS.
>>> ![Metal MacOS D Hello World](https://user-images.githubusercontent.com/10136262/224425800-e417414e-b6be-4e92-93b4-9087b1b281a2.png)
>> But metal obj-c? do you mean DMD support only? so no Apple Silicon (intel only)?
>> I don't think Intel stuff on mac ecosystem will be a thing for too long, PPC era already vanished from history
>> There is the official C++ headers that you can use to make things easier
> From that page:
> No measurable overhead compared to calling Metal Objective-C headers, due to inlining of C++ function calls.
> D will not inline C++ function calls. So there will be overhead.
If you are able to use LTO then they'll be inlined. This may be slightly easier said that done for some build targets because apple's "clang" is actually a closed source fork so it's not impossible that there is LLVM incompatibility in there somewhere.
In the absence of evidence suggesting otherwise, the overhead of an additional function call is probably quite small relative to the metal part of the function call (especially if that Metal call ends up waiting on the GPU for something).
I'm now curious if there are I$ optimizations specifically for chasing function calls like this.