Microsoft announces asm.js optimizations

The Microsoft Chakra team has announced on the IE blog that asm.js optimizations are In Development. We at Mozilla are very excited for IE to join Firefox in providing predictable, top-tier performance on asm.js code and from my discussions with the Chakra team, I expect this will be the case.

What does “asm.js optimizations” mean?

Given this announcement, it’s natural to ask what exactly “asm.js optimizations” really means these days and how “asm.js optimizations” are different than the normal JS optimizations, which all browsers are continually adding, that happen to benefit asm.js code. In particular, the latter sort of optimizations are often motivated by asm.js workloads as we can see from the addition of asm.js workloads to both Google’s and Apple’s respective benchmark suites.

Initially, there was a simple approximate answer to this question: a distinguishing characteristic of asm.js is the no-op "use asm" directive in the asm.js module, so if a JS engine tested for "use asm", it was performing asm.js optimizations. However, Chrome has recently starting observing "use asm" as a form of heuristic signaling to the otherwise-normal JS compiler pipeline and both teams still consider there to be something categorically different in the Firefox approach to asm.js optimization. So, we need a more nuanced answer.

Alternatively, since asm.js code allows fully ahead-of-time (AOT) compilation, we might consider this the defining characteristic. Indeed, AOT is mentioned in the abstract of the asm.js spec, my previous blog post and v8 issue tracker comments by project members. However, as we analyze real-world asm.js workloads and plan how to further improve load times, it is increasingly clear that hybrid compilation strategies have a lot to offer. Thus, defining “asm.js optimizations” to mean “full AOT compilation” would be overly specific.

Instead, I think the right definition is that a JS engine has “asm.js optimizations” when it implements the validation predicate defined by the asm.js spec and optimizes based on successful validation. Examples of such optimizations include those described in my previous post on asm.js load-time as well as the throughput optimizations like bounds-check elimination on 64-bit platforms and the use of native calling conventions (particularly for indirect calls) on all platforms. These optimizations all benefit from the global, static type structure guaranteed by asm.js validation which is why performing validation is central.

Looking forward

This is a strong vote of confidence by Microsoft in asm.js and the overall compile-to-web story. With all the excitement and momentum we’ve seen behind Emscripten and asm.js before this announcement, I can’t wait to see what happens next. I look forward to collaborating with Microsoft and other browser vendors on taking asm.js to new levels of predictable, near-native performance.

Пост доступен на сайте Microsoft анонсировала оптимизацию в приложении asm.js.
Пост сайтында орналастырылған Microsoft туралы хабарлайды asm.js оңтайландыру.

6 Responses to Microsoft announces asm.js optimizations

  1. This is wonderful news! Great to have another adopter of asm.js!

  2. That’s great news. Soon we’ll all be able to use asm.js for our applications. (Whenever asm is there right fit). Congratulations.

  3. Cool beans, dude.

  4. I am excited to see Microsoft join efforts like asm.js. I wonder if they will make their own IL xpiler for .NET code, like Unity was doing with IL2CPP.

  5. OK, Ok, ok… so, Does this mean that, Finally, someone is going to see value in porting Postscript/Ghostscript to JavaScript for all Android/Cyano…whatever users everywhere to get from that Play store place,
    or wherever, so we can run our *.ps code files just like on Real Linux?
    -Eddie Maddox

Leave a Reply

Your email address will not be published. Required fields are marked *