어플리케이션 노트: Shared Memory#
imaFlex 및 marathon 프레임 그래버에서 Shared Memory 사용하기#
Memory를 사용하는 각 Operator는 프레임 그래버의 단일 물리적 Memory에만 할당됩니다. imaFlex 및 microEnable 5 marathon 프레임 그래버의 경우 개념이 다릅니다. 이 프레임 그래버에서는 훨씬 더 빠른 DDR4(imaFlex의 경우) 또는 DDR3(marathon의 경우) Memory를 사용할 수 있습니다. 하지만 이는 단 하나의 물리적 Memory이므로 Memory를 사용하는 모든 VisualApplets Operator가 Bandwidth를 공유합니다.
프레임 그래버의 Memory 설정은 VisualApplets Device Resources Documentation을 참고하는 것이 가장 좋습니다. 이 문서에서는 VisualApplets 디자인 내에서 DRAM 요소를 사용하는 것과 관련된 정보, 즉 RAM 크기, RAM 데이터 너비, RAM당 Bandwidth(marathon 시리즈 제외한 모든 플랫폼) 및 marathon 시리즈의 총 RAM Bandwidth(공유)를 확인할 수 있습니다.
정보
VisualApplets Device Resources Documentation에 제시된 Bandwidth 값은 이론상의 최대값입니다. 실제 사용 시에는 효율성이 저하될 수 있습니다.
이 문서는 RAM 크기 및 RAM 데이터 너비 정보를 활용하여 특정 플랫폼에 맞게 Memory를 효율적으로 사용할 수 있도록 안내합니다. 또한 marathon 시리즈의 RAM당 최종 Bandwidth를 계산하는 데 도움을 줍니다.
DRAM의 효율적인 사용#
VisualApplets Device Resources Documentation에서 특정 플랫폼의 RAM 크기에 대한 정보를 확인할 수 있습니다.
- imaFlex CXP-12 Quad의 경우: 3 x 512 MiB DDR4
- imaFlex CXP-12 Penta의 경우: 5 x 512 MiB DDR4
- marathon 시리즈 및 Lightbridge의 경우: 4 x 512 MiB DDR3
이 값들은 총 RAM 크기(예: marathon 시리즈의 경우: 4 x 512 MiB = 2 GiB (2^31 Byte))와 하나의 VisualApplets Operator가 최대로 사용할 수 있는 파티션(marathon 시리즈의 경우: 512 MiB)에 대한 정보를 제공합니다.
전체 RAM 데이터 너비 정보를 활용하는 경우에만 Operator당 이 최대 RAM 크기를 효율적으로 사용할 수 있습니다(VisualApplets Device Resources Documentation 참조):
- imaFlex CXP-12 Quad의 경우 RAM 데이터 너비는 384 bit입니다.
- imaFlex CXP-12 Penta의 경우 RAM 데이터 너비는 640 bit입니다.
- marathon VCX-QP 및 VF2의 경우 RAM 데이터 너비는 512 bit입니다.
- marathon VCL, VCLx 및 Lightbridge의 경우 RAM 데이터 너비는 256 bit입니다.
RAM 데이터 너비는 VisualApplets 디자인에서 DRAM Operator에 연결된 링크의 Parallelism 및 커널 요소와 곱해진 Bit Width입니다.
DRAM 사용 예시#
이 예시는 다음 그림과 같이 marathon VCL 플랫폼을 위한 간단한 VisualApplets 디자인을 사용합니다.
이 예시에서는 4의 Parallelism과 8 bit의 Bit Width를 사용합니다. 따라서 이 예시는 4 x 8 = 32 bit의 RAM 데이터 폭만 사용합니다. 그러나 완전히 효율적으로 작동하려면 대역폭이 256 bit여야 합니다. 따라서 다음 그림과 같이 Parallelism을 32로 늘려야 합니다.
이제 이 디자인을 통해 DRAM을 효율적으로 사용할 수 있습니다. 일반적으로 사용 가능한 RAM 데이터 폭을 온전히 활용하는 것이 가장 좋습니다. 하지만 더 많은 리소스가 필요하거나, 데이터 형식이 256으로 나누어떨어지지 않거나, 오퍼레이터의 parameter가 전체 범위를 더 이상 허용하지 않는 등의 이유로 이것이 불가능한 경우도 있습니다. 따라서 더 낮은 Parallelism도 사용할 수 있는지 확인할 필요가 있습니다. 이를 위해서는 다음 섹션에서 설명하는 Memory 대역폭을 이해해야 합니다.
Memory Bandwidth#
하나의 DRAM 엘리먼트에 대한 최대 Memory 대역폭에 관한 플랫폼별 정보는 VisualApplets Device Resources Documentation에서 확인할 수 있습니다. RAM에서의 읽기와 쓰기를 모두 고려해야 하므로, 최종 대역폭을 계산할 때 최대 대역폭은 2로 나뉩니다.

이러한 최종 대역폭 값은 RAM 데이터 폭을 온전히 사용할 때만 달성할 수 있습니다(Efficient Usage of the DRAM 섹션 참조). 따라서 최종 대역폭을 계산하려면 RAM data width used / full RAM data width 비율을 고려해야 합니다.

이 공식을 바탕으로 필요한 RAM 데이터 폭을 계산할 수 있습니다.
bit width * parallelism * kernel elements of a link connected to a RAM element 특정 최종 대역폭을 달성하기 위해 디자인에 사용됩니다. 즉, Bit Width와 kernel 엘리먼트가 정의되어 있는 경우 RAM 엘리먼트에 연결된 링크의 최소 필수 Parallelism도 계산할 수 있습니다.
Memory Bandwidth 계산 예시#
Memory Bandwidth 섹션의 디자인 예시에 대한 최종 대역폭을 계산할 수 있습니다. RAM 데이터 폭이 32 bit인 그림 1에 표시된 디자인 예시의 최종 대역폭은 다음과 같습니다.

RAM 데이터 폭이 256 bit인 그림 2에 표시된 디자인 예시의 최종 대역폭은 다음과 같습니다.

Shared Memory#
Memory Bandwidth 섹션의 대역폭 계산 공식은 단일 DRAM 오퍼레이터만 존재하는 경우 모든 frame grabber 플랫폼에 적용됩니다. 또한 marathon 시리즈를 제외한 모든 플랫폼의 경우 applet 내 각 DRAM 엘리먼트의 대역폭 계산에도 적용됩니다. 둘 이상의 오퍼레이터를 사용하는 경우, marathon 시리즈에서는 총 Memory 대역폭이 공유됩니다. 이때 하나의 DRAM 엘리먼트에 대한 최종 대역폭은 다음과 같이 계산됩니다.

Shared Memory 예시#
marathon VCL 플랫폼을 위한 다음 예시는 아래 이미지와 같이 두 대의 카메라, 두 개의 DRAM 엘리먼트(RAM 데이터 폭 32 bit) 및 두 개의 DMA를 보여줍니다.
최종 대역폭은 다음과 같습니다.

RAM 데이터 폭은 32 bit이지만 디자인에 DRAM 엘리먼트가 하나만 있는 경우에 대해 Memory Bandwidth 섹션에서 계산한 최종 대역폭과 비교할 때, 두 개의 DRAM 엘리먼트를 사용할 때의 최종 대역폭은 이전 값의 절반입니다. 하나의 DRAM 엘리먼트를 사용할 때와 동일한 대역폭을 두 개의 DRAM 엘리먼트로 달성하려면 RAM 데이터 폭을 두 배로 늘려야 합니다(= 64 bit).
Operator 설정#
오퍼레이터 구성은 주어진 frame grabber 하드웨어의 사용 가능한 RAM 데이터 폭에 자동으로 적응합니다. 따라서 대부분의 오퍼레이터는 VisualApplets Device Resources Documentation에 명시된 RAM 데이터 폭을 허용합니다. 일부 오퍼레이터는 Parallelism을 1만 허용합니다. 64비트의 링크 Bit Width 제한을 극복하기 위해, 일부 오퍼레이터는 Efficient Usage of the DRAM 및 Memory Bandwidth 섹션에서 설명한 대로 효율적인 RAM 데이터 폭을 사용하도록 kernel을 수용합니다. 효율적인 사용을 위해 특별한 구성이 필요한 DRAM 오퍼레이터 예외가 있습니다. 오퍼레이터의 최적 구성에 대한 자세한 내용은 operator CoefficientBuffer documentation에서 확인할 수 있습니다.