응용 노트: 공유 메모리#
imaFlex 및 marathon 프레임 그래버에서 공유 메모리 사용#
메모리를 사용하는 각 연산자는 프레임 그래버에서 단 하나의 물리적 메모리에만 할당됩니다. imaFlex 및 microEnable 5 marathon 프레임 그래버의 경우 이 개념이 다릅니다. 이러한 프레임 그래버에서는 훨씬 더 빠른 DDR4(imaFlex의 경우) 또는 DDR3( marathon 의 경우) 메모리를 사용할 수 있습니다. 그러나 이는 단 하나의 물리적 메모리일 뿐이므로, 메모리를 사용하는 모든 VisualApplets 연산자가 대역폭을 공유하게 됩니다.
프레임 그래버의 메모리 구성은 ‘VisualApplets ’ 장치 리소스 설명서를 통해 가장 정확하게 확인할 수 있습니다. 이 설명서에는 ‘ VisualApplets ’ 설계 내에서 DRAM 소자를 사용하는 데 필요한 정보, 즉 RAM 용량, RAM 데이터 폭 및 RAM당 대역폭( marathon 시리즈를 제외한 모든 플랫폼의 경우)과 ‘ marathon ’ 시리즈의 총(공유) RAM 대역폭이 수록되어 있습니다.
정보
VisualApplets 장치 리소스 설명서에 명시된 대역폭 값은 이론상의 최대값입니다. 실제 사용 시 효율이 저하될 수 있습니다.
이 문서는 RAM 용량 및 RAM 데이터 폭 정보를 활용하여 특정 플랫폼에서 메모리를 효율적으로 사용하는 방법을 안내합니다. 또한, ‘ marathon ’ 시리즈의 RAM당 대역폭을 계산하는 데 도움을 줍니다.
DRAM의 효율적인 활용#
VisualApplets 장치 리소스 설명서에서는 특정 플랫폼의 RAM 용량에 대한 정보를 확인할 수 있습니다.
- imaFlex CXP-12 Quad의 경우: 512 MiB DDR4 3개
- 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 바이트))과 한 명의 VisualApplets 운영자가 최대 얼마까지 사용할 수 있는 파티션 크기( marathon 시리즈의 경우: 512 MiB)에 대한 정보를 제공합니다.
이 최대 RAM 용량을 각 오퍼레이터별로 효율적으로 사용하려면 전체 RAM 데이터 폭에 대한 정보를 활용해야 합니다( VisualApplets 장치 리소스 문서 참조):
- imaFlex CXP-12 Quad의 경우, RAM 데이터 폭은 384비트입니다.
- imaFlex CXP-12 Penta 의 경우, RAM 데이터 폭은 640비트입니다.
- marathon VCX-QP , VF2의 경우 RAM 데이터 폭은 512비트입니다.
- marathon 의 VCL, VCLx 및 Lightbridge의 경우, RAM 데이터 폭은 256비트입니다.
RAM 데이터 폭은 VisualApplets 설계에서 DRAM 연산자와 연결된 링크의 병렬 처리 정도와 커널 요소 수에 비트 폭을 곱한 값입니다.
DRAM의 사용 예시#
이 예제에서는 다음 그림과 같이 marathon VCL 플랫폼을 위한 간단한 ‘ VisualApplets ’ 설계를 사용합니다.
이 예제에서는 병렬도를 4로, 비트 폭을 8비트로 설정했습니다. 따라서 이 예제에서는 RAM 데이터 폭으로 4 × 8 = 32비트만 사용합니다. 하지만 효율을 극대화하려면 대역폭이 256비트여야 합니다. 따라서 다음 그림과 같이 병렬도를 32로 늘려야 합니다.
이 설계 덕분에 DRAM을 효율적으로 사용할 수 있습니다. 일반적으로는 사용 가능한 RAM 데이터 폭을 최대한 활용하는 것이 가장 좋습니다. 하지만 더 많은 리소스가 필요하거나, 데이터 형식이 256으로 나누어지지 않거나, 연산자의 매개변수 때문에 더 이상 전체 범위를 사용할 수 없는 경우에는 이것이 불가능할 수도 있습니다. 따라서 더 낮은 병렬도를 사용할 수 있는지 여부를 파악해야 합니다. 이를 위해서는 다음 절에서 설명할 메모리 대역폭을 이해해야 합니다.
메모리 대역폭#
단일 DRAM 소자의 최대 메모리 대역폭에 대한 플랫폼별 정보는 ‘VisualApplets ’의 ‘Device Resources’ 문서에서 확인할 수 있습니다. RAM의 읽기 및 쓰기 작업을 고려해야 하므로, 결과 대역폭을 계산할 때는 최대 대역폭을 2로 나눕니다:

이 결과 대역폭 값은 RAM 데이터 폭을 완전히 활용할 때만 달성할 수 있습니다( ‘DRAM의 효율적인 사용’ 절 참조). 따라서 결과 대역폭을 계산할 때는 사용된 RAM 데이터 폭과 전체 RAM 데이터 폭의 비율을 고려해야 합니다:

이 공식을 사용하면 필요한 RAM 데이터 폭을 계산할 수 있습니다:
bit width * parallelism * kernel elements of a link connected to a RAM element 특정 결과 대역폭을 달성하기 위해 설계에 사용됩니다. 즉, 비트 폭과 커널 요소가 정의되어 있다면, RAM 요소에 연결된 링크에 필요한 최소 병렬도도 계산할 수 있습니다.
메모리 대역폭 계산 예시#
‘메모리 대역폭’ 섹션에 제시된 설계 예제에 대해 결과 대역폭을 계산할 수 있습니다. 그림 1에 표시된 RAM 데이터 폭이 32비트인 설계 예제의 경우, 결과 대역폭은 다음과 같습니다.

그림 2에 표시된 RAM 데이터 폭이 256비트인 설계 예시의 경우, 결과적인 대역폭은 다음과 같습니다.

공유 메모리#
‘메모리 대역폭’ 섹션에 제시된 대역폭 계산식은 DRAM 연산기가 단 하나만 존재하는 경우 모든 프레임 그래버 플랫폼에 적용됩니다. 또한 이 계산식은 ‘ marathon ’ 시리즈를 제외한 모든 플랫폼에서 애플릿 내 각 DRAM 요소의 대역폭을 계산할 때도 적용됩니다. 두 개 이상의 연산기를 사용하는 경우, ‘ marathon ’ 시리즈에서는 총 메모리 대역폭이 공유됩니다. 이때 각 DRAM 요소의 대역폭은 다음 공식에 따라 계산됩니다:

공유 메모리 예시#
marathon VCL 플랫폼에 대한 다음 예제에서는 아래 이미지와 같이 두 대의 카메라, 두 개의 DRAM 요소(RAM 데이터 폭 32비트), 그리고 두 개의 DMA를 보여줍니다:
그 결과 대역폭은 다음과 같습니다:

‘메모리 대역폭’ 절에서 계산한 바와 같이, RAM 데이터 폭이 32비트이지만 설계에 DRAM 소자가 하나만 포함된 경우의 결과 대역폭과 비교했을 때, DRAM 소자가 두 개인 경우의 결과 대역폭은 이전 값의 절반에 해당합니다. DRAM 소자가 두 개인 경우에도 DRAM 소자가 하나일 때와 동일한 대역폭을 얻으려면 RAM 데이터 폭을 두 배로 늘려야 합니다(= 64비트).
운영자 설정#
연산자 구성은 주어진 프레임 그래버 하드웨어에서 사용 가능한 RAM 데이터 폭에 자동으로 맞춰집니다. 따라서 대부분의 연산자는 ‘VisualApplets ’ 장치 리소스 설명서에 명시된 RAM 데이터 폭을 허용합니다. 일부 연산자는 병렬 처리 수준을 1로만 제한합니다. 64비트의 링크 비트 폭 제한을 극복하기 위해, 이러한 연산자 중 일부는 ‘DRAM 및 메모리 대역폭의 효율적인 사용’ 섹션에서 설명된 바와 같이 효율적인 RAM 데이터 폭을 사용할 수 있도록 커널을 지원합니다. DRAM 연산자 중에는 효율적인 사용을 위해 특별한 구성이 필요한 예외가 있습니다. 연산자의 최적 구성에 대한 자세한 내용은 해당 연산자의 CoefficientBuffer 문서에서 확인할 수 있습니다.