콘텐츠로 건너뛰기

Parallelism#

이 토픽에서는 다음의 내용을 설명합니다. Parallelism 링크 속성이 VisualApplets 디자인에서 의미하는 바와 해당 설정이 생성된 FPGA 파이프라인에 매핑되는 방식. 또한 디자인에 필요한 parallelism을 계산하는 방법과 전용 오퍼레이터를 사용하여 parallelism을 조정하는 방법을 설명합니다. 이 토픽을 읽고 나면 parallelism, 대역폭, FPGA 리소스 사용량 간의 관계, parallelism에 따라 이미지 너비 제약 조건이 달라지는 방식, 그리고 다음과 같은 메모리 오퍼레이터가... FrameBufferRandomRead Parallelism을 제한합니다.

Key Terms

Base Design Clock은 프레임 그래버에서 생성된 FPGA 파이프라인의 클럭(예: 312.5 MHz)입니다. 카메라 픽셀 클럭과 동일하지 않으며, VisualApplets 편집기 내부의 클럭도 아닙니다. 클럭 사이클은 Base Design Clock의 한 틱(tick)입니다. 클럭 사이클당 링크를 통과할 수 있는 픽셀 수는 다음과 같습니다. 해당 숫자가 parallelism입니다. Parallelism 4는 클럭 사이클당 4개의 픽셀을 의미합니다. Base Design Clock 주파수가 높거나 parallelism이 높으면 픽셀 레이트(이 토픽에서는 대역폭이라고 함)가 증가합니다.

Parallelism과 대역폭#

Parallelism은 생성된 FPGA 파이프라인의 링크를 통해 클럭 사이클당 흐르는 픽셀 수입니다.

Parallelism은 모듈 내의 처리 세분성에 영향을 줍니다. 예를 들어... LineBuffer parameter XLength Parallelism에 따라 달라집니다.

다음과 같은 규칙이 적용됩니다:

  • Parallelism이 높을수록 픽셀 레이트 대역폭이 높아집니다.
  • Parallelism이 높을수록 FPGA 리소스 사용량이 높아집니다.

Bit width와 커널 크기는 이 픽셀 레이트 수치에 포함되지 않습니다. 이들은 클럭당 데이터 양을 증가시키며, 이는 DRAM 및 리소스에 중요합니다. Working with Kernels 튜토리얼 토픽과 Memory Elements 튜토리얼 토픽을 참조하십시오.

디자인 가이드라인

FPGA 리소스를 절약하기 위해 Parallelism을 필요한 수준보다 높게 설정하지 마십시오.

픽셀 레이트로서 링크의 대역폭은 다음 공식을 따릅니다:

Bandwidth = Parallelism × Base Design Clock

Base Design Clock은 사용하는 프레임 그래버에 따라 다릅니다. Basler 프레임 그래버의 경우 Device Resources에서 값을 확인하십시오.

Key Terms

Link Info 및 Throughput 플래그를 사용하여 디자인에서 parallelism과 데이터 처리량을 시각화할 수 있습니다. 툴바의 다음 버튼으로 이 플래그를 활성화하십시오.

디자인에서 Link Info 및 Throughput 플래그 활성화

그 결과 디자인에 Link Info 및 Throughput 플래그가 표시됩니다.

Link Info 및 Throughput 플래그

이 항목에서는 Link Info 및 Throughput 플래그가 활성화된 디자인의 모든 스크린샷을 보여줍니다.

필요한 Parallelism 계산#

디자인의 규모를 산정하려면 먼저 필요한 픽셀 레이트를 계산한 다음, Base Design Clock으로부터 필요한 Parallelism을 도출하십시오.

면 스캔 디자인의 Parallelism 계산#

에어리어 스캔 카메라가 포함된 디자인의 경우, 먼저 초당 픽셀 단위로 대역폭을 계산합니다:

Bandwidth = (라인당 픽셀 수) × (프레임당 라인 수) × 프레임 레이트

그런 다음 대역폭을 사용하여 필요한 Parallelism을 계산합니다:

Required parallelism = bandwidth / Base Design Clock

계산된 요구 사항보다 크거나 같은 지원되는 가장 작은 Parallelism을 선택합니다. 내림하면 디자인이 필수 대역폭에 미치지 못하게 됩니다. 예를 들어 Base Design Clock 312.5 MHz에서 6000 MP/s에는 19.2의 Parallelism이 필요합니다. Parallelism 19는 5937.5 MP/s만 제공하므로 충분하지 않습니다. 20 또는 플랫폼이 허용하는 다음으로 높은 값을 사용하십시오.

면 스캔 계산 예시#

해상도가 2064 × 2064 픽셀이고 초당 30프레임인 카메라의 경우 다음 대역폭 계산이 적용됩니다:

대역폭 ≈ 2064 × 2064 × 30 ≈ 127.9 MP/s

Base Design Clock이 312.5 MHz일 때, 이는 다음과 같은 계산된 Parallelism으로 이어집니다:

필요한 Parallelism ≈ 127.9 / 312.5 ≈ 0.41 → 1로 올림

Area Bandwidth

위의 스크린샷은 해당 VisualApplets 디자인 구현을 보여줍니다. 다음의 Parallelism: camera interface 로 설정된 경우, 4. 해당 값은 대역폭 계산에서 나온 처리 Parallelism이 아닙니다. CxpCamera operator는 다음에 정의된 CXP 연결 수로부터 인터페이스 Parallelism를 자동으로 설정합니다. ConnectionCount 모듈 파라미터(이 경우, x1). 인터페이스 Parallelism과 필수 처리 Parallelism은 서로 다른 숫자입니다. 필수 처리 Parallelism은... 1)로부터 인터페이스 Parallelism을 자동으로 설정하며, 링크 Parallelism은 다음으로 감소합니다. 1 출력 링크에서 LineBuffer operator.

낮은 프레임 레이트에서는 1 이면 충분합니다. 더 높은 프레임 레이트나 해상도에서는 필요한 Parallelism이 증가합니다. 값을 계산한 다음 지원되는 다음 수준으로 반올림합니다. 예: 2, 4, 또는 8). 플랫폼에 다음이 필요한 경우, 짝수 Parallelism의 경우 먼저 반올림한 다음 다음으로 높은 유효한 짝수 값을 선택합니다. 예를 들어 계산 결과가 다음과 같은 경우 6.3, 다음을 사용하십시오 8(이)가 될 때, 다음 값이 아닙니다. 7.

라인 스캔 디자인의 Parallelism 계산#

라인 스캔 카메라를 사용하는 설계의 경우, 먼저 초당 픽셀 단위로 대역폭을 계산합니다:

Bandwidth = (라인당 픽셀 수) × 라인 레이트

그런 다음 대역폭을 사용하여 필요한 Parallelism을 계산합니다:

Required parallelism = bandwidth / Base Design Clock

플랫폼 규칙과 허용되는 Parallelism 값에 따라 결과를 올림하십시오.

라인 스캔 계산 예시#

해상도가 16384 픽셀이고 라인 레이트가 120 kHz인 카메라의 경우 다음 대역폭 계산이 적용됩니다:

Bandwidth ≈ 16384 × 120 kHz ≈ 1966.08 MP/s

Base Design Clock이 312.5 MHz일 때, 이는 다음과 같은 계산된 Parallelism으로 이어집니다:

Required parallelism ≈ 1966.08 / 312.5 ≈ 6.3 → 7로 올림

계산 결과는 다음과 같습니다: 6.3, 따라서 다음 정수는 7). 플랫폼에 다음이 필요한 경우, 짝수 Parallelism, 다음으로 높은 유효한 짝수 값을 선택합니다(8, 가 아닙니다. 7). 아래 스크린샷은 Parallelism을 사용합니다 7, 이는 짝수 Parallelism이 요구되지 않을 때 유효합니다.

Line Scan Bandwidth

위 스크린샷은 해당 VisualApplets 디자인 구현을 보여줍니다. 카메라 인터페이스의 Parallelism은 다음으로 설정됩니다. 12. 이 값은 자동으로 구성됩니다 CxpCamera 다음의 CXP 연결 수에 따른 operator(ConnectionCount 파라미터가 다음으로 설정됨: x2). 해당 인터페이스 Parallelism은 필요한 프로세싱 Parallelism과 다시 일치하지 않습니다. 그 SplitImage 연산자는 1D-to-2D 변환을 수행합니다. LineBuffer 오퍼레이터는 링크 Parallelism을 다음으로 줄입니다 7 계산된 처리 요구 사항에 맞추기 위해서입니다.

디자인에서 Parallelism 변경#

아래 operator는 디자인의 Parallelism를 대역폭 요구 사항에 맞게 조정합니다.

Parallelism 증가 또는 감소#

  • PARALLELdn — Parallelism를 줄입니다. 참조: PARALLELdn (Operator Reference 내용).
  • PARALLELup — Parallelism를 늘립니다. 참조: PARALLELup (Operator Reference 내용).
  • LineBuffer (imaFlex 전용): 이 ParallelismConverter parameter가 LineBuffer operator는 추가 Parallelism operator 없이 입력과 출력 간의 Parallelism를 조정합니다. 참조: LineBuffer (imaFlex) (Operator Reference 내용).

스트림 분할, 선택 및 병합#

  • SplitParallel — 더 높은 Parallelism을 가진 하나의 데이터 스트림을 더 낮은 Parallelism을 가진 여러 개의 스트림으로 분할합니다. 예: Parallelism 8 Parallelism을 가진 두 개의 스트림이 됩니다 4 각각. 참조: SplitParallel (Operator Reference 내용).
  • SelectFromParallel — 병렬 스트림에서 개별 구성 요소(예: 클록 주기당 전송되는 여러 데이터 단어 중 하나)를 선택합니다. 참조: SelectFromParallel (Operator Reference 내용).
  • MergeParallel — 개별 처리 후 병렬 스트림을 다시 병합합니다. 참조: MergeParallel (Operator Reference 내용).

기타 오퍼레이터#

  • CastParallel — 링크의 비트를 다시 해석합니다. 다음 조건이 유지되는 한 Parallelism 및 Bit Width가 변경될 수 있습니다. bit width × parallelism 입력과 출력에서 동일하게 유지됩니다. 예: 16 bit × PAR 2는 8 bit × PAR 4가 됩니다. 이미지 너비도 그에 따라 변경됩니다. 참조: CastParallel (Operator Reference 내용).
  • ExpandToParallel — Parallelism 1인 입력을 받아 원하는 출력 Parallelism을 생성합니다. 입력 값은 모든 병렬 채널에 복제됩니다. 참조: ExpandToParallel (Operator Reference 내용).

사용 사례#

다음 유스 케이스가 자주 발생합니다:

  • 사용 PARALLELup Parallelism을 높이고, 병렬 브랜치에서 데이터를 처리하며, 다음을 사용하여 브랜치를 다시 병합합니다 MergeParallel. ParUpMergeParallel

  • 특정 처리 작업의 경우, 단일 컴포넌트만 선택하는 것이 수학적으로 충분하며 데이터 양을 줄이면서 필요한 결과를 제공합니다. 다음을 사용하십시오: SelectFromParallel Parallelism에서 하나의 채널만 전달하려면 4 스트림.

SelectFromParallel

  • 다음에 이어 FrameBufferRandomRead, 스트림은 다음의 Parallelism으로 실행됩니다. 1 (예: 화소당 64 bit). 후속 처리가 더 높은 Parallelism으로 실행되도록 하려면 데이터 스트림을 8 bit × Parallelism으로 재해석하십시오 8. 이를 위해 다음을 사용하십시오. CastParallel operator.

Parallelism FrameBufferRandom read

  • 사용 ExpandToParallel Parallelism을 사용하여 제어 값 또는 픽셀 스트림을 확장하려면 1 다음의 Parallelism으로 4 병렬 브랜치의 계수나 마스크 등을 위해 동일한 값이 네 개의 병렬 채널 모두에서 사용 가능해야 할 때.

ExpandToParallel

Parallelism 제약 조건#

픽셀 단위의 maximum image width는 Parallelism으로 나누어떨어져야 합니다.

예시:

  • Parallelism이 4, 허용되는 이미지 너비에는 1024 및 2048이 포함됩니다.
  • Parallelism이 12, 이미지 너비 16384는 포함되지 16384 / 12는 정수가 아니므로 허용되지 않습니다.

해결 방법:

  1. Dummy pixels — 이미지 너비가 Parallelism 값으로 균등하게 나누어떨어질 때까지, 예를 들어 시뮬레이션 링크 속성이나 오퍼레이터를 통해 이미지를 넓힙니다.
  2. Crop — 유효한 이미지 너비로 이미지를 자릅니다.

Key Terms

생성된 FPGA 하드웨어는 클럭당 패킷 단위로 픽셀을 처리합니다. 16384 / 12는 정수가 아니므로 16384픽셀의 라인은 Parallelism 12에 깔끔하게 나누어떨어지지 않습니다. 따라서 VisualApplets에서는 디자인의 이미지 너비가 Parallelism으로 나누어떨어져야 합니다.

메모리 오퍼레이터를 사용한 Parallelism#

FrameBufferRandomRead 허용합니다. Parallelism 1, 메모리에 순차적으로 액세스하기 때문입니다. 디자인에서 더 높은 Parallelism을 사용하고 전체 대역폭에 영향을 주지 않으려면, 다음을 사용하여 병렬 컴포넌트를 커널 컴포넌트로 변환하십시오. CastKernel 연산자 또는 현재 픽셀의 상위 비트 컴포넌트에 다음을 사용하여 CastParallel operator.

이에 대한 예시는 Working with Kernels 튜토리얼 항목을 참조하십시오.

오퍼레이터 참조의 FrameBufferRandomRead 및 오퍼레이터 참조의 FrameBufferRandomRead (imaFlex)를 참조하십시오.

병목 현상 문제 해결#

일반적인 병목 현상은 다음의 경우에 발생합니다. InsertLine 오퍼레이터 참조 또는 InsertImage 오퍼레이터 참조가 다음와 결합되지 않은 경우 PARALLELup. 연산자 순서가 적절하지 않으면 처리량이 떨어질 수 있습니다.

삽입 오퍼레이터를 사용하면 처리 파이프라인으로 유입되는 데이터 양이 늘어나 전체 대역폭이 높아집니다. 따라서 다음 이후의 Parallelism은 InsertLine 또는 InsertImage 연산자는 결과 대역폭을 처리할 수 있을 만큼 충분히 커야 합니다.

예시#

Insert Image

위 이미지의 예시는 다음을 보여줍니다. InsertImage 연산자에는 두 개의 입력 링크가 있습니다. 각 입력 링크는 Parallelism 4를 사용하여 1250 MPixel/s의 대역폭으로 5120 × 5120픽셀 해상도의 영상을 처리합니다.

다음 작업 전에 Parallelism이 증가하지 않은 경우: InsertImage 연산자의 경우 입력당 대역폭은 1250 MPixel/s로 유지됩니다. 그러나 입력 링크가 두 개이므로 디자인은 2 × 1250 MPixel/s의 결합된 처리량을 처리해야 합니다.

이 대역폭 병목 현상을 방지하려면 다음을 사용하여 Parallelism을 높이십시오. PARALLELup 다음 이전의 연산자 InsertImage 아래 표시된 대로 연산자:

Insert Image Par UP