From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 216AE4A993 for ; Thu, 29 May 2025 21:38:34 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 7F3D668DCEA; Fri, 30 May 2025 00:38:10 +0300 (EEST) Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03olkn2084.outbound.protection.outlook.com [40.92.59.84]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 18D9668DCE2 for ; Fri, 30 May 2025 00:38:07 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LbNkFth8j+CypJmBw6TBabpk4Fi03CyWypfxo3RKj6LIJJ2b2HsFY5Alz05h9gpR3M5rlRQKehGFqMYaYz9khzyFji4wUPnDjBOx2cCBJf1T9QBZe9MGItjIeyVGx/9coHaVl/uyA87P2H1yFAtUiVt/H3VEPkqJeixxXqFrsP+zZHSYrfy4q2F+4GTJoKRX+nx2zLtdXzUJnq58m71wo18MbBuUYDnR1ULKxNgYe1p4/0XoxbpUv/LUUor3/u9Cv4TlCN3bW8ycZZT51S+Iyx/QUXzmXh3WNwxO+JbSFeaPlInssGoHZeMwtsx/1/JjUlRS8HFL68fF1VanX5EpAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wU4YgOBjFVb+9YUPC0WfpF1MAKQYCQYV4ZfC1cKhqgg=; b=Ye4GxKig1cL0CY1Zw206SSlaTGDF+yBzFg/0XDxWeivt5EoeI7Dib2Zr/ebNsfMkInQv+o7fg2U4KSPPQij0r9P27nW6jYdm4ziH+wrxTpLEtR7D97zRJNcI0tUtRlbIJZ1adxdG+G0UvUW7c3jYclCYjkA+y592eLiR8NC1gz3rVJ5kBu0+cV763eMSpUc64XoyYMbJt7PMPTBIBGVXrpDdYsQSZmPr9fCv8zgp8BxkyXsCAvVcy4ZZvDdx3vuQdf/gzuTHxMe4dYpqAkzt3yYdX4EPiyWGmBX8btVg/6tPJ7jKHobdrnScbNgv11TGhsjP+UDrBuJU5sMPLluNcw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wU4YgOBjFVb+9YUPC0WfpF1MAKQYCQYV4ZfC1cKhqgg=; b=RAt55W2bSOWgfek2+zNfyldUnVdRohvexTU1cyDZAZ1EdtRRn/6i68/UE395vtQ6dCjXgY/dMlU1myavjnj8PnUlCPNYuZSOdKFrHrPkWpbNX5bjSpOFm3o6yBYCb5KYHvO42DMRWITshZqxxUo2nDslUzCjGCQHBR0OHCA9N18CNjjhrpZX2NTugRhBAgMI+NlD47guTUjtNrW8WoL3pSGXqq4bhEcuGy4N0x6sAw/6kZmfY3C2n153n9mTr9FyL2AENsrsDpAfAMI4lke6mEasRd76DtJsOrq+brzBnm/vV8ahoCHBjAggmVnsrOvnTT62w44aakd21lLv3WhMCg== Received: from DBAP193MB0956.EURP193.PROD.OUTLOOK.COM (2603:10a6:10:1c5::19) by DU2P193MB2211.EURP193.PROD.OUTLOOK.COM (2603:10a6:10:2fe::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.31; Thu, 29 May 2025 21:37:56 +0000 Received: from DBAP193MB0956.EURP193.PROD.OUTLOOK.COM ([fe80::ed13:9f9d:e088:ae31]) by DBAP193MB0956.EURP193.PROD.OUTLOOK.COM ([fe80::ed13:9f9d:e088:ae31%3]) with mapi id 15.20.8769.022; Thu, 29 May 2025 21:37:56 +0000 From: Dmitriy Kovalenko To: ffmpeg-devel@ffmpeg.org Date: Thu, 29 May 2025 23:34:24 +0200 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250529213746.53845-1-dmtr.kovalenko@outlook.com> References: <20250529213746.53845-1-dmtr.kovalenko@outlook.com> X-ClientProxiedBy: AM0PR10CA0086.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:15::39) To DBAP193MB0956.EURP193.PROD.OUTLOOK.COM (2603:10a6:10:1c5::19) X-Microsoft-Original-Message-ID: <20250529213746.53845-3-dmtr.kovalenko@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DBAP193MB0956:EE_|DU2P193MB2211:EE_ X-MS-Office365-Filtering-Correlation-Id: e6d52115-2a2d-4dbc-8672-08dd9ef91310 X-MS-Exchange-SLBlob-MailProps: Cq7lScuPrnoSu68Y5FdRDlCPOBk43FEt2iqEIybQV9F+NUFB9z0jdGMmw03st5PqYwXYmBAbePKG94WGS629rR18Qi8WAx8UTNwo8D1tekoIAZaDEvax/ua/qVdU3nfkHg1JSp69p9MZ3nAygPlpthQodByIGN7Km8Xa1rfBKI6tL50G31TTMfb17G0oXBxwoxsf3RRDrc1qxYSUfAMEIH5oPVCYNBDRTcXaToowhsGsufstEzINOWQm/YYiFkHoEwvCOoMX/BOvtysrr/nAVqLQqi+y3anaI6GX6J1xwbjZGRDjKE/m8AZ0IG0VGQAJIjqTAz0igXNDMqtJtP5DpO1JKEXwtnWdLjEd6XfdlA9gsoVgrEK7FImb3xR8Bn/QotrIEU0w9QxLVt0X4fvFY4IyvN6WWRT8bGHZjt2E86Iniy/7xVpu5mGSv0IBJMs1lu/v6AdBYrgdssRDCCBh9KLw/gpeSI5VmrUqMvg+sBLzAxx31PmQifNAV2m2Ej/vWBv+RO9wh6rnRv2MA83jqKYpKZkVEabvLq/WQDs9oOqz1Bt8A6q3JItBgiYUbSshqWj8PqoPtPzQ87Dj/Uq27xYr7tA4qG5x1L+Nw1OMFCEt8RGRWs1HdqKhtwxz5qu47kbgDs9tAu9eSC4N/y3QxFZHSrvjH8pOVBVz752F1gnyjkQarqD80jwI58lDqE5rpnaN63j0mekVw1wmbxtfjscEqrc+ryzz7RuUvJ+QGil8yNsesaDOljGUo/YlHKkmDcy7KhlUf6M= X-Microsoft-Antispam: BCL:0; ARA:14566002|19110799006|7092599006|8060799009|15080799009|461199028|5072599009|440099028|3412199025|1710799026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?+m8gnfqe+WpYyYx5VlAr36o5vu0ZJO+JJoVujZilxJvCvQ+z8PZQ9EM+XMbC?= =?us-ascii?Q?pl5iS/gzfq+y4x1TP78hAb34UHH4h+yOKgEMO8EtzXzvl2pBc5Mm90jZkbKA?= =?us-ascii?Q?1vfPniphvw38i9Ha5ytHSr7VO0jkPql5TzIDr3z+5kyM0Zqp9QhSSPDvlcPY?= =?us-ascii?Q?3/2II//9TAV/gDHYYstjNF3KCxqU0UYG4ist8EiBAO1hkLgkfxcmJ2Zd0j96?= =?us-ascii?Q?YnaUCmQJCnBTKP+o8hHYybn9rPJfWGjdhHG4XQ9xvgmKQbzlVo57/FELXjni?= =?us-ascii?Q?dbOPyEaN5vHqGxBge5T2cXXWOTDA9x5sZnfxdtB871oQ3q4MbNhKklsFk/jP?= =?us-ascii?Q?QUNZQ99jYZYXGOPxE00me2iUDZT7ZFk6CxQphq45tsSmh9nfHBmffaGrl1p3?= =?us-ascii?Q?f2qWf2LzPB1Dim2hr/LZOnGtjDFkJ0oAljxnOIzSRcbo174iAFO7Gvn2LhUI?= =?us-ascii?Q?P2LY954HgFtSHa1tikYlzMmVe/GAl8XLUAB426LRl1ouUWmKjWxsRHE00sC6?= =?us-ascii?Q?lL7OE4uZvE7SofPP8YIn9f0y6uKgBca17fNCkQO98JsyM2k2KTmJU9wxnrmy?= =?us-ascii?Q?htasirR+RwhwwQ+Skpfn+qzyJEtLdpR8slXlPic29pIaBfnrA3kQfpicUzFQ?= =?us-ascii?Q?/5qY9dwrJ2eKIyNr7waO+WK0z+22akK16EDUW6efJp0MjNvykmD/pgnnnajV?= =?us-ascii?Q?ukm+ouLTlugrDI+dxctAGkY9yzHpOni2lgMwklchaf0K1hlDZ7oXqwCfXBHj?= =?us-ascii?Q?MSYVRMlmuGIL3z5RehSJm6wN7mst+incDfw91QQaqt8QGO8vNsVTq/4/hTYv?= =?us-ascii?Q?i+Ledf3a/HfTuYQGGglWCL0tSijgpuQ1GXUI2qXwdkwzCSgfEVilRiDNMsAk?= =?us-ascii?Q?47lue2WpBfAs0G4JmjogxUWEtj4cP5FkFdTPH4+2PEixFFWnrlTlKPHs/2c/?= =?us-ascii?Q?ApYTlcQlreTlSILIW0dA2Y+NL9CEaRx+y+fLG/RguxREGMzDHeJsneNaUaw9?= =?us-ascii?Q?aH8UdLhQxiEsDHiJ33lQx3u9+tD/fUE4pY2Ru3pbfUqAwYt3vwQpYLJlzS5h?= =?us-ascii?Q?WMF1htwTQ147Yd90kMFCQC1Oz0mdn8yDpg5KGovjq0JK3JpflUzmeydWbarL?= =?us-ascii?Q?j/PC+APMBfNxC93MlI2jEzwQPUQtm5bSVA=3D=3D?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?S9QV3CfThODpQRDonVd1zz0sQ1uko8pyTIKj1aSdPAcKbOQWOG8YQgr4j7SA?= =?us-ascii?Q?YLFlIqPdY24sVKu1L5Ub00PLB9A5kRCFPnmGGDmyUmGlSAKNUB/QjXukfrrD?= =?us-ascii?Q?Tp62roi687Ttr8cpG19vNHM6LfUy3p6aFDzjL7HTSL5wbHJu4ECUryo4chMR?= =?us-ascii?Q?NJCw2l5AaDqLEFZpXeTYHTeKjfslKjENY5+teZRG14iqL59scJPGUzpwwSmH?= =?us-ascii?Q?E9EZ3YPoKjwVJo95+P8EwGvVrr47PtUBUTE3arBSZsHHKeGi3Lp6weFhQ9uv?= =?us-ascii?Q?teQlOnJJx5rddG56kPG7PQux/UXYVGWr1fkG4BTOXgwVMvbCymXFnCmUsXm5?= =?us-ascii?Q?X/Iyg2RxzmmYsNaC4MMVJlZmLzRzorRaSBEz8W7Zk5d6OlSIHaTW0oNu3pou?= =?us-ascii?Q?gnhkPDktLXgmWyAJzbVAVbMfouau3+BsdN2yBhDX7TSQmTz9KQmisfDhxWD6?= =?us-ascii?Q?Bwx39Bhq/ZDyyKgXw0uHekO31sHRuJ2M6dbfH6Lld0HvQuhnj/wVXot6zWAX?= =?us-ascii?Q?AFHa1c+4q7k+mRYJiH/I1WbBw/TSJOTVghG0VehletkM0lhX1MHMK8tFkJb7?= =?us-ascii?Q?QEqWZwJKmh2XWtmlobxToGFUTzgjRopTNRqRMg2uUjGtorYoi3ssTeZFIYDb?= =?us-ascii?Q?fv5+/E2uO71WBCCllLPY2Gpit4KTNr1k2PM75jDYd7kiZmEy1ojqaFDGZCnw?= =?us-ascii?Q?KBGFUTOkgvjQ+lODdhZeuK9S5lSfiUKX2476N7y9TVEc4aY0bGEDHRjGcxae?= =?us-ascii?Q?ZY5H/KzzeP6MiSQmSFreuR7Ix/9Vb/wNYASRuyZqVcfDDnyVVnpcStrFjMEd?= =?us-ascii?Q?LbN1dG/GynbB0ayZZ7WWZmCC/4oOM1mkFQDfXG5D3/Zeux6t1JslduKgWq9+?= =?us-ascii?Q?oEkbaXZSsjNypa+fz24yuUPs4JJiQatwYVKMAf8MMCzM1MbTjQKhtAKYVozt?= =?us-ascii?Q?cSEKHQcrJD3CAacLtGGffwm8HqFxVSf5FZWoS/xJ7ESMsmbveJ9CMxQKzfps?= =?us-ascii?Q?/v1nlNZANredI+vzidc0L5/ds83D2ICo/aQXkRFAid+B0ko05Q2eJiT+IKTH?= =?us-ascii?Q?NTDKkH4HJOPYjhH+LIwMlpKcn4K2bG3PyzXeq6fSvoEUm2mfO1+Qkox2XJHu?= =?us-ascii?Q?EWVmNSrB0Xq+x1RtxOxcppAI2ivgvxjzUt+aTlKdCHXH0ADyB3X7Tim+9qbE?= =?us-ascii?Q?l/L6OxD1+KzfDw8eAlPvaaDUrIEgnJ9126UMu2dVRmBCQAqjUUNOabQ+JRcS?= =?us-ascii?Q?GxirCUUoRG6Uf3eAKkrl?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e6d52115-2a2d-4dbc-8672-08dd9ef91310 X-MS-Exchange-CrossTenant-AuthSource: DBAP193MB0956.EURP193.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2025 21:37:56.4563 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2P193MB2211 Subject: [FFmpeg-devel] [PATCH v2 2/2] swscale: Neon rgb_to_yuv_half process 32 pixels at a time X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Dmitriy Kovalenko Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This patch integrates so called double bufferring when we are loading 2 batch of elements at a time and then processing them in parallel. On the moden arm processors especially Apple Silicon it gives a visible benefit, for subsampled pixel processing it is especially nice because it allows to read elements w/ 2 instructions and write with a single one (especially visible on a platforms with slower memory like ios). Including the previous patch in a stack on macbook pro m4 max rgb_to_yuv_half in checkasm goes up 2x of the c version --- libswscale/aarch64/input.S | 105 ++++++++++++++++++++++++++++--------- 1 file changed, 80 insertions(+), 25 deletions(-) diff --git a/libswscale/aarch64/input.S b/libswscale/aarch64/input.S index d61f8b3dba..00aab26ce1 100644 --- a/libswscale/aarch64/input.S +++ b/libswscale/aarch64/input.S @@ -197,40 +197,94 @@ function ff_\fmt_rgb\()ToUV_half_neon, export=1 ldp w12, w13, [x6, #20] // w12: bu, w13: rv ldp w14, w15, [x6, #28] // w14: gv, w15: bv 4: - cmp w5, #8 rgb_set_uv_coeff half=1 - b.lt 2f -1: // load 16 pixels and prefetch memory for the next block + + cmp w5, #16 + b.lt 2f // Go directly to scalar if < 16 + +1: .if \element == 3 - ld3 { v16.16b, v17.16b, v18.16b }, [x3], #48 - prfm pldl1strm, [x3, #48] + ld3 { v16.16b, v17.16b, v18.16b }, [x3], #48 // First 16 pixels + ld3 { v26.16b, v27.16b, v28.16b }, [x3], #48 // Second 16 pixels + prfm pldl1keep, [x3, #96] .else - ld4 { v16.16b, v17.16b, v18.16b, v19.16b }, [x3], #64 - prfm pldl1strm, [x3, #64] + ld4 { v16.16b, v17.16b, v18.16b, v19.16b }, [x3], #64 // First 16 pixels + ld4 { v26.16b, v27.16b, v28.16b, v29.16b }, [x3], #64 // Second 16 pixels + prfm pldl1keep, [x3, #128] .endif - + + // **Sum adjacent pixel pairs** .if \alpha_first - uaddlp v21.8h, v19.16b // v21: summed b pairs - uaddlp v20.8h, v18.16b // v20: summed g pairs - uaddlp v19.8h, v17.16b // v19: summed r pairs + uaddlp v21.8h, v19.16b // Block 1: B sums + uaddlp v20.8h, v18.16b // Block 1: G sums + uaddlp v19.8h, v17.16b // Block 1: R sums + uaddlp v31.8h, v29.16b // Block 2: B sums + uaddlp v30.8h, v28.16b // Block 2: G sums + uaddlp v29.8h, v27.16b // Block 2: R sums .else - uaddlp v19.8h, v16.16b // v19: summed r pairs - uaddlp v20.8h, v17.16b // v20: summed g pairs - uaddlp v21.8h, v18.16b // v21: summed b pairs + uaddlp v19.8h, v16.16b // Block 1: R sums + uaddlp v20.8h, v17.16b // Block 1: G sums + uaddlp v21.8h, v18.16b // Block 1: B sums + uaddlp v29.8h, v26.16b // Block 2: R sums + uaddlp v30.8h, v27.16b // Block 2: G sums + uaddlp v31.8h, v28.16b // Block 2: B sums .endif - mov v22.16b, v6.16b // U first half - mov v23.16b, v6.16b // U second half - mov v24.16b, v6.16b // V first half - mov v25.16b, v6.16b // V second half + // init accumulatos for both blocks + mov v7.16b, v6.16b // U_low + mov v8.16b, v6.16b // U_high + mov v9.16b, v6.16b // V_low + mov v10.16b, v6.16b // V_high + mov v11.16b, v6.16b // U_low + mov v12.16b, v6.16b // U_high + mov v13.16b, v6.16b // V_low + mov v14.16b, v6.16b // V_high + + smlal v7.4s, v0.4h, v19.4h // U += ru * r (0-3) + smlal v9.4s, v3.4h, v19.4h // V += rv * r (0-3) + smlal v11.4s, v0.4h, v29.4h // U += ru * r (0-3) + smlal v13.4s, v3.4h, v29.4h // V += rv * r (0-3) + + smlal2 v8.4s, v0.8h, v19.8h // U += ru * r (4-7) + smlal2 v10.4s, v3.8h, v19.8h // V += rv * r (4-7) + smlal2 v12.4s, v0.8h, v29.8h // U += ru * r (4-7) + smlal2 v14.4s, v3.8h, v29.8h // V += rv * r (4-7) + + smlal v7.4s, v1.4h, v20.4h // U += gu * g (0-3) + smlal v9.4s, v4.4h, v20.4h // V += gv * g (0-3) + smlal v11.4s, v1.4h, v30.4h // U += gu * g (0-3) + smlal v13.4s, v4.4h, v30.4h // V += gv * g (0-3) + + smlal2 v8.4s, v1.8h, v20.8h // U += gu * g (4-7) + smlal2 v10.4s, v4.8h, v20.8h // V += gv * g (4-7) + smlal2 v12.4s, v1.8h, v30.8h // U += gu * g (4-7) + smlal2 v14.4s, v4.8h, v30.8h // V += gv * g (4-7) + + smlal v7.4s, v2.4h, v21.4h // U += bu * b (0-3) + smlal v9.4s, v5.4h, v21.4h // V += bv * b (0-3) + smlal v11.4s, v2.4h, v31.4h // U += bu * b (0-3) + smlal v13.4s, v5.4h, v31.4h // V += bv * b (0-3) + + smlal2 v8.4s, v2.8h, v21.8h // U += bu * b (4-7) + smlal2 v10.4s, v5.8h, v21.8h // V += bv * b (4-7) + smlal2 v12.4s, v2.8h, v31.8h // U += bu * b (4-7) + smlal2 v14.4s, v5.8h, v31.8h // V += bv * b (4-7) + + sqshrn v16.4h, v7.4s, #10 // U (0-3) + sqshrn v17.4h, v9.4s, #10 // V (0-3) + sqshrn v22.4h, v11.4s, #10 // U (0-3) + sqshrn v23.4h, v13.4s, #10 // V (0-3) + + sqshrn2 v16.8h, v8.4s, #10 // U (0-7) + sqshrn2 v17.8h, v10.4s, #10 // V (0-7) + sqshrn2 v22.8h, v12.4s, #10 // U (0-7) + sqshrn2 v23.8h, v14.4s, #10 // V (0-7) + + stp q16, q22, [x0], #32 // Store all 16 U values + stp q17, q23, [x1], #32 // Store all 16 V values - rgb_to_uv_interleaved_product v19, v20, v21, v0, v1, v2, v3, v4, v5, v22, v23, v24, v25, v16, v17, #10 - - str q16, [x0], #16 // store dst_u - str q17, [x1], #16 // store dst_v - - sub w5, w5, #8 // width -= 8 - cmp w5, #8 // width >= 8 ? + sub w5, w5, #16 // width -= 16 + cmp w5, #16 // width >= 16 ? b.ge 1b cbz w5, 3f // No pixels left? Exit @@ -444,3 +498,4 @@ endfunc DISABLE_DOTPROD #endif + -- 2.49.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".