Operator Library: Memory
이 오퍼레이터는 일련의 기준점을 통해 룩업 테이블의 근사치를 구현합니다. 그래서 이름이 KneeLUT입니다. 오퍼레이터 출력에서 표현 가능한 모든 값의 범위는 Knee LUT에 의해 기준점으로 정의된 N개의 구간으로 나뉩니다. 구간의 양 N은 2의 거듭제곱 수, 즉 N = 2^n으로 표현할 수 있으며 여기서 n은 정수입니다. 파라미터 BasePointPows는 n을 정의합니다. 구간 거리는 모든 구간에서 일정하고 동일합니다.
operator의 지연 시간에 대한 정보는 Table 46, 'Individual Latencies of the Operators in Library Memory'를 참조하십시오.
각 구간은 시작 기준점과 끝 기준점으로 설명됩니다. 시작 기준점은 첫 번째 구간 스텝의 출력 값을 정의합니다. 끝 기준점은 도달할 수 없는 구간 끝점의 이론적 값을 정의하며, 이는 다음 구간의 시작 기준점과 같습니다. 구간 내의 모든 값은 선형으로 근사화됩니다. 끝 기준점과 연속된 구간의 시작 기준점은 동일한 X 좌표를 가지므로 그 사이에 구간 스텝이 없습니다.
KneeLUT의 각 구간에 대한 기준점 값은 개별적으로 정의할 수 있습니다. 전체 출력 범위에 걸쳐 불연속 함수를 정의할 수 있습니다. 그러나 각 구간 내의 하위 함수는 시작 및 끝 기준점을 통해 정의되는 기울기/경사도를 가진 선형입니다. 모든 시작 기준점은 구간에 속합니다. 모든 끝 기준점은 구간에서 제외되며 선형 근사화로 도달할 수 없습니다.
모든 기준점은 오퍼레이터 출력에서 표현 가능한 최대값, 즉
.로 정규화됩니다.
모든 시작 기준점은 0에서 1 사이의 범위에 있게 됩니다.
0은 출력에서 표현 가능한 가장 작은 값에 해당합니다.
이 버전의 KneeLut에서는 오퍼레이터가 부호 없는 값만 지원하므로 0과 같습니다.
1은 오퍼레이터 출력에서 표현 가능한 최대값을 나타내며, 즉
.
모든 끝 기준점은 구간에 포함된 마지막 값이 가장 높고 가장 낮은 번호,
i.e., 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)는 다음과 같습니다.

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

| 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 | dynamic/static 읽기/쓰기 파라미터 |
| Default | 항등 함수 |
| Range | any |
|
이 필드 파라미터는 정규화된 2^BasePointPows개의 구간 시작 베이스 포인트 세트를 정의합니다. 포인트는 오퍼레이터 출력에서 표현 가능한 최대값으로 정규화됩니다. 필드 파라미터 구성 방법에 대한 자세한 내용은 'Parameter Editing'에서 확인하세요. |
|
| EndBasePoints | |
|---|---|
| Type | dynamic/static 읽기/쓰기 파라미터 |
| Default | 항등 함수 |
| Range | any |
|
이 파라미터는 정규화된 2^BasePointPows개의 구간 종료 베이스 포인트 세트를 정의합니다. 포인트는 오퍼레이터 출력에서 표현 가능한 최대값으로 정규화됩니다. 정규화된 값은 마지막 구간 포인트가 각각 최대값 또는 최소값에 도달할 수 있도록 0에서 1 사이의 범위를 초과할 수 있습니다. |
|
KneeLUT 오퍼레이터의 사용법은 다음 예시와 같습니다.
-
예시 - 16비트 입력 및 출력 데이터에 대한 룩업 테이블의 사용법을 보여줍니다. 16비트의 경우 제한된 블록 RAM 리소스 때문에 Knee LUT를 사용해야 합니다.

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

