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 1rrI9v-00Ghbc-SW for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Apr 2024 13:57:12 +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 1rrI9v-00G7ZF-0C for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Apr 2024 13:57:11 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rrI8R-00G3fL-Cn for pgsql-hackers@lists.postgresql.org; Mon, 01 Apr 2024 13:55:40 +0000 Received: from wfout3-smtp.messagingengine.com ([64.147.123.146]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rrI8M-007cVk-UF for pgsql-hackers@lists.postgresql.org; Mon, 01 Apr 2024 13:55:37 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailfout.west.internal (Postfix) with ESMTP id EBEA81C00090; Mon, 1 Apr 2024 09:55:32 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Mon, 01 Apr 2024 09:55:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to: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=1711979732; x= 1712066132; bh=wcos6YUvWxJg6CcRUOWv+om8XuMp8h+sUus7oBLqNUw=; b=k PC/ZQCwmEZ73TBVBLhgPt/XjQZMkrHaivvLtRlQeAdEHEiBM4+9WbOB2Q6wMRdtA I8oQVhBR2yQAoB2W5StmvvJPH+Er1Gt6XkTUOawXUmXDr5wqDS7RzkioQfkEHEvC zq8BJ7iQGJdQKEdmkDU/DftoQfIOU69fRSTwsV2SjYoXhOOIb8bUd5Q6iYhecPVT chELdLn0aZOyS1vON/53N4lS3qIia/Naj2dIfMPDStSDQ6KLahBFkzqtGWn6O80j tQN95nKxirbUy34XgxNC0BP9AbqquYvrcxxc+0FkUczYnxfn6ArqjYM7/IvSL6L8 SoUN3Z63J6xxuOqOaOcbA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrudeftddgjedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkgggtugfgjgesthekredttddtjeenucfhrhhomheptehlvhgr rhhoucfjvghrrhgvrhgruceorghlvhhhvghrrhgvsegrlhhvhhdrnhhoqdhiphdrohhrgh eqnecuggftrfgrthhtvghrnhepvdektdffudfftdffffehfffhjeejhffgieeuueekjeek fffgudffhfduffffueevnecuffhomhgrihhnpegvnhhtvghrphhrihhsvggusgdrtghomh enucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpegrlhhv hhgvrhhrvgesrghlvhhhrdhnohdqihhprdhorhhg X-ME-Proxy: Feedback-ID: ia2694551:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 1 Apr 2024 09:55:31 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alvh.no-ip.org; s=schmee; t=1711969572; bh=3glycDI9xKIplo8bvYS7GapJ5ayHNTgB0LHWWD0EuH8=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=S498rq9X5SdFM5YbCxWXNM7QPOozQ5r6V/tlef7ar1xAtJX/1e8e4JnE157PoZZmw OP7NZXm4eGk3dwnA1Rnuk+HcTDkf0XxIQuV4vnAjQK/Gou3VXzBoA9ZdrAHwHKzhkB kMYdnxg27lCFvZOhXOQLkVCwUL3feoDP62170GoaRbfGo7fpfIhMe5WkcPpWQNssG/ ORMNEeF801tIJVDQb64w9GIIKlW74FWHeBxqHUHtkPxtThpdTEVQet92N6Q+r47TJ9 Tv3Nl0Wlpdu/4dE8CPkd24hFIygY0zAGGYFjPzDTHOdYPsdrX+mw6EeVzAgu4duFKY N3GtFkVGf9i9Q== Received: by schmee.alvh.no-ip.org (Postfix, from userid 1000) id 8CD9141E; Mon, 1 Apr 2024 13:06:12 +0200 (CEST) Date: Mon, 1 Apr 2024 13:06:12 +0200 From: Alvaro Herrera To: Nathan Bossart Cc: "Amonson, Paul D" , Tom Lane , David Rowley , Andres Freund , "Shankaran, Akash" , Noah Misch , Matthias van de Meent , "pgsql-hackers@lists.postgresql.org" Subject: Re: Popcount optimization using AVX512 Message-ID: <202404011106.y4fci35kzdqt@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240401011708.GA2128739@nathanxps13> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 2024-Mar-31, Nathan Bossart wrote: > +uint64 > +pg_popcount_avx512(const char *buf, int bytes) > +{ > + uint64 popcnt; > + __m512i accum = _mm512_setzero_si512(); > + > + for (; bytes >= sizeof(__m512i); bytes -= sizeof(__m512i)) > + { > + const __m512i val = _mm512_loadu_si512((const __m512i *) buf); > + const __m512i cnt = _mm512_popcnt_epi64(val); > + > + accum = _mm512_add_epi64(accum, cnt); > + buf += sizeof(__m512i); > + } > + > + popcnt = _mm512_reduce_add_epi64(accum); > + return popcnt + pg_popcount_fast(buf, bytes); > +} Hmm, doesn't this arrangement cause an extra function call to pg_popcount_fast to be used here? Given the level of micro-optimization being used by this code, I would have thought that you'd have tried to avoid that. (At least, maybe avoid the call if bytes is 0, no?) -- Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/ "El Maquinismo fue proscrito so pena de cosquilleo hasta la muerte" (Ijon Tichy en Viajes, Stanislaw Lem)