From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by yquem.inria.fr (Postfix) with ESMTP id 85890BBAF for ; Tue, 5 Aug 2008 18:39:11 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AugCAMkemEjQRG0YiGdsb2JhbACBV49fAQEBDyCcTg X-IronPort-AV: E=Sophos;i="4.31,311,1215381600"; d="p7s'?scan'208";a="13738857" Received: from mail-out.metaweb.com (HELO mail01.apmindsf.com) ([208.68.109.24]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/AES256-SHA; 05 Aug 2008 18:39:10 +0200 Received: from mail01.corp.sfo1.metaweb.com ([172.30.62.126] helo=h00215.dev.sfo1.metaweb.com) by mail01.apmindsf.com with esmtp (Exim 4.50) id 1KQPYv-0007jY-As for caml-list@yquem.inria.fr; Tue, 05 Aug 2008 09:39:05 -0700 Received: from localhost (localhost [127.0.0.1]) by h00215.dev.sfo1.metaweb.com (Postfix) with ESMTP id 438706B11F4 for ; Tue, 5 Aug 2008 12:39:05 -0400 (EDT) X-Virus-Scanned: amavisd-new at Received: from h00215.dev.sfo1.metaweb.com ([127.0.0.1]) by localhost (h00215.dev.sfo1.metaweb.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id IdEsGv7ULQjd for ; Tue, 5 Aug 2008 09:39:04 -0700 (PDT) Received: from timesink.local (c-98-210-196-241.hsd1.ca.comcast.net [98.210.196.241]) by h00215.dev.sfo1.metaweb.com (Postfix) with ESMTP id 2C8816B11A7 for ; Tue, 5 Aug 2008 12:39:04 -0400 (EDT) Message-Id: <9CA17B22-757C-4ED0-866C-4C44E73DB423@metaweb.com> From: Warren Harris To: caml-list caml-list Content-Type: multipart/signed; boundary=Apple-Mail-32--871024726; micalg=sha1; protocol="application/pkcs7-signature" Mime-Version: 1.0 (Apple Message framework v926) Subject: parameter passing optimizations Date: Tue, 5 Aug 2008 09:39:03 -0700 X-Mailer: Apple Mail (2.926) X-Spam: no; 0.00; flowed:01 ocaml:01 compiler:01 allocating:01 foo:01 foo:01 chunks:01 compactions:01 chunks:01 compactions:01 pkcs:01 warren:98 warren:98 deo:98 dzx:98 --Apple-Mail-32--871024726 Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit I've been wondering whether the ocaml compiler does any sort of parameter passing optimizations for data structures, e.g. stack allocating, or destructuring them when it can determine their scope does not escape the call. My first conclusion is that it does for tuples only, but I wanted to see what others might know. I wrote a number of simple test programs that each pass 6 arguments through 2 levels of functions by a number of means (main calls foo 1M times, foo calls bar once). For 1M iterations, the times I saw (optimized) are posted below. It looks like the case of passing parameters in a tuple doesn't allocate (since the number of minor words is the same as the positional parameters case). However, it still seems to run more than an order of magnitude slower so perhaps it loses the benefits of register allocation (?). Warren let bar a b c d e f = a + b + c + d + e + f minor_words: 7950 promoted_words: 2251 major_words: 2266 minor_collections: 1 major_collections: 0 heap_words: 61440 heap_chunks: 1 top_heap_words: 61440 live_words: 2266 live_blocks: 354 free_words: 59174 free_blocks: 1 largest_free: 59174 fragments: 0 compactions: 0 real 0m0.860s user 0m0.835s sys 0m0.017s let bar (a, b, c, d, e, f) = a + b + c + d + e + f minor_words: 7950 promoted_words: 2251 major_words: 2266 minor_collections: 1 major_collections: 0 heap_words: 61440 heap_chunks: 1 top_heap_words: 61440 live_words: 2266 live_blocks: 354 free_words: 59174 free_blocks: 1 largest_free: 59174 fragments: 0 compactions: 0 real 0m11.067s user 0m10.942s sys 0m0.037s let bar (Foo(a, b, c, d, e, f)) = a + b + c + d + e + f minor_words: 7000224061 promoted_words: 2251 major_words: 2266 minor_collections: 213629 major_collections: 0 heap_words: 61440 heap_chunks: 1 top_heap_words: 61440 live_words: 2266 live_blocks: 354 free_words: 59174 free_blocks: 1 largest_free: 59174 fragments: 0 compactions: 0 real 0m17.443s user 0m17.176s sys 0m0.089s let bar {a=a; b=b; c=c; d=d; e=e; f=f} = a + b + c + d + e + f minor_words: 7000223886 promoted_words: 2251 major_words: 2266 minor_collections: 213629 major_collections: 0 heap_words: 61440 heap_chunks: 1 top_heap_words: 61440 live_words: 2266 live_blocks: 354 free_words: 59174 free_blocks: 1 largest_free: 59174 fragments: 0 compactions: 0 real 0m16.314s user 0m16.167s sys 0m0.059s let bar ?(a=0) ?(b=0) ?(c=0) ?(d=0) ?(e=0) ?(f=0) () = a + b + c + d + e + f minor_words: 12002946309 promoted_words: 2251 major_words: 2266 minor_collections: 366300 major_collections: 0 heap_words: 61440 heap_chunks: 1 top_heap_words: 61440 live_words: 2266 live_blocks: 354 free_words: 59174 free_blocks: 1 largest_free: 59174 fragments: 0 compactions: 0 real 0m33.036s user 0m32.648s sys 0m0.156s --Apple-Mail-32--871024726 Content-Disposition: attachment; filename=smime.p7s Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIKlzCCBREw ggP5oAMCAQICAQEwDQYJKoZIhvcNAQEEBQAwgb8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxp Zm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMSMwIQYDVQQKExpNZXRhd2ViIFRlY2hub2xv Z2llcywgSW5jLjEbMBkGA1UECxMSTWV0YXdlYiBPcGVyYXRpb25zMSEwHwYDVQQDExhNZXRhd2Vi IFJvb3QgQ2VydGlmaWNhdGUxHjAcBgkqhkiG9w0BCQEWD29wc0BtZXRhd2ViLmNvbTAeFw0wNjEw MTcxNjAyNTRaFw0xNjEwMTQxNjAyNTRaMIGrMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv cm5pYTEjMCEGA1UEChMaTWV0YXdlYiBUZWNobm9sb2dpZXMsIEluYy4xGzAZBgNVBAsTEk1ldGF3 ZWIgT3BlcmF0aW9uczElMCMGA1UEAxMcTWV0YXdlYiBWUE4gUm9vdCBDZXJ0aWZpY2F0ZTEeMBwG CSqGSIb3DQEJARYPb3BzQG1ldGF3ZWIuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAus7rUEDLJAA7HelQnBvXWO06L3OUgyEfnj3ToI/Iop+LI513Y3/b3CHCR3bfIi3QzCPZUctt 7IOpT403qG1l3fI13n5fWoBNKXPP3jGs0ev2pDPclXK8SazndQNOVb0I6tdOj1osnARcX/Nj+zfm z7hAbDYzBba2VrfS/zHyVgxqhP/7B9etHva2UEX9ZxHk6prbP/hFc2Rp1PpyDRfaOdwSfVB9vxWE DX7BSfGO0oodK7YH1kk1CSZwjddXiemHUg6zztXJ4OohhhNsoWJ3gSqBG3RXWOpBRtqKZEkA1cS9 13hJ1qcG1XQHmyr8bY21x9oJT+qe6qLN0MCM6jkkdwIDAQABo4IBKDCCASQwHQYDVR0OBBYEFPEL NnHIEcBCuTE7rnw9YTnRs7g7MIH0BgNVHSMEgewwgemAFBLhBR58Q0Ibe+Q6UzvA0yk3eDeFoYHF pIHCMIG/MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy YW5jaXNjbzEjMCEGA1UEChMaTWV0YXdlYiBUZWNobm9sb2dpZXMsIEluYy4xGzAZBgNVBAsTEk1l dGF3ZWIgT3BlcmF0aW9uczEhMB8GA1UEAxMYTWV0YXdlYiBSb290IENlcnRpZmljYXRlMR4wHAYJ KoZIhvcNAQkBFg9vcHNAbWV0YXdlYi5jb22CCQDAK3meYNperzAMBgNVHRMEBTADAQH/MA0GCSqG SIb3DQEBBAUAA4IBAQAJ4X3ts+LJ16deo00h5nUA+IuVLR+h9BlzkQi6LCp5dZx97Ex2PaiQc4b2 G7kJA5OP/T68roWlj6LwoCTQmOZHK/W4xqm9Di9FqhvsigGeliFk5OIcTgot0GiVPoH4avCwa/mk 5uPj+RTAGTMxSjlUyNu4RzKD0WypKSP6ghc/55tosB/1WTbC8k/pV5EyL1FgF/3AnlG7O0uYFIYt OWmIMHm5XFLPHxjeUqDyEVeZm4STu8eWyo17ac+/JrPzd7zSnZGZd1nMXSSDuywRtCZEStq0SzkN oQbu6JGrL57TEL3HZdHPaIV5leYPyvGQMGplTiTAOIf+q+L5ro3+6FZaMIIFfjCCBGagAwIBAgIB VDANBgkqhkiG9w0BAQQFADCBqzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExIzAh BgNVBAoTGk1ldGF3ZWIgVGVjaG5vbG9naWVzLCBJbmMuMRswGQYDVQQLExJNZXRhd2ViIE9wZXJh dGlvbnMxJTAjBgNVBAMTHE1ldGF3ZWIgVlBOIFJvb3QgQ2VydGlmaWNhdGUxHjAcBgkqhkiG9w0B CQEWD29wc0BtZXRhd2ViLmNvbTAeFw0wODA0MTEyMTU3MzhaFw0xODA0MDkyMTU3MzhaMIGgMQsw CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEjMCEGA1UEChMaTWV0YXdlYiBUZWNobm9s b2dpZXMsIEluYy4xHDAaBgNVBAsTE01ldGF3ZWIgRW5naW5lZXJpbmcxFjAUBgNVBAMTDVdhcnJl biBIYXJyaXMxITAfBgkqhkiG9w0BCQEWEndhcnJlbkBtZXRhd2ViLmNvbTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAK0aYgN/4a6011jghtHtD4mt8FwE+fVakIiPYRRliLAVK54gIVJ3 Sw8LMlZli/TZcwThyD+d30k558k4R75Dkov5YarKPt0THlLDczqn4uw0L3hlrQKu0WWWCGHxf8kk 6w0LAxAgOqPsBSW8LhraOHQMANQ8MHlpuLg1bVdWG/G1WLs7A3uuhfpsImWeCrPjeEEnZ5O24aEx EwqFvrTtfLBYJBcK2u8Qb0HevjwXpeO71/4L9gPJGA3kPdDPbULAFbAr06Y9fTf6YLBPzMfKd1OP zIyjo75TjqCQ+GyV8Up1WXk9Vwa9s3t6qDINaCwTyO9DBwu9uS+gMfSkygn73F8CAwEAAaOCAbQw ggGwMAsGA1UdDwQEAwIF4DAdBgNVHQ4EFgQU6NZ6Tlb2wX+hA5ME3wLTneBEtI0wgewGA1UdIwSB 5DCB4YAU8Qs2ccgRwEK5MTuufD1hOdGzuDuhgcWkgcIwgb8xCzAJBgNVBAYTAlVTMRMwEQYDVQQI EwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMSMwIQYDVQQKExpNZXRhd2ViIFRl Y2hub2xvZ2llcywgSW5jLjEbMBkGA1UECxMSTWV0YXdlYiBPcGVyYXRpb25zMSEwHwYDVQQDExhN ZXRhd2ViIFJvb3QgQ2VydGlmaWNhdGUxHjAcBgkqhkiG9w0BCQEWD29wc0BtZXRhd2ViLmNvbYIB ATAtBglghkgBhvhCAQQEIBYeaHR0cDovL3d3dy5tZXRhd2ViLmNvbS92cG4uY3JsMC8GA1UdHwQo MCYwJKAioCCGHmh0dHA6Ly93d3cubWV0YXdlYi5jb20vdnBuLmNybDAzBggrBgEFBQcBAQQnMCUw IwYIKwYBBQUHMAKGF2h0dHA6Ly93d3cubWV0YXdlYi5jb20vMA0GCSqGSIb3DQEBBAUAA4IBAQAs klPdQRHS1ZQimiVfDtDHr1gAmAGFj3mJhJbhg3eHnKd5vHlCGyoSzcR1ix/nWyx/7pcdXOoIrngi zVL18h1tRJKbTlfrtzJozEdUSEPmRLXqrzo5MdwyKnUZ7ZqT+FzmJhiyvBcX1vbGR1l0SCFLFO4w piuHIFWYmZcr4pq7UAXvmQKfjKFJhoAmTYEUW7BlJDGLIN5skai6XOAyWHzOugLwKkaEPn5p+sMf JL75PE3f84Ipf8AEmvdUCEXz9znn0YxDfypzHblFXEUKtAeGhY854bzxga6n1hJHOSzRhF/PfUOI MbatQSJ+SyDDkmW5wPIGckbFd0HZFSEsqrw3MYIDxjCCA8ICAQEwgbEwgasxCzAJBgNVBAYTAlVT MRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQKExpNZXRhd2ViIFRlY2hub2xvZ2llcywgSW5j LjEbMBkGA1UECxMSTWV0YXdlYiBPcGVyYXRpb25zMSUwIwYDVQQDExxNZXRhd2ViIFZQTiBSb290 IENlcnRpZmljYXRlMR4wHAYJKoZIhvcNAQkBFg9vcHNAbWV0YXdlYi5jb20CAVQwCQYFKw4DAhoF AKCCAekwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDgwODA1MTYz OTA0WjAjBgkqhkiG9w0BCQQxFgQUtzUuWZH6FS20eebqPZ4hcQ4/u2owgcIGCSsGAQQBgjcQBDGB tDCBsTCBqzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExIzAhBgNVBAoTGk1ldGF3 ZWIgVGVjaG5vbG9naWVzLCBJbmMuMRswGQYDVQQLExJNZXRhd2ViIE9wZXJhdGlvbnMxJTAjBgNV BAMTHE1ldGF3ZWIgVlBOIFJvb3QgQ2VydGlmaWNhdGUxHjAcBgkqhkiG9w0BCQEWD29wc0BtZXRh d2ViLmNvbQIBVDCBxAYLKoZIhvcNAQkQAgsxgbSggbEwgasxCzAJBgNVBAYTAlVTMRMwEQYDVQQI EwpDYWxpZm9ybmlhMSMwIQYDVQQKExpNZXRhd2ViIFRlY2hub2xvZ2llcywgSW5jLjEbMBkGA1UE CxMSTWV0YXdlYiBPcGVyYXRpb25zMSUwIwYDVQQDExxNZXRhd2ViIFZQTiBSb290IENlcnRpZmlj YXRlMR4wHAYJKoZIhvcNAQkBFg9vcHNAbWV0YXdlYi5jb20CAVQwDQYJKoZIhvcNAQEBBQAEggEA SF4oFzgLrUU3Q59xA8ARtw1XyWM//qkOL1w52b1fT4AJIFBtJnCb/8gmlYvN0va3upPZ7dG/G846 gGFgZVCbKA/CikzJi7abxsXPFakHPRLOWEz5AaHnJmYM4IVZl2lHw790cYxmQBWBRrtX2Sa1nmXm S0kXNPZX4S63AP9zsgIaWbt97Yy1eZmhFr/u5jTzjoIqCRaVUOSjgz/oikriKJvnUzRAhIKuhwP+ cugjmVG/UGjR1YlUvkXVVj585m2/RAgjI9LWCAivg+hOlrW3usE3bE77xW/L6CvWsOmbKTofHn1R W8O79pHHpwCjNLTtdpeddqxhWJLhZbAAN2QnWwAAAAAAAA== --Apple-Mail-32--871024726--