Architecturas | c언어 hashtable 예제

c언어 hashtable 예제

목록 대신 필요한 작업을 지원하는 다른 데이터 구조를 사용할 수 있습니다. 예를 들어 자체 밸런싱 이진 검색 트리를 사용하면 일반적인 해시 테이블 작업의 이론상 최악의 경우 시간(삽입, 삭제, 조회)을 O(n)가 아닌 O(log n)로 내려갈 수 있습니다. 그러나 이렇게 하면 구현에 추가 복잡성이 발생하고 트리에 삽입하고 균형을 조정하는 데 소요되는 시간이 모든 에서 선형 검색을 수행하는 데 필요한 시간보다 큰 작은 해시 테이블의 성능이 더욱 저하될 수 있습니다. 목록의 요소입니다. [3] [11] 버킷에 대해 자체 밸런싱 된 바이너리 검색 트리를 사용하는 해시 테이블의 실제 예는 Java 버전 8의 HashMap 클래스입니다. [12] Q3에서 x43을 계산하는 예제의 경우, 양방향 구성표의 원하는 컬럼은 그림 4b에서 연한 파란색과 진한 파란색으로 음영화되며, 세 개가 아닌 두 개의 SIMD 하중이 필요합니다. 이러한 음영은 그림 2d에 표시된 양방향 열구조 레이아웃에 해당합니다. 이 레이아웃에서는 도 4b의 열에 따라 첫 번째 절반 블록에 정수팩을 한 다음, 다시 열에 따라 두 번째 절반 블록의 정수들을 반대 순서로 포장합니다. 이들 256개의 절차 중 하나의 예로서, 도 5는 6의 비트 폭을 가진 블록으로부터 의 Q2 쿼터 블록에 대한 컬럼 2를 디코딩하는 절차를 나타낸다. 두 개의 디코딩 단계는 도 4b의 파선 상자에 의해 도시된다. 제1 디코딩 단계는 도 5c에서 단어 0~3으로 표시된 4개의 차이 값을 산출하고, 제2 디코딩 단계는 도 5d에 나타낸 또 다른 4개의 차이 값을 산출한다. 그런 다음 최종 SIMD 추가를 수행하여 두 번째 세트에 첫 번째 차이 값 집합을 추가하여 도 5e에서 4~7개의 단어를 산출합니다.

도 5c로부터 의 단어 0~7은, e는 도 5g에 도시된 바와 같이 어레이에 저장될 수 있다. 처음 네 단어의 적절한 합계를 통해 1, 2, 3 및 4 항을 사용하여 Q1의 누적 합계 x3, x7, x11 및 x15를 각각 얻을 수 있습니다. 따라서 2분기에 누적 합계 x19, x23, x27 및 x31을 얻는 데 는 각각 5, 6, 7 및 8개 이상의 계산이 필요합니다. 그러나 최종 SIMD 계산은 몇 가지 추가를 병렬로 수행하도록 설계되므로 모든 경우에 최대 4개의 용어의 합계가 충분합니다. 예를 들어 x23을 계산하려면 6개의 개별 수량 d2, d6, d10, d10, d14, d18 및 d22의 예상 추가 대신 4개의 수량 d10, d14, (d2 + d18) 및 (d6 + d22)를 나타내는 단어 2부터 5까지만 추가해야 합니다. 두 번째 개념인 벡터화의 개념은 알고리즘이 개별적으로 가기보다는 정수에 액세스하고 처리되도록 하는 것입니다. 한 가지 유형의 벡터화는 정수를 병렬로 처리하기 위한 특수 컴퓨터 지침을 사용합니다. 이러한 SIMD(단일 명령, 다중 데이터) 명령은 지난 10년 동안 프로세서에 통합되어 있으며 가까운 장래에 512비트 레지스터로 확장될 예정인 특수 128비트 및 256비트 레지스터를 이용합니다. 예를 들어, 128비트 레지스터를 사용하면 프로세서가 4개의 32비트 정수를 병렬로 처리할 수 있으며, SIMD 작업을 통해 4개의 정수를 모두 특정 비트 수만큼 오른쪽으로 이동하거나 한 레지스터에 4개의 정수를 다른 정수에 추가하는 등의 SIMD 작업을 수행할 수 있습니다. 동시에 등록할 수 있습니다.