GoingNative 18: Inside Vector Calling Convention (VCC)

Sign in to queue

Description

It's still August! Smiley

Summer was great! GoingNative 2013 is just around the corner and Charles is getting ready for the final touches! In the meantime, Ale went to chat with the low-level gurus in the Visual C++ BackEnd to talk about the new Vector Calling Convention feature (aka VCC). Learn more about what it is about, how to test it out while avoiding zombies, and meet Ankit Asthana, Charles Fu and Kevin Gao, the pm, dev and test folks behind the feature itself. Check out the blog post about VCC and do send us feedback! And don't forget: GoingNative 2013 is going to be amazing! Stream-stream-stream!

Enjoy!

Embed

Download

Download this episode

The Discussion

  • User profile image
    tomkirbygre​en

    I was hoping you folks would cover this! Next up what about digging deep into __async. In particular how can we hook into it for use in non Windows Store App contexts? I'd like to know if it will be possible to use __async over asynchronous classic COM interfaces. How as library developers to we hook in and make our existing continuation passing style libraries and APIs light up with __async?

    Also the shows have been getting shorter and shorter of late with each subsequent episode, hope that's because you're happily distracted getting ready for the Going Native 2013 Conference and not because you think there isn't any audience for this stuff.

    Oh, and how about a show covering the AST retrofit work going on the compiler to fully support constexpr etc? It be fascinating to hear how a venerable compiler is being updated. 

  • User profile image
    KikiAlex

    How is this interacting with the "__forceinline" directive ?

    How do you return from such a function(registers/stack) ?

    Can we mix types as inputs/outputs ?

    [ex :  "_m128 func(__m256,__m256,_m128,int,int);" ]

     

  • User profile image
    Charles

    @tomkirbygreen:You'll learn about await for C++ at GoingNative 2013 (as you know). For sure, we know there is an audience for this... We have been really busy constructing GN13. Fear not, Tom.

    C

  • User profile image
    CharlesFu001

    @KikiAlex: When a function is decorated with __forceinline and __vectorcall , __forceinline will have the high-order of preference.

    Yes, you can mix types as you normally do without the __vectorcall specifier.

     

  • User profile image
    KikiAlex

    @CharlesFu001:Thanks for the answer.

  • User profile image
    JandeVaan

    I have a question:

    I understand that an HVA/HFA struct will benefit from vector calling convention. Will the compiler also recognize opportunities to generate SSE instructions? For instance if I add two 4-element ints, and return them as the same type, will that be translated to a single SSE addition?

  • User profile image
    KevinGao

    Hello JandeVann,

    The answer is no. Currently, VC++ doesn't have the feature you are asking.

    Thanks,

  • User profile image
    JandeVaan

    @KevinGao: I see.

    So in the case you use HVA/HFA then the data travels via the SSE registers and in the called function it will be copied to normal registers when you need to do math on them.

    So for best speed, I guess we should use _m128 intrinsics (with the corresponding math instructions) over HVA/HFA.

    Is there existing code that benefits from support being able to handle HVA/HFA in the new calling convention? I mean if I were to rewrite my code to benefit from VCC, It would be more appropriate to go all the way and use the _m128 type.

  • User profile image
    KevinGao

    @JandeVaan: assume existing x64 code: void _vectorcall foo(_m128); is faster than void foo(_m128), because VCC uses register directly. And yes, you're right. You may also use _m256 if your machine supports it.

     

Add Your 2 Cents