This repository contains an implementation of the throughput-optimized version of PIM-zd-tree for the UPMEM processing-in-memory (PIM) system.
If you use our code, please cite our paper:
@inproceedings{zhao2026pim,
author = {Zhao, Yiwei and Kang, Hongbo and Men, Ziyang and Gu, Yan and Blelloch, Guy E. and Dhulipala, Laxman and McGuffey, Charles and Gibbons, Phillip B.},
title = {PIM-zd-tree: A Fast Space-Partitioning Index Leveraging Processing-in-Memory},
year = {2026},
isbn = {9798400723100},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3774934.3786411},
doi = {10.1145/3774934.3786411},
booktitle = {Proceedings of the 31st ACM SIGPLAN Annual Symposium on Principles and Practice of Parallel Programming},
pages = {480–495},
numpages = {16},
location = {Sydney, NSW, Australia},
series = {PPoPP '26}
}- GNU Compiler Collection
- UPMEM SDK
- PAPI installed on your system
-
Configure the PAPI path
Edit the Makefile and update the
PAPI_INSTALL_DIRvariable to point to your local PAPI installation. -
Build the project
Run
makein the project root directory.
This will compile the host and PIM components and generate the corresponding binaries.
./build/zd_tree_host [options]Options to select specific test or search modes:
- Test types (
--test-type):
0. Disabled
1. Insert
2. Box count
3. Box fetch
4. kNN
- Search types (
--search-type):
0. Disabled
1. Point find
2. Box count
3. Box fetch
4. kNN
| Option | Default | Description |
|---|---|---|
-i, --insert-batch-size <int> |
50000 |
Number of elements per insert batch |
-I, --insert-round <int> |
10 |
Number of insert rounds/batches |
| Option | Default | Description |
|---|---|---|
-t, --test-type <int> |
0 |
Test type selector |
-b, --test-batch-size <int> |
10000 |
Number of elements per test batch |
-r, --test-round <int> |
2 |
Number of test rounds/batches |
-e, --expected-box-size <int> |
100 |
Expected box size for test queries |
| Option | Default | Description |
|---|---|---|
-s, --search-type <int> |
0 |
Search type selector |
-S, --search-batch-size <int> |
20000 |
Number of queries per search batch |
| Option | Default | Description |
|---|---|---|
--interface <string> |
direct |
Backend interface to use |
--top-level-threads <int> |
1 |
Number of top-level threads |
--debug |
false |
Enable debug output |
--print-timer |
true |
Print timing information |
Run with all defaults:
./build/zd_tree_hostCustomize insert and test behavior:
./build/zd_tree_host -i 100000 -I 20 -b 20000 -r 5Enable debugging and disable timing output:
./build/zd_tree_host --debug --print-timer=falseSelect a different interface and search configuration:
./build/zd_tree_host --interface upmem -s 1 -S 50000