입자 상호 작용에 대한 시뮬레이션을 수행하면서 모트 오더 (Z 순서) (Wikipedia link)의 그리드 인덱싱을 발견했습니다.이 모눈 인덱싱은 효율적으로 가장 가까운 이웃 셀 검색을 제공하는 것으로 간주됩니다. 내가 읽은 주된 이유는 메모리에서 공간적으로 가까운 셀을 거의 순차적으로 정렬한다는 것입니다.모턴 주문으로 가장 가까운 이웃 검색의 이점은 무엇입니까?
첫 번째 구현의 중간에 있기 때문에 가장 가까운 이웃에 대한 알고리즘을 효과적으로 구현하는 방법에 대해 머리를 감쌀 수 없습니다. 특히 기본 균일 격자와 비교할 때 특히 그렇습니다.
주어진 셀 (x, y)은 8 개의 인접 셀 인덱스를 얻고 각각의 z- 인덱스를 계산하는 것이 간단합니다. 이것은 요소에 대한 일정한 액세스 시간을 제공하지만, Z- 인덱스는 미리 정의 된 테이블 (각 축에 대해 개별적으로 OR 연산)에서 계산되거나 조회됩니다. 어떻게하면 더 효율적일까요? A [0] -> A 1 -> A [3] -> A [4] -> ...가 순서 A보다 더 효율적이라고 말하는 순서 A의 요소에 액세스하는 것은 사실입니까? ] -> A [12] -> A [456] -> A [56] -> ...?
가장 가까운 이웃을 z 순서로 찾는 간단한 알고리즘이있을 것으로 기대했습니다. 선을 따라 뭔가 : 이웃의 첫 번째 셀을 찾아서 반복합니다. 그러나 이것이 사실 일 수는 없지만, 이것은 2^4 크기의 블록 안에서만 잘 작동합니다. 그러나 두 가지 문제가 있습니다. 셀이 경계에 없으면 블록의 첫 번째 셀을 쉽게 결정할 수 있고 블록의 셀을 반복 할 수 있지만 셀이 가장 가까운 이웃인지 여부를 확인해야합니다. 세포가 경계에 놓여있는 경우가 2^5 세포를 고려해야하는 것보다 나쁘다. 내가 여기서 무엇을 놓치고 있니? 필요한 것을 할 수있는 비교적 간단하고 효율적인 알고리즘이 있습니까?
포인트 1. 문제는 쉽게 테스트 할 수 있습니다,하지만 난 설명 된 액세스 패턴 생성 정말 무대 뒤에서 무슨 일이 일어나고 있는지 이해하고자하는 기본 지침에 익숙하지 않다. 어떤 도움, 참고 문헌 등 사전에
감사합니다 ...
편집 :
포인트 1을 명확히 주셔서 감사합니다! 따라서 Z 순서를 사용하면 흥미로운 인접 셀에 대한 평균 캐시 히트 율이 증가합니다. 캐시 히트/손실 비율을 프로파일 링하는 방법이 있습니까?
관련 항목 2 : 색인 i = f (x1, x2, ..., xd)가 얻어지는 R^d의 점 구름에 대해 모턴 배열을 만드는 방법을 이해해야한다고 추가해야합니다. 등 인터레이스 비트에서 내가 가장 가까운 이웃을 얻을 수있는 다음과 같은 순진한 가설 풀이보다 더 좋은 방법이 있는지 여부입니다 (D = 2 여기가, "의사 코드") 이해하려고 노력 : 예,
// Get the z-indices of cells adjacent to the cell containing (x, y)
// Accessing the contents of the cells is irrelevant here
(x, y) \elem R^2
point = (x, y)
zindex = f(x, y)
(zx, zy) = f^(-1)(zindex) // grid coordinates
nc = [(zx - 1, zy - 1), (zx - 1, zy), (zx - 1, zy + 1), // neighbor grid
(zx , zy - 1), (zx, zy + 1), // coordinates
(zx + 1, zy - 1), (zx + 1, zy), (zx + 1, zy + 1)]
ni= [f(x[0], x[1]) for x in nc] // neighbor indices
여기에 3D로 모톤 주문 구현이 있습니다. http://dmytry.pandromeda.com/texts/collision_detection_using_z_order_curve_aka_Morton_order.html –
여기에는 상세한 수학, 알고리즘 및 실험 결과가 나와 있습니다. http://compgeom.com/~piyush/ papers/tvcg_stann.pdf –
편집하기 전에 귀하의 의견을 보지 못했습니다. 내가 참조를 면밀히 살펴보고, 크게 감사하겠습니다! – bbtrb