Framelocking without Sync card?

Hi, I’m trying to drive a large LED wall which would utilise 4 outputs on a single GPU.
From my understanding, I would need to buy a sync card if I need to:

  • Sync across multiple GPUs (without NVLink)
  • Sync to an external source
  • Sync different monitor resolution / refresh rate (which cannot create a NVIDIA mosaic)

But what about some customized resolution on a single GPU? For example the EDID of each device would return 3000x1200, can I create a mosaic of 12000x1200 and framelock the outputs?

If yes, would it support any fullscreen application or do I need to build my own app to use the SDK properly?

TIA!

@Frank_Quadro would you shed some light on this? thank you

ok, let me try to shed some light:
for a perfect, artifact free image across multiple screens, it needs basically 2 things:

  • A) pixel scanout in sync, picture all topmost lines of pixels on each screen being scanned out in perfect synchronization
  • B) framesync, a (SW) mechanism, to ensure each image on each screen is showing the same frame(count), as in: make all (swapgroup’d) render-threads WAIT for the busiest=slowest member of the group, before ALL swap buffers to show the next frame N+1.
    Now, B) is easy, when there is only a single render-window, single render-task: =Mosaic. For a single GPU Mosaic, it only needs identical screens, to (auto) achieve A), and B is a given.
    For a Mosaic spanning more GPUs, it also needs a Sync-mechanism for A), so either a NVlink bridge (for max. of 2 GPUs, actually supporting NVlink) or a QuadroSync card (for more than 2 GPUs, or where no NVlink is avail, but the sync connector is [down from highest end to 4000 class], to also achieve A). But a single Mosaic will always show the single=same) frame, it does NOT need that SW framelock B)…

As soon as you want to sync 2 separate desktops/screens (opposite of a single desktop spanning multiple screens=Mosaic), you NEED the QuadroSync card, it also enables B), the SwapAPI, which for more than one thread, is needed, to keep images in framelock.

so:
for single system:
single GPU: Mosaic=no sync card, 2-4 individual (non-Mosaic) outs need sync card!
2x GPUs: Mosaic, needs NVlink or sync card, 5-8 individual outs need sync card
2+ GPUs: Mosaic needs sync card, 8+ individual outs need sync card

for multiple systems, each system needs ONE sync card:
single GPU per system needs a sync card to sync to other GPU/system, no matter if single desktop, multiple desktops/screens or one desktop spanned across multiple screens=mosaic, so a sync of multiple mosaics. [CAN’T span mosaic across systems!]
Same for multiple GPUs in multiple systems, NEED one sync card per system.

ALL but the single mosaic need B), the SW framelock, so an application calling our SWAPapi commands, to enable for every member of the group/barrier to wait for the slowest one to release the barrier, for a synchronized buffer swap to frame N+1…

So, if my above listing is conclusive, I should have answered, that for your single GPU Mosaic, you DON’T need a sync card, and any (3D)app running single thread, so typically fullscreen, will be sync’d. Note that 2D rendering (=window moving etc.) runs a completely different codepath, and cannot be sync’d, you might always experience artifacts when just moving windows around your sync’d desktops…

Your (3D)apps’ performance may vary, specially depending on amount of pixels to be rendered and complexity of content.
Single GPU mosaic may work ok for like digital signage already on mid range GPUs, more demanding content or video playback across bigger screen estate may need high end GPUs (for the speed of framebuffer), while realtime 3D generated content will often not run as fast as desired even on the ultra highest end GPU, given they all have to wait for the slowest=busiest GPU (specially important/relevant for rather detailed geometry in just a small area of the screen (i.e. lights of a car in just a single quadrant of a mosaic or sync’d screen setup…).
To overcome the problem of a single GPU being to slow for the content in its desired resolutiop and FPS, the only path is to go for cluster-aware applications, which split up and distribute separate parts of the workload onto separate GPUs (GPUaffinity) or GPUs in multiple systems, and then use the SWAPapi to sync the frames across the cluster as well…

Final remark on to-be-sync’d devices: we can only sync ‘identical’ screens, we can’t bruteforce different screens to run the exact same timing! (some work in progress to allows for sync of different resolutions, as long as they happen to run at the EXACT same refresh rate, as in 20 to 50ppm identical!) Same tolerance is for house-sync: we cannot just use housesync as the external clock source, and force that clock/refresh rate onto random monitors! All monitors must be nativly having same modeline (at least same refresh rate), and the housesync must be generating that exact same reference clock, within 20ppm…

For question, feel free to ping me here ;-)
thanks
-Frank