(opens in new tab)<\/span><\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"Project Parade\u00a0is a novel approach to parallelizing a large class of seemingly sequential applications wherein dependencies are, at runtime, treated as symbolic values.<\/p>\n","protected":false},"featured_media":300773,"template":"","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","footnotes":""},"research-area":[13563,13560],"msr-locale":[268875],"msr-impact-theme":[],"msr-pillar":[],"class_list":["post-292964","msr-project","type-msr-project","status-publish","has-post-thumbnail","hentry","msr-research-area-data-platform-analytics","msr-research-area-programming-languages-software-engineering","msr-locale-en_us","msr-archive-status-active"],"msr_project_start":"2014-10-17","related-publications":[163237,166117,166118,167640,168641,168643,168797],"related-downloads":[],"related-videos":[],"related-groups":[],"related-events":[],"related-opportunities":[],"related-posts":[],"related-articles":[],"tab-content":[{"id":0,"name":"Symbolic Execution","content":"Here's an example of how it works. Imagine an algorithm that has three components, F, G, and H. F takes some data as input and generates a result. That result is used by G, possibly along with some other data, to compute\u00a0its\u00a0<\/em>result. Then H uses G's result (and again, possibly some other data) to compute the final result.\r\n\r\n\r\n\r\nBecause of these dependencies, G cannot start executing until F has finished. Likewise, H cannot start executing until G has finished. How can we possibly execute this algorithm in parallel? We do that by starting G (and H) at the same time as F. F executes using the real input data, but G and H are given a\u00a0symbolic<\/em> input, x. They are then executed in a symbolic manner which generates a summary:\u00a0g(x)<\/em> for G and\u00a0h(x)<\/em> for H. A summary is itself a function that, given a concrete input, generates a concrete (i.e., not<\/em> symbolic) output.\u00a0So\u00a0once F has computed its output, that is used by\u00a0g(x)<\/em> to compute the output that is then used as input by\u00a0h(x)<\/em>.\r\n\r\n\r\n\r\nThe final, concrete, result is the same as that computed by the sequential algorithm. In order for this to be efficient, it must be possible to do two things:\r\n\r\n \t- The summary of a component must be \"small\": i.e., it must be concise enough so that it can be communicated easily in a parallel implementation to the process that will execute it on concrete input.<\/li>\r\n \t
- The execution of a summary must be efficient (which is related to its size): if it takes as long to execute the summary as it does to execute the original component, then the parallel implementation will be no faster than the sequential algorithm.<\/li>\r\n<\/ol>"}],"slides":[],"related-researchers":[{"type":"user_nicename","display_name":"Madan Musuvathi","user_id":32766,"people_section":"Group 1","alias":"madanm"},{"type":"user_nicename","display_name":"Olli Saarikivi","user_id":37700,"people_section":"Group 1","alias":"olsaarik"}],"msr_research_lab":[199565],"msr_impact_theme":[],"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/292964"}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/msr-project"}],"version-history":[{"count":8,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/292964\/revisions"}],"predecessor-version":[{"id":643137,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/292964\/revisions\/643137"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media\/300773"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=292964"}],"wp:term":[{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=292964"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=292964"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=292964"},{"taxonomy":"msr-pillar","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-pillar?post=292964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}