Teledyne SP Devices ADQ7 User Manual Download Page 9

Classification

Revision

Public

PA1

Document ID

Print date

19-2241

2019-05-02

4.3.2

AMD

The DMA buffers allocated with OpenCL has one marker address each. Since the application only needs

2 markers in total, use the marker addresses associated with the data buffers.

4.4

Wait for a Completed Buffer

Two markers are used to detect completed buffers. The marker associated with data and data valid

buffers 0 will only take on odd values and the marker associated with data and data valid buffers 1

will take on even values. The initial marker value is 1 and the maximum marker value is

2

32

1

the

succeeding marker value will be 0.

4.4.1

Nvidia

Completed buffers are detected by host. Call function

WaitforGPUMarker()

which will return as soon as

a buffer is completed (since last function call) or when the specified timeout is reached.

WaitforGPU-

Marker()

will return the latest marker value via argument

marker_list

. The completed data and data

valid buffers can be determined as:

completed buffers

= (

returned marker

+

1

)

mod 2

It is also recommended to compare returned marker value with expected marker value to detect missed

buffers which typically means that streaming is faster than your application.

4.4.2

AMD

Completed buffers are detected by GPU. The function

clEnqueueWaitSignalAMD()

is used to make

GPU wait until the marker associated with the specified buffer is equal to or greater than the specified

value. Operations added to the queue after a

clEnqueueWaitSignalAMD()

will not be performed until

the

clEnqueueWaitSignalAMD()

operation is finished. When operations are added to the queue they

can be connected to a

cl_event

. Use function

clWaitForEvents()

to make host wait for one or several

events. It should be noted that in some systems

clWaitForEvents()

only returns when all

clEnqueue-

WaitSignalAMD()

calls are finished.

4.5

Detect and Handle Overflows

It is recommended to frequently check for overflows with ADQ function

GetStreamOverflow()

, no de-

tected overflows means that all data since last successful

GetStreamOverflow()

call is correct. If an

overflow is detected streaming has to be restarted by calling ADQ functions

StopStreaming()

,

SetupDMA-

P2p2D()

and

StartStreaming()

. Other than loss of data overflow may cause unexpected change in

throughput or a total halt of streaming.

4.6

Process Received Data and Reset the Data Valid Buffer

The samples are written in

int16_t

format into buffers. In two-channel mode samples from channel A

and B are interleaved. Macros in

gpu_streaming_defines.h

shows how to access a given sample in a

ADQ7 GPU Peer-To-Peer – User Guide

www.teledyne-spdevices.com

Page 8 of 11

Summary of Contents for ADQ7

Page 1: ...ADQ7 GPU Peer To Peer User Guide Author s Teledyne SP Devices Document ID 19 2241 Classification Public Revision PA1 Print date 2019 05 02...

Page 2: ...a Valid 7 4 3 Set up P2P GPU with SetupDMAP2p2D 7 4 3 1 Nvidia 7 4 3 2 AMD 8 4 4 Wait for a Completed Buffer 8 4 4 1 Nvidia 8 4 4 2 AMD 8 4 5 Detect and Handle Overflows 8 4 6 Process Received Data an...

Page 3: ...sing unit Graphics card OCT Optical coherence tomography P2P Peer to peer UL2 User logic 2 open FPGA area in the ADQ7 firmware 2 Prerequisites Hardware ADQ7 digitizer Peer to peer capable GPU Windows...

Page 4: ...he right hand side of the data buffer the data valid buffer is shown containing the number one for each valid line A A A A A A A A B B A A A A A A A A B B A A A A A A A A B B 1 1 1 1 1 1 Figure 1 Reco...

Page 5: ...e attached example code 3 3 Backplane Peer To Peer Transfer Data is written from the digitizer directly to the GPU without going through the host CPU or host memory This reduces requirement on the hos...

Page 6: ...05 02 a switch it is not a mandatory function of the PCIe standard Therefore make sure that there is a PCIe switch between the two endpoints or that the root complex supports peer to peer transfer AD...

Page 7: ...be used Initialize GPU driver Allocate and pin buffers in GPU Initialize ADQ Set up triggers Set up P2P GPU with SetupDMAP2p2D Start streaming Wait for a completed buffer Detect and handle overflows P...

Page 8: ...with data processing active 32 128 512 2048 8192 32768 131072 524288 2097152 8388608 5000 5200 5400 5600 5800 6000 6200 6400 6600 6800 7000 7200 1ch 2ch Record length samples MiB s Figure 4 Maximum t...

Page 9: ...AMD Completed buffers are detected by GPU The function clEnqueueWaitSignalAMD is used to make GPU wait until the marker associated with the specified buffer is equal to or greater than the specified v...

Page 10: ...d on the ADQ7 backplate Table 2 Signal connections for ADQ7 device Signal ADQ7 input Analog channel A A Analog channel B B optional A trigger Trig B trigger Sync optional 5 2 Nvidia Example The exampl...

Page 11: ...el module for GPUDirect make 6 Load kernel module sudo insmod sh 7 Go to directory ADQ7_GPUDirect_example source 8 Build example make 9 Run example cuda_example Once the example is running press h for...

Page 12: ...OpenCL queue which blocks the queue until a marker write is detected At that time a kernel enqueued after the marker wait can run This sequence is repeated in an alternating pattern for two buffers T...

Page 13: ...ngen 6 SE 583 30 Link ping Sweden Phone 46 0 13 645 0600 Fax 46 0 13 991 3044 Email spd_info teledyne com Copyright 2019 Teledyne Signal Processing Devices Sweden AB All rights reserved including thos...

Reviews: