Operator Library: Memory
이 오퍼레이터는 일련의 기준점을 통해 룩업 테이블의 근사치를 구현합니다. 이것이 KneeLUT라는 이름이 붙은 이유입니다. 오퍼레이터 출력에서 표현 가능한 모든 값의 범위는 Knee LUT에 의해 기준점으로 정의되는 N개의 구간으로 나뉩니다. 구간의 양 N은 2의 거듭제곱 수, 즉 N = 2^n으로 표현될 수 있으며, 여기서 n은 정수입니다. 매개변수 BasePointPows는 n을 정의합니다. 구간 거리는 일정하며 모든 구간에서 동일합니다.
연산자 지연 시간에 대한 정보는 '표 46: Library Memory의 연산자별 지연 시간'을 참조하십시오.
각 구간은 시작 기준점과 종료 기준점으로 설명됩니다. 시작 기준점은 첫 번째 구간 스텝의 출력 값을 정의합니다. 종료 기준점은 다음 구간의 시작 기준점과 같아서 도달할 수 없는 구간의 끝점에 대한 이론적 값을 정의합니다. 구간 내의 모든 값은 선형으로 근사화됩니다. 연속되는 구간의 종료 기준점과 시작 기준점은 동일한 X 좌표를 가지며, 즉 그 사이에 구간 스텝이 없습니다.
KneeLUT의 각 구간에 대한 기준점 값은 개별적으로 정의할 수 있습니다. 전체 출력 범위에 걸쳐 불연속 함수를 정의하는 것이 가능합니다. 그러나 각 구간 내의 하위 함수는 시작 및 종료 기준점을 통해 정의된 기울기를 갖는 선형입니다. 모든 시작 기준점은 구간에 속합니다. 모든 종료 기준점은 구간에서 제외되며 선형 근사값에 도달할 수 없습니다.
모든 기준점은 오퍼레이터 출력에서 표현 가능한 최대값으로 정규화됩니다. 즉,
.
모든 시작 기준점은 0에서 1 사이의 범위에 있게 됩니다.
0은 출력에서 표현 가능한 가장 작은 값에 해당합니다.
이 버전의 KneeLut에서는 오퍼레이터가 부호 없는 값만 지원하므로 0과 같습니다.
1은 오퍼레이터 출력에서 표현 가능한 최대값을 나타내며, 즉
.
구간에 포함된 마지막 값이 가장 높고 가장 낮은 번호, 즉 0과 1에 매핑되도록 하기 위해 모든 종료 기준점은 0에서 1의 범위를 초과할 수 있습니다.
이는 종료 기준점이 1보다 크거나 0보다 작을 수 있음을 의미합니다. 시작 기준점과 동일한 Scaling 기법을 사용하여,
끝점은 다음과 같이 Scaling해야 합니다.
.
오퍼레이터의 동작을 설명하기 위해 두 가지 예를 살펴보겠습니다.
-
Identity
KneeLUT의 첫 번째 함수는 identity입니다. KneeLUT의 매개변수가 다음과 같다고 가정해 보겠습니다.
- BasePointPows = 2
- Input Bit Width = 4
- Output Bit Width = 5
따라서 4개의 시작 기준점과 4개의 종료 기준점을 정의해야 합니다. identity를 위해 다음을 정의합니다.


이러한 값은 다음과 같이 결정됩니다.

여기서 x는 기준점 인덱스입니다.
다음 그래프는 이러한 기준점을 보여줍니다. 시작 기준점은 빨간색 사각형으로 표시되고 종료 기준점은 자주색 원으로 표시됩니다. 또한, 구간의 선형 함수를 설명하기 위해 선이 그려집니다.

이 그래프는 출력의 근사값(파란색 별표)도 보여줍니다. 기준점은 정규화되어 있으며, 즉 0은 출력 값 0이고 1은 출력 값입니다.
.
다음 그래프는 주어진 기준점이 있는 실제로 사용된 룩업 테이블을 보여줍니다.
보시다시피 값은 가장 가까운 정수 값으로 반올림됩니다.

룩업 테이블은 다음 값을 계산합니다.

-
Discontinuous Function
다음 예에서는 불연속 함수를 살펴보겠습니다. 첫 번째 예에서 제공된 것과 동일한 KneeLUT 매개변수를 가정해 보겠습니다. 이번에는 기준점이 함수에 의해 정의되지 않습니다.


다시 말하지만, 다음 그래프는 이러한 기준점을 보여줍니다. 시작 기준점은 빨간색 사각형으로 표시되고 종료 기준점은 자주색 원으로 표시됩니다. 또한, 구간의 선형 함수를 설명하기 위해 선이 그려집니다.

이 그래프는 출력의 근사값(파란색 별표)도 보여줍니다. 다시 한번, 그래프는 1로 정규화됩니다.
다음 그래프는 주어진 기준점이 있는 실제로 사용된 룩업 테이블을 보여줍니다. 보시다시피 값은 가장 가까운 정수 값으로 반올림됩니다.

룩업 테이블은 주어진 기준점으로부터 다음 값을 계산합니다.

이 값들은 각 구간의 기울기 m(x)와 오프셋 b(x)를 사용하여 계산할 수 있습니다.


결과 LUT(x)는 다음과 같습니다.

![]() |
범위를 벗어난 근사값 |
|---|---|
|
근사된 값이 사용 가능한 출력 범위를 벗어나는 경우, 오퍼레이터는 해당 값을 최대 또는 최소 가능 값으로 클리핑하지 않습니다. 값이 정의되지 않습니다. |
Operator 제한 사항
-
다음 제약 조건이 주어집니다.

| Link Parameter | Input Link I | Output Link O |
|---|---|---|
| Bit Width | [1, 64] | [1, 60] |
| Arithmetic | unsigned | as I |
| Parallelism | any | as I |
| Kernel Columns | 1 | as I |
| Kernel Rows | 1 | as I |
| Img Protocol | {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} | as I |
| Color Format | VAF_GRAY | as I |
| Color Flavor | FL_NONE | as I |
| Max. Img Width | any | as I |
| Max. Img Height | any | as I |
| BasePointPows | |
|---|---|
| Type | static parameter |
| Default | 6 |
| Range | [1, 60 - InputBitWidth + OutputBitWidth] |
|
이 파라미터는 다음 공식을 기반으로 KneeLUT의 기준점 개수를 정의합니다: NumberOfBasePoints = 2 ^ BasePointsPows. 스텝 크기는 Parallelism입니다. |
|
| StartBasePoints | |
|---|---|
| Type | 동적/정적 읽기/쓰기 파라미터 |
| Default | 항등 함수 |
| Range | any |
|
이 필드 파라미터는 정규화된 2^BasePointPows 구간 시작 기준점 세트를 정의합니다. 점들은 오퍼레이터 출력에서 표현 가능한 최댓값으로 정규화됩니다. 'Parameter Editing'에서 필드 파라미터 구성 방법을 확인하십시오. |
|
| EndBasePoints | |
|---|---|
| Type | 동적/정적 읽기/쓰기 파라미터 |
| Default | 항등 함수 |
| Range | any |
|
이 파라미터는 정규화된 2^BasePointPows 구간 끝 기준점 세트를 정의합니다. 점들은 오퍼레이터 출력에서 표현 가능한 최댓값으로 정규화됩니다. 정규화된 값은 마지막 구간 점이 각각 최대 또는 최소 표현 가능 값에 도달할 수 있도록 0에서 1 사이의 범위를 초과할 수 있습니다. |
|
KneeLUT 오퍼레이터의 사용법은 다음 예시와 같습니다.
-
예시 - 16비트 입력 및 출력 데이터에 대한 룩업 테이블 사용법을 보여줍니다. 16비트의 경우 제한된 블록 RAM 리소스로 인해 Knee LUT를 사용해야 합니다.

![[경고]](../common/images/admon/warning.png)
이전

