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 1sOA9U-00CjUb-U5 for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Jul 2024 06:04:37 +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 1sOA9R-00F7zC-H7 for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Jul 2024 06:04:33 +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 1sOA9Q-00F7z4-Op for pgsql-hackers@lists.postgresql.org; Mon, 01 Jul 2024 06:04:33 +0000 Received: from wfout3-smtp.messagingengine.com ([64.147.123.146]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sOA9O-004QXg-FX for pgsql-hackers@postgresql.org; Mon, 01 Jul 2024 06:04:32 +0000 Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfout.west.internal (Postfix) with ESMTP id 881D31C000A2 for ; Mon, 1 Jul 2024 02:04:27 -0400 (EDT) Received: from imap48 ([10.202.2.98]) by compute6.internal (MEProxy); Mon, 01 Jul 2024 02:04:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm2; t=1719813867; x=1719900267; bh=A2kQAijQqXLCP27UQRF3dOYLSAMMIpZu Wj7Jlu+tkcs=; b=CayNtxWbYz/mGCKOp8/3Qiumvl1HUN/KN8I5EFbcCNP5xE+c bi5OmNUPSsIWiEfSTKoB0ErRQJoOVVADj9nFfubJisvuiGFGTjddx0FPA2yazmbE uaCN5rbSfxLsNpWF2z2ZaxcsveDB66cMxir09TcX8w4jh0baBt1VNTGtfA2w/IOo uvPVyqLneo1TsT07PumhtxIA891Bv0swA6hBA7zfwPRStzSFukY/xalQ8eyOGABW WzCJZtj6QYv/9lDmHBjDbLe32MWFO462OUuUMHtsLx6VGnWu1iWD9RfUJjcitvnK od+He4wGvqeiPP02xQ7t9TWHohuJLiUk/8lozA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1719813867; x=1719900267; bh=A2kQAijQqXLCP27UQRF3dOYLSAMMIpZuWj7 Jlu+tkcs=; b=BRKnw782kqhAkf8+9bXUjmODGLqAlfmRfy0VBVIyNA6ADrJzT3Q iOdgDgQ9mIh3SQYFiT41zS+/1hIeWG4zPgN5ktH8lMUrKfwd8uEoMTuAjvainPWL c8Ik1DcneFwbBrCwMEHsHzhk4SHGVedK6qIeL3nXAIvXY6577lUK6NtqLiLYsRwQ wWFzw9EWeFklwL+IqX52dt1k19h3xJXbCWIkSpFEPqwxQseLFesIRnUSQJBwcrFQ vOSnEBjkhh6Kpl4cx01AKNugW+zpJyWPLyH5yfM3gDR00Z3ZdoXlPOGbkZfNBbA2 lZvPlW7F2LVXfW7dNvnEhhcvHLLGrseDJ6g== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddruddvgddutdduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefofgggkfffhffvufgtsehmtderre erredtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhm phhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepledvueevteetueefleelhefgje ehhfduueffledugeefiedvjeelgffgvdegveetnecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrgh X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id E69EA31A0065; Mon, 1 Jul 2024 02:04:26 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-538-g1508afaa2-fm-20240616.001-g1508afaa MIME-Version: 1.0 Message-Id: <44d2ffca-d560-4919-b85a-4d07060946aa@app.fastmail.com> Date: Mon, 01 Jul 2024 08:04:06 +0200 From: "Joel Jacobson" To: pgsql-hackers Subject: Optimize numeric multiplication for one and two base-NBASE digit multiplicands. Content-Type: multipart/mixed; boundary=42225dcbc1f749e78ec4f87cac5b414e List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --42225dcbc1f749e78ec4f87cac5b414e Content-Type: text/plain Hello hackers, Attached patch introduces an optimization of mul_var() in numeric.c, targeting cases where the multiplicands consist of only one or two base-NBASE digits. Such small multiplicands can fit into an int64 and thus be computed directly, resulting in a significant performance improvement, between 26% - 34% benchmarked on Intel Core i9-14900K. This optimization is similar to commit d1b307eef2, that also targeted one and two base-NBASE digit operands, but optimized div_var(). Regards, Joel --42225dcbc1f749e78ec4f87cac5b414e Content-Disposition: attachment; filename*0="0001-optimize-numeric-mul_var-small-factors.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize-numeric-mul=5Fvar-small-factors.patch?=" Content-Transfer-Encoding: BASE64 RnJvbSAwNzBiY2E0MTZjMGE3OGY0Y2UzMmEyNWMxMjI1ZTgyMGM4MjA0OThhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEpha29ic3NvbiA8Z2l0aHViQGNvbXBpbGVy Lm9yZz4KRGF0ZTogTW9uLCAxIEp1bCAyMDI0IDA3OjQ0OjQ2ICswMjAwClN1YmplY3Q6IFtQ QVRDSF0gT3B0aW1pemUgbnVtZXJpYyBtdWx0aXBsaWNhdGlvbiBmb3IgdXAgdG8gdHdvIGJh c2UtTkJBU0UKIGRpZ2l0IG9wZXJhbmRzCgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9u dW1lcmljLmMgfCA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmls ZSBjaGFuZ2VkLCA1MiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L251bWVyaWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9udW1lcmljLmMK aW5kZXggNTUxMGEyMDNiMC4uZDZjOTAxN2EzNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L251bWVyaWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJp Yy5jCkBAIC04NzQ3LDYgKzg3NDcsNTggQEAgbXVsX3Zhcihjb25zdCBOdW1lcmljVmFyICp2 YXIxLCBjb25zdCBOdW1lcmljVmFyICp2YXIyLCBOdW1lcmljVmFyICpyZXN1bHQsCiAJCXJl dHVybjsKIAl9CiAKKwkvKgorCSAqIElmIHZhcjEgYW5kIHZhcjIgYXJlIGp1c3Qgb25lIG9y IHR3byBkaWdpdHMsIHRoZWlyIHByb2R1Y3Qgd2lsbCBmaXQgaW4KKwkgKiBhbiBpbnQ2NCBj YW4gYmUgY29tcHV0ZWQgZGlyZWN0bHksIHdoaWNoIGlzIHNpZ25pZmljYW50bHkgZmFzdGVy LgorCSAqLworCWlmICh2YXIybmRpZ2l0cyA8PSAyKQorCXsKKwkJaW50NjQJCXByb2R1Y3Q7 CisKKwkJc3dpdGNoICh2YXIxbmRpZ2l0cykKKwkJeworCQkJY2FzZSAxOgorCQkJCXByb2R1 Y3QgPSB2YXIxZGlnaXRzWzBdOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXByb2R1 Y3QgPSB2YXIxZGlnaXRzWzBdICogTkJBU0UgKyB2YXIxZGlnaXRzWzFdOworCQkJCWJyZWFr OworCQl9CisKKwkJc3dpdGNoICh2YXIybmRpZ2l0cykKKwkJeworCQkJY2FzZSAxOgorCQkJ CXByb2R1Y3QgKj0gdmFyMmRpZ2l0c1swXTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJ CQlwcm9kdWN0ICo9IHZhcjJkaWdpdHNbMF0gKiBOQkFTRSArIHZhcjJkaWdpdHNbMV07CisJ CQkJYnJlYWs7CisJCX0KKworCQlhbGxvY192YXIocmVzdWx0LCByZXNfbmRpZ2l0cyk7CisJ CXJlc19kaWdpdHMgPSByZXN1bHQtPmRpZ2l0czsKKwkJZm9yIChpID0gcmVzX25kaWdpdHMg LSAxOyBpID49IDA7IGktLSkKKwkJeworCQkJcmVzX2RpZ2l0c1tpXSA9IHByb2R1Y3QgJSBO QkFTRTsKKwkJCXByb2R1Y3QgLz0gTkJBU0U7CisJCX0KKwkJQXNzZXJ0KHByb2R1Y3QgPT0g MCk7CisKKwkJLyoKKwkJICogRmluYWxseSwgcm91bmQgdGhlIHJlc3VsdCB0byB0aGUgcmVx dWVzdGVkIHByZWNpc2lvbi4KKwkJICovCisJCXJlc3VsdC0+d2VpZ2h0ID0gcmVzX3dlaWdo dDsKKwkJcmVzdWx0LT5zaWduID0gcmVzX3NpZ247CisKKwkJLyogUm91bmQgdG8gdGFyZ2V0 IHJzY2FsZSAoYW5kIHNldCByZXN1bHQtPmRzY2FsZSkgKi8KKwkJcm91bmRfdmFyKHJlc3Vs dCwgcnNjYWxlKTsKKworCQkvKiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB6ZXJvZXMg Ki8KKwkJc3RyaXBfdmFyKHJlc3VsdCk7CisKKwkJcmV0dXJuOworCX0KKwogCS8qCiAJICog V2UgZG8gdGhlIGFyaXRobWV0aWMgaW4gYW4gYXJyYXkgImRpZ1tdIiBvZiBzaWduZWQgaW50 J3MuICBTaW5jZQogCSAqIElOVF9NQVggaXMgbm90aWNlYWJseSBsYXJnZXIgdGhhbiBOQkFT RSpOQkFTRSwgdGhpcyBnaXZlcyB1cyBoZWFkcm9vbQotLSAKMi40NS4xCgo= --42225dcbc1f749e78ec4f87cac5b414e--