Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sOgFi-000Z9q-02 for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Jul 2024 16:21:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sOgFe-002kzc-1N for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Jul 2024 16:21:06 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sOgFc-002kzS-OE for pgsql-hackers@lists.postgresql.org; Tue, 02 Jul 2024 16:21:06 +0000 Received: from fhigh7-smtp.messagingengine.com ([103.168.172.158]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sOgFW-00050c-C6 for pgsql-hackers@postgresql.org; Tue, 02 Jul 2024 16:21:04 +0000 Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfhigh.nyi.internal (Postfix) with ESMTP id 7A1EF11401F0; Tue, 2 Jul 2024 12:20:56 -0400 (EDT) Received: from imap48 ([10.202.2.98]) by compute6.internal (MEProxy); Tue, 02 Jul 2024 12:20:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm2; t=1719937256; x=1720023656; bh=88oOCV45Nb GNQQr7jUhiKI8CEjkFf4T9B4fxJyFqEWY=; b=FCB0/HtQjh+12yjEnlLpt00Ms3 SjLv+fxbT8qgHuYzZzqdppkwfHu78WUK/Zx7/z5lm0Y8G0tI1vHRyjf8laaaS8CB kXQpy5lPjJzX06J7dXwwtiJnIePnncwP0kSPcZyC+Ktj+KNvxtbJcmKseU3pMBtp A0WRJxxSsm7x96fSNjLIrDeCybAkv16EyUvWjvVUW2lL3m2kHxTe3c+cjHMc1lKb KDjZjF2ObkZ/0qCrJzJ8VLbEkAkLFj5P9IlW09pSa2Co2KlNS0YOyorO53oyDt0r ICpBEwo1WvxC65eD3sfQxX3/4UZP4j5k2UwcitPywCwUumTRqcmYKu5LY43A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; t=1719937256; x=1720023656; bh=88oOCV45NbGNQQr7jUhiKI8CEjkF f4T9B4fxJyFqEWY=; b=LvME0tMVHbu4VElzh+T7bKYGzcdafUpAX4HbpJmlHw+z YvEfBL2xsadfi+KJkgf4s6xkUlYQF5afNbxWO61MT+XrHXmJ50ruxleAlqFjaWOG y06eQygBThFm9kviUijZNlMHP5wc72pT+3Hib9ZgoONg7Xi1IPJlHdOmMi96CQT9 ozKxkXikpsZwxykuBCFx/Kwig7QWVVedvjXX68royXN1jIZomQ7wAq/Ktft5EHv4 OH4s1uXb7n8wNaXQMHjhpSaCExPOBXSu6uWYUxg7a+dsb/DxrytX30YobJdDoY0D +4GGF6vesCKR3WloF0soYdr/zwcuGGAKFHcIljBdpw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrudehgdeljecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefofgggkfgjfhffhffvvefutgesmhdtreerreertdenucfhrhhomhepfdflohgv lhculfgrtghosghsohhnfdcuoehjohgvlhestghomhhpihhlvghrrdhorhhgqeenucggtf frrghtthgvrhhnpeetgfejvdffuedujeektdfgjeehfeffgeeuhfegteeujedvtdeifeef vddvveeuueenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhroh hmpehjohgvlhestghomhhpihhlvghrrdhorhhg X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id C109331A0065; Tue, 2 Jul 2024 12:20:55 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-566-g3812ddbbc-fm-20240627.001-g3812ddbb MIME-Version: 1.0 Message-Id: <4e54bf4f-59fe-4c9a-b446-a2b64cbfd584@app.fastmail.com> In-Reply-To: References: <44d2ffca-d560-4919-b85a-4d07060946aa@app.fastmail.com> <87zfr1e1uj.fsf@wibble.ilmari.org> <9ff90ff9-5ac1-4529-b2f4-f93b37734b9c@app.fastmail.com> <81348268-b9fd-4308-bf52-056070aa7c2a@app.fastmail.com> <8e909218-1965-4515-99e3-4bb5b625e004@app.fastmail.com> <0459ded5-6daf-4bf0-9ab0-e1f11ab15ec6@app.fastmail.com> Date: Tue, 02 Jul 2024 18:20:35 +0200 From: "Joel Jacobson" To: "Dean Rasheed" Cc: =?UTF-8?Q?Dagfinn_Ilmari_Manns=C3=A5ker?= , pgsql-hackers Subject: Re: Optimize numeric multiplication for one and two base-NBASE digit multiplicands. Content-Type: multipart/mixed; boundary=1f74c0b692524120a03b9507a65425f2 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --1f74c0b692524120a03b9507a65425f2 Content-Type: text/plain On Tue, Jul 2, 2024, at 13:44, Dean Rasheed wrote: >> Can you think of an example that should trigger the bug? > > 9999.0001 * 5000.9999_9999 with rscale = 0 triggers it (returned > 50004999 instead of 50005000). Thanks, helpful. Attached patch adds the var1ndigits=3 case. Benchmark: /* * Apple M3 Max */ SELECT SUM(var1*var2) FROM bench_mul_var_var1ndigits_3; -- HEAD Time: 3809.005 ms (00:03.809) Time: 3438.260 ms (00:03.438) Time: 3453.920 ms (00:03.454) SELECT SUM(var1*var2) FROM bench_mul_var_var1ndigits_3; -- v3-optimize-numeric-mul_var-small-var1-arbitrary-var2.patch Time: 3230.017 ms (00:03.230) Time: 3244.094 ms (00:03.244) Time: 3246.370 ms (00:03.246) /* * Intel Core i9-14900K */ SELECT SUM(var1*var2) FROM bench_mul_var_var1ndigits_3; -- HEAD Time: 4082.759 ms (00:04.083) Time: 4077.372 ms (00:04.077) Time: 4080.830 ms (00:04.081) SELECT SUM(var1*var2) FROM bench_mul_var_var1ndigits_3; -- v3-optimize-numeric-mul_var-small-var1-arbitrary-var2.patch Time: 3989.021 ms (00:03.989) Time: 3978.263 ms (00:03.978) Time: 3955.331 ms (00:03.955) /* * AMD Ryzen 9 7950X3D */ SELECT SUM(var1*var2) FROM bench_mul_var_var1ndigits_3; -- HEAD Time: 3791.271 ms (00:03.791) Time: 3760.138 ms (00:03.760) Time: 3758.773 ms (00:03.759) SELECT SUM(var1*var2) FROM bench_mul_var_var1ndigits_3; -- v3-optimize-numeric-mul_var-small-var1-arbitrary-var2.patch Time: 3400.824 ms (00:03.401) Time: 3373.714 ms (00:03.374) Time: 3345.505 ms (00:03.346) Regards, Joel --1f74c0b692524120a03b9507a65425f2 Content-Disposition: attachment; filename*0="v3-optimize-numeric-mul_var-small-var1-arbitrary-var2.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?v3-optimize-numeric-mul=5Fvar-small-var1-arbitrary-var2.patch?=" Content-Transfer-Encoding: BASE64 IEZyb20gZWNlOTYxMWQwODBmMGMwNDhjZWY2ZTQxM2Y0YTVlNTE2ODNlYzE3NyBNb24gU2Vw IDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSm9lbCBKYWtvYnNzb24gPGdpdGh1YkBjb21waWxl ci5vcmc+CkRhdGU6IFR1ZSwgMiBKdWwgMjAyNCAxNzo1NDoyNSArMDIwMApTdWJqZWN0OiBb UEFUQ0hdIG51bWVyaWM6IFNpbXBsaWZpZWQgZmFzdC1wYXRoIGNvbXB1dGF0aW9uIGZvciBt dWxfdmFyKCkKCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bWVyaWMuYyB8IDEwMCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEwMCBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bWVy aWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9udW1lcmljLmMKaW5kZXggNTUxMGEyMDNi MC4uMGZiMjE3ZjZlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bWVy aWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJpYy5jCkBAIC04NzQ3LDYg Kzg3NDcsMTA2IEBAIG11bF92YXIoY29uc3QgTnVtZXJpY1ZhciAqdmFyMSwgY29uc3QgTnVt ZXJpY1ZhciAqdmFyMiwgTnVtZXJpY1ZhciAqcmVzdWx0LAogCQlyZXR1cm47CiAJfQogCisJ LyoKKwkgKiBTaW1wbGlmaWVkIGZhc3QtcGF0aCBjb21wdXRhdGlvbiwgaWYgdmFyMSBoYXMg anVzdCBvbmUgb3IgdHdvIGRpZ2l0cy4KKwkgKiBUaGlzIGlzIHNpZ25pZmljYW50bHkgZmFz dGVyLCBzaW5jZSBpdCBhdm9pZHMgYWxsb2NhdGluZyBhIHNlcGFyYXRlCisJICogZGlnaXQg YXJyYXksIG1ha2luZyBtdWx0aXBsZSBwYXNzZXMgb3ZlciB2YXIyLCBhbmQgaGF2aW5nIHNl cGFyYXRlCisJICogY2FycnktcHJvcGFnYXRpb24gcGFzc2VzLgorCSAqLworCWlmICh2YXIx bmRpZ2l0cyA8PSAzKQorCXsKKwkJTnVtZXJpY0RpZ2l0ICpyZXNfYnVmOworCisJCS8qIEFs bG9jYXRlIHJlc3VsdCBkaWdpdCBhcnJheSAqLworCQlyZXNfYnVmID0gZGlnaXRidWZfYWxs b2MocmVzX25kaWdpdHMpOworCQlyZXNfYnVmWzBdID0gMDsJCQkJLyogc3BhcmUgZGlnaXQg Zm9yIGxhdGVyIHJvdW5kaW5nICovCisJCXJlc19kaWdpdHMgPSByZXNfYnVmICsgMTsKKwor CQkvKgorCQkgKiBDb21wdXRlIHRoZSByZXN1bHQgZGlnaXRzIGRpcmVjdGx5LCBpbiBvbmUg cGFzcywgcHJvcGFnYXRpbmcgdGhlCisJCSAqIGNhcnJ5IHVwIGFzIHdlIGdvLgorCQkgKi8K KwkJc3dpdGNoICh2YXIxbmRpZ2l0cykKKwkJeworCQkJY2FzZSAxOgorCQkJCWNhcnJ5ID0g MDsKKwkJCQlmb3IgKGkgPSByZXNfbmRpZ2l0cyAtIDM7IGkgPj0gMDsgaS0tKQorCQkJCXsK KwkJCQkJbmV3ZGlnID0gKGludCkgdmFyMWRpZ2l0c1swXSAqIHZhcjJkaWdpdHNbaV0gKyBj YXJyeTsKKwkJCQkJcmVzX2RpZ2l0c1tpICsgMV0gPSAoTnVtZXJpY0RpZ2l0KSAobmV3ZGln ICUgTkJBU0UpOworCQkJCQljYXJyeSA9IG5ld2RpZyAvIE5CQVNFOworCQkJCX0KKwkJCQly ZXNfZGlnaXRzWzBdID0gKE51bWVyaWNEaWdpdCkgY2Fycnk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgMjoKKwkJCQluZXdkaWcgPSAoaW50KSB2YXIxZGlnaXRzWzFdICogdmFyMmRpZ2l0 c1tyZXNfbmRpZ2l0cyAtIDRdOworCQkJCWlmIChyZXNfbmRpZ2l0cyAtIDMgPCB2YXIybmRp Z2l0cykKKwkJCQkJbmV3ZGlnICs9IChpbnQpIHZhcjFkaWdpdHNbMF0gKiB2YXIyZGlnaXRz W3Jlc19uZGlnaXRzIC0gM107CisJCQkJcmVzX2RpZ2l0c1tyZXNfbmRpZ2l0cyAtIDJdID0g KE51bWVyaWNEaWdpdCkgKG5ld2RpZyAlIE5CQVNFKTsKKwkJCQljYXJyeSA9IG5ld2RpZyAv IE5CQVNFOworCQkJCWZvciAoaSA9IHJlc19uZGlnaXRzIC0gNDsgaSA+PSAxOyBpLS0pCisJ CQkJeworCQkJCQluZXdkaWcgPSAoaW50KSB2YXIxZGlnaXRzWzBdICogdmFyMmRpZ2l0c1tp XSArCisJCQkJCQkoaW50KSB2YXIxZGlnaXRzWzFdICogdmFyMmRpZ2l0c1tpIC0gMV0gKyBj YXJyeTsKKwkJCQkJcmVzX2RpZ2l0c1tpICsgMV0gPSAoTnVtZXJpY0RpZ2l0KSAobmV3ZGln ICUgTkJBU0UpOworCQkJCQljYXJyeSA9IG5ld2RpZyAvIE5CQVNFOworCQkJCX0KKwkJCQlu ZXdkaWcgPSAoaW50KSB2YXIxZGlnaXRzWzBdICogdmFyMmRpZ2l0c1swXSArIGNhcnJ5Owor CQkJCXJlc19kaWdpdHNbMV0gPSAoTnVtZXJpY0RpZ2l0KSAobmV3ZGlnICUgTkJBU0UpOwor CQkJCXJlc19kaWdpdHNbMF0gPSAoTnVtZXJpY0RpZ2l0KSAobmV3ZGlnIC8gTkJBU0UpOwor CQkJCWJyZWFrOworCisJCQljYXNlIDM6CisJCQkJbmV3ZGlnID0gKGludCkgdmFyMWRpZ2l0 c1syXSAqIHZhcjJkaWdpdHNbcmVzX25kaWdpdHMgLSA1XTsKKwkJCQlpZiAocmVzX25kaWdp dHMgLSA0IDwgdmFyMm5kaWdpdHMpCisJCQkJCW5ld2RpZyArPSAoaW50KSB2YXIxZGlnaXRz WzFdICogdmFyMmRpZ2l0c1tyZXNfbmRpZ2l0cyAtIDRdOworCQkJCWlmIChyZXNfbmRpZ2l0 cyAtIDMgPCB2YXIybmRpZ2l0cykKKwkJCQkJbmV3ZGlnICs9IChpbnQpIHZhcjFkaWdpdHNb MF0gKiB2YXIyZGlnaXRzW3Jlc19uZGlnaXRzIC0gM107CisJCQkJcmVzX2RpZ2l0c1tyZXNf bmRpZ2l0cyAtIDJdID0gKE51bWVyaWNEaWdpdCkgKG5ld2RpZyAlIE5CQVNFKTsKKwkJCQlj YXJyeSA9IG5ld2RpZyAvIE5CQVNFOworCQkJCWZvciAoaSA9IHJlc19uZGlnaXRzIC0gNDsg aSA+PSAyOyBpLS0pCisJCQkJeworCQkJCQluZXdkaWcgPSBjYXJyeTsKKwkJCQkJaWYgKGkg PCB2YXIybmRpZ2l0cykKKwkJCQkJCW5ld2RpZyArPSAoaW50KSB2YXIxZGlnaXRzWzBdICog dmFyMmRpZ2l0c1tpXTsKKwkJCQkJaWYgKGkgLSAxID49IDAgJiYgaSAtIDEgPCB2YXIybmRp Z2l0cykKKwkJCQkJCW5ld2RpZyArPSAoaW50KSB2YXIxZGlnaXRzWzFdICogdmFyMmRpZ2l0 c1tpIC0gMV07CisJCQkJCWlmIChpIC0gMiA+PSAwICYmIGkgLSAyIDwgdmFyMm5kaWdpdHMp CisJCQkJCQluZXdkaWcgKz0gKGludCkgdmFyMWRpZ2l0c1syXSAqIHZhcjJkaWdpdHNbaSAt IDJdOworCQkJCQlyZXNfZGlnaXRzW2kgKyAxXSA9IChOdW1lcmljRGlnaXQpIChuZXdkaWcg JSBOQkFTRSk7CisJCQkJCWNhcnJ5ID0gbmV3ZGlnIC8gTkJBU0U7CisJCQkJfQorCQkJCW5l d2RpZyA9IGNhcnJ5OworCQkJCWlmICh2YXIybmRpZ2l0cyA+IDEpCisJCQkJCW5ld2RpZyAr PSAoaW50KSB2YXIxZGlnaXRzWzBdICogdmFyMmRpZ2l0c1sxXTsKKwkJCQlpZiAodmFyMm5k aWdpdHMgPiAwKQorCQkJCQluZXdkaWcgKz0gKGludCkgdmFyMWRpZ2l0c1sxXSAqIHZhcjJk aWdpdHNbMF07CisJCQkJcmVzX2RpZ2l0c1syXSA9IChOdW1lcmljRGlnaXQpIChuZXdkaWcg JSBOQkFTRSk7CisJCQkJY2FycnkgPSBuZXdkaWcgLyBOQkFTRTsKKwkJCQluZXdkaWcgPSAo aW50KSB2YXIxZGlnaXRzWzBdICogdmFyMmRpZ2l0c1swXSArIGNhcnJ5OworCQkJCXJlc19k aWdpdHNbMV0gPSAoTnVtZXJpY0RpZ2l0KSAobmV3ZGlnICUgTkJBU0UpOworCQkJCXJlc19k aWdpdHNbMF0gPSAoTnVtZXJpY0RpZ2l0KSAobmV3ZGlnIC8gTkJBU0UpOworCQkJCWJyZWFr OworCQl9CisKKwkJLyogU3RvcmUgdGhlIHByb2R1Y3QgaW4gcmVzdWx0IChtaW51cyBleHRy YSByb3VuZGluZyBkaWdpdCkgKi8KKwkJZGlnaXRidWZfZnJlZShyZXN1bHQtPmJ1Zik7CisJ CXJlc3VsdC0+bmRpZ2l0cyA9IHJlc19uZGlnaXRzIC0gMTsKKwkJcmVzdWx0LT5idWYgPSBy ZXNfYnVmOworCQlyZXN1bHQtPmRpZ2l0cyA9IHJlc19kaWdpdHM7CisJCXJlc3VsdC0+d2Vp Z2h0ID0gcmVzX3dlaWdodCAtIDE7CisJCXJlc3VsdC0+c2lnbiA9IHJlc19zaWduOworCisJ CS8qIFJvdW5kIHRvIHRhcmdldCByc2NhbGUgKGFuZCBzZXQgcmVzdWx0LT5kc2NhbGUpICov CisJCXJvdW5kX3ZhcihyZXN1bHQsIHJzY2FsZSk7CisKKwkJLyogU3RyaXAgbGVhZGluZyBh bmQgdHJhaWxpbmcgemVyb2VzICovCisJCXN0cmlwX3ZhcihyZXN1bHQpOworCisJCXJldHVy bjsKKwl9CisKIAkvKgogCSAqIFdlIGRvIHRoZSBhcml0aG1ldGljIGluIGFuIGFycmF5ICJk aWdbXSIgb2Ygc2lnbmVkIGludCdzLiAgU2luY2UKIAkgKiBJTlRfTUFYIGlzIG5vdGljZWFi bHkgbGFyZ2VyIHRoYW4gTkJBU0UqTkJBU0UsIHRoaXMgZ2l2ZXMgdXMgaGVhZHJvb20KLS0g CjIuNDUuMQoK --1f74c0b692524120a03b9507a65425f2--