Khi đọc các bài báo, tôi thường tìm thấy các triển khai hình học của cây Oct để sắp xếp dữ liệu. Tuy nhiên, bất cứ khi nào tôi nghĩ về các bảng băm vấn đề có vẻ tốt hơn về tổng thể.
Các bảng băm có kịch bản trường hợp trung bình tốt hơn và xấu hơn cho hầu hết các ứng dụng:
Ví dụ, đối với tia truy tìm cây oct, các lỗi gần sẽ khiến bạn lặp qua cấu trúc cây nhị phân, đó là O (nlogn) trong khi bảng băm là O (n).
Các bảng băm dễ dàng tạo ra trong GPU hơn, vì chúng không yêu cầu bất kỳ vị trí logic nào trong bộ nhớ ngoài vị trí băm của chúng.
Hầu hết các cấu trúc cây có lợi thế đều có các bảng băm dường như không giữ GPU.
Trong đồ họa, chúng tôi không thích phân bổ lại bộ nhớ nên chúng tôi thường phân bổ bộ nhớ trong VRAM chỉ để có thể sử dụng lại cấu trúc dữ liệu. Vì vậy, cây nhị phân thuộc tính có (có hiệu quả bộ nhớ) dường như không phù hợp với các ứng dụng GPU.
Sự kết hợp dữ liệu cho bộ nhớ đệm dường như cũng không giữ được. Đối với cây được tạo ra bởi GPU, tính không đồng bộ làm cho rất khó để đảm bảo rằng các giá trị đóng logic cũng được lưu trữ gần nhau trong bộ nhớ bên dưới. Vì vậy, cuối cùng bạn sẽ nhảy xung quanh con trỏ.
Nó cũng dễ dàng hơn nhiều để thực thi các heuristic thân thiện với GPU nhất định trong bảng băm so với trong cây. Ví dụ: giới hạn số lần tra cứu băm ở một số cố định, giả sử 20 và sử dụng cùng một logic để ngăn các sợi dọc thực thi mã nhánh khác nhau. về bản chất, bạn luôn có thể kiểm tra 20 va chạm tiềm năng và chỉ nội suy kết quả với ô chứa khóa. Trong một cây, việc truyền tải qua cấu trúc dữ liệu phụ thuộc nhiều hơn vào chính dữ liệu và ít hơn vào cấu trúc dữ liệu.
Vậy tại sao cây oct được sử dụng nhiều hơn bảng băm?