Skip to content

[codex] fix ANN OpenMP build budget and add concurrency test#61313

Merged
airborne12 merged 2 commits intoapache:masterfrom
zhiqiang-hhhh:codex-fix-ann-omp-budget-limit
Mar 24, 2026
Merged

[codex] fix ANN OpenMP build budget and add concurrency test#61313
airborne12 merged 2 commits intoapache:masterfrom
zhiqiang-hhhh:codex-fix-ann-omp-budget-limit

Conversation

@zhiqiang-hhhh
Copy link
Copy Markdown
Contributor

Summary

This PR fixes ANN index build OpenMP thread budgeting and adds a BE unit test for the concurrency cap.

Problem

ScopedOmpThreadBudget computed available budget from config::omp_threads_limit directly. With the default omp_threads_limit = -1, each builder effectively reserved 1 thread and did not follow the documented auto behavior (80% of CPU cores). In addition, concurrent builders could overrun the intended global limit because there was no wait/coordination when the budget was exhausted.

Root Cause

In faiss_ann_index.cpp:

  • The constructor used config::omp_threads_limit directly instead of the auto-resolved limit from get_omp_threads_limit().
  • No blocking mechanism existed when all OpenMP budget was already in use.

Fix

  • Use get_omp_threads_limit() as the actual global limit for budgeting.
  • Add a condition variable to block builders until at least one OpenMP slot is available.
  • Keep the existing policy of reserving up to half of remaining budget (minimum 1).
  • Add concise comments to explain wait/wakeup behavior.

Test

  • Added VectorSearchTest.OmpThreadBudgetNeverExceedsLimit in be/test/storage/index/ann/faiss_vector_index_test.cpp.
  • The test sets config::omp_threads_limit = 1, runs multiple concurrent ANN add() builds, samples ann_index_build_index_threads, and asserts peak usage never exceeds 1 and finally returns to 0.

Validation

  • Local compilation/test run was intentionally skipped per request.

@Thearas
Copy link
Copy Markdown
Contributor

Thearas commented Mar 13, 2026

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@zhiqiang-hhhh
Copy link
Copy Markdown
Contributor Author

run buildall

@doris-robot
Copy link
Copy Markdown

TPC-H: Total hot run time: 26750 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 6589fdda4da3c7df9bbbdca3384d6b96090c4663, data reload: false

------ Round 1 ----------------------------------
orders	Doris	NULL	NULL	0	0	0	NULL	0	NULL	NULL	2023-12-26 18:27:23	2023-12-26 18:42:55	NULL	utf-8	NULL	NULL	
============================================
q1	17623	4535	4303	4303
q2	q3	10644	815	518	518
q4	4685	372	255	255
q5	7541	1202	996	996
q6	175	171	145	145
q7	774	837	665	665
q8	9314	1454	1322	1322
q9	4801	4704	4737	4704
q10	6244	1900	1664	1664
q11	479	267	245	245
q12	699	567	473	473
q13	18030	2934	2190	2190
q14	232	237	218	218
q15	q16	732	730	672	672
q17	705	847	438	438
q18	6102	5353	5159	5159
q19	1118	959	596	596
q20	534	497	391	391
q21	4480	1861	1428	1428
q22	343	368	414	368
Total cold run time: 95255 ms
Total hot run time: 26750 ms

----- Round 2, with runtime_filter_mode=off -----
orders	Doris	NULL	NULL	150000000	42	6422171781	NULL	22778155	NULL	NULL	2023-12-26 18:27:23	2023-12-26 18:42:55	NULL	utf-8	NULL	NULL	
============================================
q1	4778	4543	4575	4543
q2	q3	3844	4342	3820	3820
q4	863	1193	769	769
q5	4088	4406	4361	4361
q6	185	178	141	141
q7	1756	1641	1543	1543
q8	2504	2681	2605	2605
q9	7915	7249	7616	7249
q10	3772	4016	3581	3581
q11	522	439	431	431
q12	498	577	466	466
q13	2752	3151	2328	2328
q14	280	287	276	276
q15	q16	708	804	736	736
q17	1206	1311	1402	1311
q18	7118	6862	6619	6619
q19	899	927	891	891
q20	2060	2240	2086	2086
q21	4004	3549	3320	3320
q22	479	417	380	380
Total cold run time: 50231 ms
Total hot run time: 47456 ms

@doris-robot
Copy link
Copy Markdown

TPC-DS: Total hot run time: 168033 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 6589fdda4da3c7df9bbbdca3384d6b96090c4663, data reload: false

query5	4346	653	500	500
query6	356	241	217	217
query7	4231	502	266	266
query8	344	250	242	242
query9	8691	2751	2763	2751
query10	508	394	354	354
query11	7031	5108	4895	4895
query12	183	125	124	124
query13	1271	451	386	386
query14	5712	3688	3445	3445
query14_1	2860	2857	2822	2822
query15	203	197	176	176
query16	990	468	411	411
query17	1107	717	612	612
query18	2443	450	352	352
query19	217	215	182	182
query20	137	128	126	126
query21	214	133	111	111
query22	13269	14058	14898	14058
query23	16339	15875	15688	15688
query23_1	15557	15570	15380	15380
query24	7250	1600	1214	1214
query24_1	1228	1225	1239	1225
query25	546	442	398	398
query26	1221	266	147	147
query27	2775	480	288	288
query28	4495	1852	1850	1850
query29	800	556	465	465
query30	295	222	187	187
query31	1006	924	881	881
query32	82	70	73	70
query33	553	315	271	271
query34	904	858	530	530
query35	638	677	602	602
query36	1073	1177	943	943
query37	125	95	81	81
query38	2906	2914	2835	2835
query39	872	845	823	823
query39_1	805	788	790	788
query40	244	151	135	135
query41	62	58	59	58
query42	255	259	254	254
query43	241	251	224	224
query44	
query45	201	193	183	183
query46	876	976	610	610
query47	2118	2155	2512	2155
query48	309	309	223	223
query49	625	467	374	374
query50	674	281	210	210
query51	4074	4041	4065	4041
query52	256	270	252	252
query53	290	334	277	277
query54	300	266	268	266
query55	92	83	82	82
query56	310	315	308	308
query57	1959	1532	1550	1532
query58	283	275	267	267
query59	2791	2971	2771	2771
query60	346	339	331	331
query61	147	149	146	146
query62	623	594	549	549
query63	306	279	270	270
query64	4908	1245	973	973
query65	
query66	1458	450	349	349
query67	24304	24359	24311	24311
query68	
query69	408	313	286	286
query70	948	938	863	863
query71	338	308	300	300
query72	2822	2684	2390	2390
query73	530	542	312	312
query74	9642	9576	9446	9446
query75	2869	2751	2486	2486
query76	2289	1040	669	669
query77	363	374	307	307
query78	11013	11241	10537	10537
query79	1104	825	594	594
query80	1491	613	518	518
query81	556	258	218	218
query82	1286	149	118	118
query83	364	264	242	242
query84	243	117	92	92
query85	1052	492	444	444
query86	429	298	335	298
query87	3164	3168	3019	3019
query88	3516	2648	2643	2643
query89	426	366	343	343
query90	1943	196	174	174
query91	168	162	132	132
query92	85	69	70	69
query93	895	853	498	498
query94	638	323	293	293
query95	584	392	319	319
query96	651	520	229	229
query97	2429	2483	2389	2389
query98	237	221	221	221
query99	998	955	912	912
Total cold run time: 249581 ms
Total hot run time: 168033 ms

@zhiqiang-hhhh zhiqiang-hhhh marked this pull request as ready for review March 16, 2026 08:05
@zhiqiang-hhhh zhiqiang-hhhh force-pushed the codex-fix-ann-omp-budget-limit branch from 6589fdd to e4c203c Compare March 16, 2026 08:07
@zhiqiang-hhhh
Copy link
Copy Markdown
Contributor Author

run buildall

@doris-robot
Copy link
Copy Markdown

TPC-H: Total hot run time: 27171 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit e4c203c609b08f00b7e2a17effb1166dfcd89163, data reload: false

------ Round 1 ----------------------------------
orders	Doris	NULL	NULL	0	0	0	NULL	0	NULL	NULL	2023-12-26 18:27:23	2023-12-26 18:42:55	NULL	utf-8	NULL	NULL	
============================================
q1	17631	4552	4294	4294
q2	q3	10636	830	557	557
q4	4713	350	247	247
q5	7732	1217	1025	1025
q6	175	176	146	146
q7	815	853	674	674
q8	10139	1511	1343	1343
q9	5696	4810	4747	4747
q10	6340	1942	1671	1671
q11	466	264	245	245
q12	744	591	469	469
q13	18073	2947	2209	2209
q14	233	235	216	216
q15	q16	744	758	677	677
q17	752	862	425	425
q18	6367	5387	5360	5360
q19	1236	991	587	587
q20	548	515	374	374
q21	4574	2235	1606	1606
q22	406	343	299	299
Total cold run time: 98020 ms
Total hot run time: 27171 ms

----- Round 2, with runtime_filter_mode=off -----
orders	Doris	NULL	NULL	150000000	42	6422171781	NULL	22778155	NULL	NULL	2023-12-26 18:27:23	2023-12-26 18:42:55	NULL	utf-8	NULL	NULL	
============================================
q1	4784	4658	4560	4560
q2	q3	3929	4364	3810	3810
q4	875	1212	822	822
q5	4098	4448	4353	4353
q6	205	188	146	146
q7	1853	1646	1530	1530
q8	2544	2696	2652	2652
q9	7580	7558	7269	7269
q10	3758	4004	3649	3649
q11	514	424	425	424
q12	499	659	511	511
q13	2742	3195	2373	2373
q14	275	307	270	270
q15	q16	722	778	731	731
q17	1190	1364	1357	1357
q18	7184	6752	6669	6669
q19	956	935	948	935
q20	2076	2158	1963	1963
q21	4013	3531	3286	3286
q22	502	429	375	375
Total cold run time: 50299 ms
Total hot run time: 47685 ms

@doris-robot
Copy link
Copy Markdown

TPC-DS: Total hot run time: 169028 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit e4c203c609b08f00b7e2a17effb1166dfcd89163, data reload: false

query5	4344	626	522	522
query6	327	235	205	205
query7	4213	488	263	263
query8	347	241	229	229
query9	8712	2747	2763	2747
query10	505	392	334	334
query11	7010	5065	4908	4908
query12	188	135	122	122
query13	1256	447	335	335
query14	5784	3707	3452	3452
query14_1	2820	2806	2782	2782
query15	207	191	175	175
query16	958	479	475	475
query17	1052	725	608	608
query18	2434	448	353	353
query19	215	206	182	182
query20	136	127	127	127
query21	221	138	105	105
query22	13227	14089	14425	14089
query23	16089	15851	15903	15851
query23_1	15835	15723	15720	15720
query24	7165	1628	1240	1240
query24_1	1246	1246	1233	1233
query25	566	487	431	431
query26	1015	272	157	157
query27	2743	487	298	298
query28	4529	1875	1892	1875
query29	878	601	480	480
query30	299	234	191	191
query31	1001	954	851	851
query32	87	70	70	70
query33	519	320	291	291
query34	874	871	513	513
query35	640	681	604	604
query36	1099	1084	968	968
query37	137	95	80	80
query38	2918	2931	2871	2871
query39	871	828	818	818
query39_1	792	781	801	781
query40	230	156	143	143
query41	63	62	59	59
query42	264	249	254	249
query43	243	259	233	233
query44	
query45	203	192	186	186
query46	892	985	622	622
query47	2130	2152	2073	2073
query48	308	327	233	233
query49	630	454	385	385
query50	695	270	218	218
query51	4163	4109	4065	4065
query52	260	264	271	264
query53	291	344	282	282
query54	325	273	267	267
query55	95	90	83	83
query56	316	321	315	315
query57	1901	1734	1619	1619
query58	310	284	271	271
query59	2787	2982	2748	2748
query60	343	347	332	332
query61	154	149	151	149
query62	630	583	517	517
query63	311	277	268	268
query64	4981	1294	1003	1003
query65	
query66	1433	456	352	352
query67	24280	24252	24158	24158
query68	
query69	405	325	292	292
query70	978	897	950	897
query71	352	303	304	303
query72	2794	2650	2657	2650
query73	543	556	325	325
query74	9580	9567	9409	9409
query75	2889	2765	2503	2503
query76	2296	1032	701	701
query77	368	391	311	311
query78	10941	11086	10481	10481
query79	1740	778	573	573
query80	1342	647	576	576
query81	554	277	227	227
query82	1009	160	118	118
query83	342	266	254	254
query84	262	124	104	104
query85	976	543	446	446
query86	434	310	297	297
query87	3137	3095	3052	3052
query88	3561	2656	2661	2656
query89	428	378	344	344
query90	2025	179	174	174
query91	161	156	137	137
query92	85	74	72	72
query93	1012	833	496	496
query94	645	326	287	287
query95	576	401	317	317
query96	641	520	238	238
query97	2493	2496	2401	2401
query98	238	223	238	223
query99	1017	974	905	905
Total cold run time: 249697 ms
Total hot run time: 169028 ms

@zhiqiang-hhhh
Copy link
Copy Markdown
Contributor Author

run buildall

@doris-robot
Copy link
Copy Markdown

TPC-H: Total hot run time: 27368 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit b7e3b20d5de34d09070ed5f7aabb169163408bb0, data reload: false

------ Round 1 ----------------------------------
orders	Doris	NULL	NULL	0	0	0	NULL	0	NULL	NULL	2023-12-26 18:27:23	2023-12-26 18:42:55	NULL	utf-8	NULL	NULL	
============================================
q1	17633	4533	4313	4313
q2	q3	10637	785	527	527
q4	4674	352	248	248
q5	7557	1222	1019	1019
q6	179	174	147	147
q7	774	851	664	664
q8	9676	1488	1350	1350
q9	5223	4799	4692	4692
q10	6327	1921	1660	1660
q11	482	275	253	253
q12	766	588	473	473
q13	18068	2921	2193	2193
q14	227	240	215	215
q15	q16	738	734	678	678
q17	774	858	469	469
q18	6018	5434	5406	5406
q19	1454	977	625	625
q20	557	490	388	388
q21	4557	1875	1753	1753
q22	381	349	295	295
Total cold run time: 96702 ms
Total hot run time: 27368 ms

----- Round 2, with runtime_filter_mode=off -----
orders	Doris	NULL	NULL	150000000	42	6422171781	NULL	22778155	NULL	NULL	2023-12-26 18:27:23	2023-12-26 18:42:55	NULL	utf-8	NULL	NULL	
============================================
q1	4840	4597	4556	4556
q2	q3	3913	4339	3848	3848
q4	984	1229	806	806
q5	4082	4365	4436	4365
q6	193	174	140	140
q7	1801	1657	1599	1599
q8	2525	2765	2592	2592
q9	7596	7473	7614	7473
q10	3766	4022	3622	3622
q11	529	491	498	491
q12	501	614	479	479
q13	2755	3242	2342	2342
q14	276	295	277	277
q15	q16	704	773	727	727
q17	1192	1324	1357	1324
q18	7356	6810	6752	6752
q19	955	940	952	940
q20	2059	2135	1991	1991
q21	4002	3527	3372	3372
q22	457	435	397	397
Total cold run time: 50486 ms
Total hot run time: 48093 ms

@doris-robot
Copy link
Copy Markdown

TPC-DS: Total hot run time: 169081 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit b7e3b20d5de34d09070ed5f7aabb169163408bb0, data reload: false

query5	4342	623	512	512
query6	338	234	215	215
query7	4228	486	289	289
query8	345	259	232	232
query9	8696	2748	2736	2736
query10	551	404	358	358
query11	7021	5094	4892	4892
query12	190	137	133	133
query13	1277	480	349	349
query14	5834	3780	3490	3490
query14_1	2820	2792	2878	2792
query15	208	191	172	172
query16	984	472	376	376
query17	874	714	609	609
query18	2428	453	340	340
query19	215	210	186	186
query20	138	124	128	124
query21	217	143	112	112
query22	13285	14379	14360	14360
query23	16464	15793	15843	15793
query23_1	15807	15721	15872	15721
query24	7161	1608	1234	1234
query24_1	1243	1245	1231	1231
query25	588	503	463	463
query26	1254	261	153	153
query27	2779	488	300	300
query28	4474	1869	1877	1869
query29	902	596	514	514
query30	298	245	194	194
query31	1040	958	867	867
query32	91	74	74	74
query33	529	344	315	315
query34	891	892	540	540
query35	652	694	640	640
query36	1067	1129	967	967
query37	145	106	88	88
query38	3019	2866	2880	2866
query39	865	845	825	825
query39_1	799	781	799	781
query40	239	157	140	140
query41	70	66	62	62
query42	264	261	259	259
query43	248	255	216	216
query44	
query45	199	190	189	189
query46	873	985	605	605
query47	3545	2153	2082	2082
query48	319	330	236	236
query49	657	483	409	409
query50	731	291	220	220
query51	4047	4057	3961	3961
query52	258	270	256	256
query53	304	345	289	289
query54	298	276	273	273
query55	94	87	80	80
query56	320	316	311	311
query57	1924	1732	1500	1500
query58	284	281	271	271
query59	2771	2918	2765	2765
query60	352	347	317	317
query61	153	154	159	154
query62	641	596	540	540
query63	310	277	276	276
query64	5186	1286	1011	1011
query65	
query66	1496	453	357	357
query67	24186	24334	24252	24252
query68	
query69	405	315	280	280
query70	1016	978	951	951
query71	350	314	303	303
query72	2879	2726	2452	2452
query73	540	544	330	330
query74	9676	9580	9414	9414
query75	2861	2765	2461	2461
query76	2284	1036	696	696
query77	368	373	317	317
query78	10891	11109	10451	10451
query79	1095	809	564	564
query80	1339	647	558	558
query81	567	265	222	222
query82	1001	149	123	123
query83	341	263	252	252
query84	300	124	101	101
query85	910	503	449	449
query86	433	316	290	290
query87	3194	3132	3022	3022
query88	3542	2640	2625	2625
query89	428	377	350	350
query90	2001	175	173	173
query91	169	165	143	143
query92	77	78	72	72
query93	987	858	500	500
query94	635	325	288	288
query95	591	404	321	321
query96	650	506	226	226
query97	2453	2475	2376	2376
query98	229	220	222	220
query99	1022	995	943	943
Total cold run time: 251441 ms
Total hot run time: 169081 ms

@doris-robot
Copy link
Copy Markdown

BE UT Coverage Report

Increment line coverage 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 52.68% (19775/37536)
Line Coverage 36.23% (184586/509536)
Region Coverage 32.41% (142486/439635)
Branch Coverage 33.57% (62321/185634)

@hello-stephen
Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100% (0/0) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 71.50% (26271/36742)
Line Coverage 54.33% (275918/507822)
Region Coverage 51.42% (228135/443684)
Branch Coverage 52.93% (98505/186116)

@github-actions github-actions Bot added the approved Indicates a PR has been approved by one committer. label Mar 18, 2026
@github-actions
Copy link
Copy Markdown
Contributor

PR approved by at least one committer and no changes requested.

@github-actions
Copy link
Copy Markdown
Contributor

PR approved by anyone and no changes requested.

Copy link
Copy Markdown
Member

@airborne12 airborne12 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Clean and correct fix for the OMP thread budget bug.

Core fix: Properly uses get_omp_threads_limit() instead of raw config::omp_threads_limit (which defaults to -1), and adds condition_variable blocking to coordinate concurrent builders.

Minor suggestions (non-blocking):

  • Consider notify_one instead of notify_all in the destructor for slightly better wakeup precision.
  • The unit test covers the strict limit=1 boundary well; a follow-up test with limit>1 could verify the halving policy under normal concurrency.

@airborne12 airborne12 merged commit 664f942 into apache:master Mar 24, 2026
29 of 30 checks passed
github-actions Bot pushed a commit that referenced this pull request Mar 24, 2026
## Summary
This PR fixes ANN index build OpenMP thread budgeting and adds a BE unit
test for the concurrency cap.

## Problem
`ScopedOmpThreadBudget` computed available budget from
`config::omp_threads_limit` directly. With the default
`omp_threads_limit = -1`, each builder effectively reserved 1 thread and
did not follow the documented auto behavior (80% of CPU cores). In
addition, concurrent builders could overrun the intended global limit
because there was no wait/coordination when the budget was exhausted.

## Root Cause
In `faiss_ann_index.cpp`:
- The constructor used `config::omp_threads_limit` directly instead of
the auto-resolved limit from `get_omp_threads_limit()`.
- No blocking mechanism existed when all OpenMP budget was already in
use.

## Fix
- Use `get_omp_threads_limit()` as the actual global limit for
budgeting.
- Add a condition variable to block builders until at least one OpenMP
slot is available.
- Keep the existing policy of reserving up to half of remaining budget
(minimum 1).
- Add concise comments to explain wait/wakeup behavior.

## Test
- Added `VectorSearchTest.OmpThreadBudgetNeverExceedsLimit` in
`be/test/storage/index/ann/faiss_vector_index_test.cpp`.
- The test sets `config::omp_threads_limit = 1`, runs multiple
concurrent ANN `add()` builds, samples `ann_index_build_index_threads`,
and asserts peak usage never exceeds 1 and finally returns to 0.

## Validation
- Local compilation/test run was intentionally skipped per request.
yiguolei pushed a commit that referenced this pull request Mar 24, 2026
…est #61313 (#61652)

Cherry-picked from #61313

Co-authored-by: zhiqiang <seuhezhiqiang@163.com>
@zhiqiang-hhhh zhiqiang-hhhh deleted the codex-fix-ann-omp-budget-limit branch March 25, 2026 01:37
HappenLee pushed a commit to HappenLee/incubator-doris that referenced this pull request Mar 31, 2026
…61313)

## Summary
This PR fixes ANN index build OpenMP thread budgeting and adds a BE unit
test for the concurrency cap.

## Problem
`ScopedOmpThreadBudget` computed available budget from
`config::omp_threads_limit` directly. With the default
`omp_threads_limit = -1`, each builder effectively reserved 1 thread and
did not follow the documented auto behavior (80% of CPU cores). In
addition, concurrent builders could overrun the intended global limit
because there was no wait/coordination when the budget was exhausted.

## Root Cause
In `faiss_ann_index.cpp`:
- The constructor used `config::omp_threads_limit` directly instead of
the auto-resolved limit from `get_omp_threads_limit()`.
- No blocking mechanism existed when all OpenMP budget was already in
use.

## Fix
- Use `get_omp_threads_limit()` as the actual global limit for
budgeting.
- Add a condition variable to block builders until at least one OpenMP
slot is available.
- Keep the existing policy of reserving up to half of remaining budget
(minimum 1).
- Add concise comments to explain wait/wakeup behavior.

## Test
- Added `VectorSearchTest.OmpThreadBudgetNeverExceedsLimit` in
`be/test/storage/index/ann/faiss_vector_index_test.cpp`.
- The test sets `config::omp_threads_limit = 1`, runs multiple
concurrent ANN `add()` builds, samples `ann_index_build_index_threads`,
and asserts peak usage never exceeds 1 and finally returns to 0.

## Validation
- Local compilation/test run was intentionally skipped per request.
yiguolei pushed a commit that referenced this pull request Apr 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by one committer. dev/4.0.6-merged dev/4.1.0-merged reviewed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants