Dynamic Off-Chip Memory Allocation for Unified Shader Parallelism
Find Innovative SolutionsGenerate Solutions
Solution Overview
Problem
Conventional multithreaded processing systems face challenges in efficiently allocating memory for multiple threads, leading to increased costs and reduced processing performance due to the need for large off-chip memory and limited parallel processing capabilities.
Innovation Solution
The system dynamically allocates fixed-size portions of memory from a memory pool to each processing thread, allowing for greater thread parallelism without requiring a large memory pool, and enables sharing or division of the memory pool among thread types based on their memory needs.
Engineering Contradictions & Design Principles
Engineering Contradiction Analysis
1Productivity
If a large amount of off-chip memory is allocated to accommodate the greatest amount of memory needed by any thread, then all threads can be processed in parallel, but the cost of producing the processing system increases
Solution Approach 1:
The patent implements dynamic memory allocation where the memory pool is divided into allocation units that are dynamically assigned to threads based on their needs. The head pointer and tail pointer mechanism enables flexible allocation and deallocation of memory units as threads are created and completed, allowing the system to adapt memory distribution in real-time rather than statically allocating fixed memory to each thread
Solution Approach 2:
The patent merges multiple thread memory requirements into a single shared memory pool. Instead of allocating separate memory spaces for each thread, the system combines all thread memory needs into one pool that is dynamically partitioned among active threads, reducing total memory requirements while maintaining parallel processing capability
2Quantity of substance
If the amount of off-chip memory is limited to reduce cost, then the number of threads that can be processed in parallel is reduced by disabling thread processors, but the processing performance is reduced
Solution Approach 1:
The system dynamically adjusts memory allocation based on the number and type of active threads. By using a shared memory pool with dynamic allocation units, the system can support more threads in parallel than would be possible with static allocation, improving productivity without proportionally increasing memory quantity
Solution Approach 2:
The patent changes the memory allocation parameter from fixed per-thread allocation to dynamic pool-based allocation. This parameter change allows the system to optimize memory usage by allocating smaller units to threads that need less memory and reserving larger units for threads with higher memory requirements, thereby supporting greater thread parallelism within limited memory constraints
3Adaptability or versatility
If a single fixed size portion of memory is allocated to each thread based on the largest amount needed by any thread, then all thread types can be accommodated, but memory usage is inefficient for threads with smaller memory needs
Solution Approach 1:
The patent applies local quality by allowing different allocation unit sizes within the same memory pool based on the specific needs of different thread types. Rather than uniform allocation, the system can allocate larger units to vertex shaders and smaller units to pixel shaders, optimizing memory usage for each thread type's specific requirements while maintaining adaptability across all thread types
Solution Approach 2:
The dynamic allocation mechanism allows the memory pool to adapt to different thread types by allocating appropriate-sized units from the pool. When a thread is created, the system determines its memory requirements and allocates an appropriate unit from the pool, ensuring both adaptability to different thread types and efficient memory utilization
Data Source
AI summary
Systems and methods for dynamically allocating memory for thread processing may reduce memory requirements while maintaining thread processing parallelism. A memory pool is allocated to store data for processing multiple threads that does not need to be large enough to dedicate a fixed size portion of the memory pool to each thread that may be processed in parallel. Fixed size portions of the memory pool are dynamically allocated and deallocated to each processing thread. Different fixed size portions may be used for different types of threads to allow greater thread parallelism compared with a system that requires allocating a single fixed portion of the memory pool to each thread. The memory pool may be shared between all of the thread types or divided to provide separate memory pools dedicated to each particular thread type.


