Class NVGPUMulticast



  • public class NVGPUMulticast
    extends java.lang.Object
    Native bindings to the NV_gpu_multicast extension.

    This extension enables novel multi-GPU rendering techniques by providing application control over a group of linked GPUs with identical hardware configuration.

    Multi-GPU rendering techniques fall into two categories: implicit and explicit. Existing explicit approaches like WGL_NV_gpu_affinity have two main drawbacks: CPU overhead and application complexity. An application must manage one context per GPU and multi-pump the API stream. Implicit multi-GPU rendering techniques avoid these issues by broadcasting rendering from one context to multiple GPUs. Common implicit approaches include alternate-frame rendering (AFR), split-frame rendering (SFR) and multi-GPU anti-aliasing. They each have drawbacks. AFR scales nicely but interacts poorly with inter-frame dependencies. SFR can improve latency but has challenges with offscreen rendering and scaling of vertex processing. With multi-GPU anti-aliasing, each GPU renders the same content with alternate sample positions and the driver blends the result to improve quality. This also has issues with offscreen rendering and can conflict with other anti-aliasing techniques.

    These issues with implicit multi-GPU rendering all have the same root cause: the driver lacks adequate knowledge to accelerate every application. To resolve this, NV_gpu_multicast provides fine-grained, explicit application control over multiple GPUs with a single context.

    Key points:

    • One context controls multiple GPUs. Every GPU in the linked group can access every object.
    • Rendering is broadcast. Each draw is repeated across all GPUs in the linked group.
    • Each GPU gets its own instance of all framebuffers, allowing individualized output for each GPU. Input data can be customized for each GPU using buffers created with the storage flag, PER_GPU_STORAGE_BIT_NV and a new API, MulticastBufferSubDataNV.
    • New interfaces provide mechanisms to transfer textures and buffers from one GPU to another.

    Requires ARB_copy_image and EXT_direct_state_access.

    • Method Detail

      • glRenderGpuMaskNV

        public static void glRenderGpuMaskNV(int mask)
        Restricts render commands to a specific set of GPUs.
        Parameters:
        mask -
      • glMulticastBufferSubDataNV

        public static void glMulticastBufferSubDataNV(int gpuMask,
                                                      int buffer,
                                                      long offset,
                                                      java.nio.ByteBuffer data)
      • glMulticastBufferSubDataNV

        public static void glMulticastBufferSubDataNV(int gpuMask,
                                                      int buffer,
                                                      long offset,
                                                      java.nio.ShortBuffer data)
      • glMulticastBufferSubDataNV

        public static void glMulticastBufferSubDataNV(int gpuMask,
                                                      int buffer,
                                                      long offset,
                                                      java.nio.IntBuffer data)
      • glMulticastBufferSubDataNV

        public static void glMulticastBufferSubDataNV(int gpuMask,
                                                      int buffer,
                                                      long offset,
                                                      java.nio.FloatBuffer data)
      • glMulticastBufferSubDataNV

        public static void glMulticastBufferSubDataNV(int gpuMask,
                                                      int buffer,
                                                      long offset,
                                                      java.nio.DoubleBuffer data)
      • glMulticastCopyBufferSubDataNV

        public static void glMulticastCopyBufferSubDataNV(int readGpu,
                                                          int writeGpuMask,
                                                          int readBuffer,
                                                          int writeBuffer,
                                                          long readOffset,
                                                          long writeOffset,
                                                          long size)
      • glMulticastCopyImageSubDataNV

        public static void glMulticastCopyImageSubDataNV(int srcGpu,
                                                         int dstGpuMask,
                                                         int srcName,
                                                         int srcTarget,
                                                         int srcLevel,
                                                         int srcX,
                                                         int srxY,
                                                         int srcZ,
                                                         int dstName,
                                                         int dstTarget,
                                                         int dstLevel,
                                                         int dstX,
                                                         int dstY,
                                                         int dstZ,
                                                         int srcWidth,
                                                         int srcHeight,
                                                         int srcDepth)
      • glMulticastBlitFramebufferNV

        public static void glMulticastBlitFramebufferNV(int srcGpu,
                                                        int dstGpu,
                                                        int srcX0,
                                                        int srcY0,
                                                        int srcX1,
                                                        int srcY1,
                                                        int dstX0,
                                                        int dstY0,
                                                        int dstX1,
                                                        int dstY1,
                                                        int mask,
                                                        int filter)
      • glMulticastFramebufferSampleLocationsfvNV

        public static void glMulticastFramebufferSampleLocationsfvNV(int gpu,
                                                                     int framebuffer,
                                                                     int start,
                                                                     java.nio.FloatBuffer v)
      • glMulticastBarrierNV

        public static void glMulticastBarrierNV()
      • glMulticastWaitSyncNV

        public static void glMulticastWaitSyncNV(int signalGpu,
                                                 int waitGpuMask)
      • glMulticastGetQueryObjectivNV

        public static void glMulticastGetQueryObjectivNV(int gpu,
                                                         int id,
                                                         int pname,
                                                         java.nio.IntBuffer params)
      • glMulticastGetQueryObjectiNV

        public static int glMulticastGetQueryObjectiNV(int gpu,
                                                       int id,
                                                       int pname)
      • glMulticastGetQueryObjectuivNV

        public static void glMulticastGetQueryObjectuivNV(int gpu,
                                                          int id,
                                                          int pname,
                                                          java.nio.IntBuffer params)
      • glMulticastGetQueryObjectuiNV

        public static int glMulticastGetQueryObjectuiNV(int gpu,
                                                        int id,
                                                        int pname)
      • glMulticastGetQueryObjecti64vNV

        public static void glMulticastGetQueryObjecti64vNV(int gpu,
                                                           int id,
                                                           int pname,
                                                           java.nio.LongBuffer params)
      • glMulticastGetQueryObjecti64NV

        public static long glMulticastGetQueryObjecti64NV(int gpu,
                                                          int id,
                                                          int pname)
      • glMulticastGetQueryObjectui64vNV

        public static void glMulticastGetQueryObjectui64vNV(int gpu,
                                                            int id,
                                                            int pname,
                                                            java.nio.LongBuffer params)
      • glMulticastGetQueryObjectui64NV

        public static long glMulticastGetQueryObjectui64NV(int gpu,
                                                           int id,
                                                           int pname)
      • glMulticastBufferSubDataNV

        public static void glMulticastBufferSubDataNV(int gpuMask,
                                                      int buffer,
                                                      long offset,
                                                      short[] data)
        Array version of: MulticastBufferSubDataNV
      • glMulticastBufferSubDataNV

        public static void glMulticastBufferSubDataNV(int gpuMask,
                                                      int buffer,
                                                      long offset,
                                                      int[] data)
        
        public static void glMulticastBufferSubDataNV(int gpuMask,
                                                      int buffer,
                                                      long offset,
                                                      float[] data)
        
        public static void glMulticastBufferSubDataNV(int gpuMask,
                                                      int buffer,
                                                      long offset,
                                                      double[] data)
        
        Array version of: MulticastBufferSubDataNV
      • glMulticastFramebufferSampleLocationsfvNV

        public static void glMulticastFramebufferSampleLocationsfvNV(int gpu,
                                                                     int framebuffer,
                                                                     int start,
                                                                     float[] v)
      • glMulticastGetQueryObjectivNV

        public static void glMulticastGetQueryObjectivNV(int gpu,
                                                         int id,
                                                         int pname,
                                                         int[] params)
        Array version of: MulticastGetQueryObjectivNV
      • glMulticastGetQueryObjectuivNV

        public static void glMulticastGetQueryObjectuivNV(int gpu,
                                                          int id,
                                                          int pname,
                                                          int[] params)
      • glMulticastGetQueryObjecti64vNV

        public static void glMulticastGetQueryObjecti64vNV(int gpu,
                                                           int id,
                                                           int pname,
                                                           long[] params)
      • glMulticastGetQueryObjectui64vNV

        public static void glMulticastGetQueryObjectui64vNV(int gpu,
                                                            int id,
                                                            int pname,
                                                            long[] params)