CUDA Graphics API Interoperability via Shared Memory Buffer

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Current systems require inefficient data copying and buffer allocation when using multiple application programming interfaces (APIs) like graphics and compute APIs, leading to reduced system performance.

Innovation Solution

A method that registers a memory buffer for address mapping, allowing multiple APIs to access it, and uses semaphore mechanisms for synchronization, enabling direct access without additional buffer allocation or data copying.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Adaptability or versatility

If data is copied between compute API and graphics API using separate buffers, then interoperability between APIs is achieved, but system performance deteriorates due to additional memory allocation and data copying operations

Engineering Contradiction:
ImproveAPI interoperabilityVSAvoidsystem performance
Core Design Contradiction:
Adaptability or versatilityVSProductivity

Solution Approach 1:

The patent merges the memory buffers of the compute API and graphics API into a single shared memory space. Instead of maintaining separate buffers that require data copying, the system allows both APIs to access the same memory buffer directly, eliminating redundant copy operations and improving system performance while maintaining full interoperability between the APIs.

Inventive Principle:
Principle #5Merging (Combining)

Solution Approach 2:

The patent eliminates the need for data copying between APIs by implementing direct memory buffer sharing. Rather than creating copies of data in intermediate buffers, the system enables both compute and graphics APIs to access the original data in place, removing the performance penalty associated with memory allocation and data copying.

Inventive Principle:
Principle #26Copying

2Reliability

If separate buffers are allocated for compute and graphics APIs, then data access isolation is ensured, but device complexity increases due to multiple buffer management requirements

Engineering Contradiction:
Improvedata access isolationVSAvoidbuffer management complexity
Core Design Contradiction:
ReliabilityVSDevice complexity

Solution Approach 1:

The patent implements a universal memory buffer that serves both compute and graphics APIs simultaneously. This single buffer structure replaces the need for multiple separate buffers, simplifying buffer management while maintaining reliable data access isolation through controlled sharing mechanisms that allow both APIs to access the same memory space safely.

Inventive Principle:
Principle #6Universality (Multi-functionality)

3Reliability

If data copying is performed between APIs, then data integrity is maintained, but loss of time occurs due to additional copy operations

Engineering Contradiction:
Improvedata integrityVSAvoiddata access time
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

The patent combines the memory buffers of compute and graphics APIs into a single shared buffer, eliminating the time-consuming data copying operations. Both APIs access the same data in place, maintaining data integrity through coordinated access control while significantly reducing the time lost to redundant copy operations.

Inventive Principle:
Principle #5Merging (Combining)

Data Source

PatentUS8539516B1System and method for enabling interoperability between application programming interfaces
Publication Date: 2013.09.17 NVIDIA CORP
  • US8539516B1 patent drawing
  • US8539516B1 patent drawing
  • US8539516B1 patent drawing

AI summary

One embodiment of the present invention sets forth a method for sharing graphics objects between a compute unified device architecture (CUDA) application programming interface (API) and a graphics API. The CUDA API includes calls used to alias graphics objects allocated by the graphics API and, subsequently, synchronize accesses to the graphics objects. When an application program emits a “register” call that targets a particular graphics object, the CUDA API ensures that the graphics object is in the device memory, and maps the graphics object into the CUDA address space. Subsequently, when the application program emits “map” and “unmap” calls, the CUDA API respectively enables and disables accesses to the graphics object through the CUDA API. Further, the CUDA API uses semaphores to synchronize accesses to the shared graphics object. Finally, when the application program emits an “unregister” call, the CUDA API configures the computing system to disregard interoperability constraints.