DETAILED ACTION
Notice of Pre-AIA or AIA Status
The present application, filed on or after March 16, 2013, is being examined under the first inventor to file provisions of the AIA .
Claim Rejections - 35 USC § 103
In the event the determination of the status of the application as subject to AIA 35 U.S.C. 102 and 103 (or as subject to pre-AIA 35 U.S.C. 102 and 103) is incorrect, any correction of the statutory basis (i.e., changing from AIA to pre-AIA ) for the rejection will not be considered a new ground of rejection if the prior art relied upon, and the rationale supporting the rejection, would be the same under either status.
The following is a quotation of 35 U.S.C. 103 which forms the basis for all obviousness rejections set forth in this Office action:
A patent for a claimed invention may not be obtained, notwithstanding that the claimed invention is not identically disclosed as set forth in section 102, if the differences between the claimed invention and the prior art are such that the claimed invention as a whole would have been obvious before the effective filing date of the claimed invention to a person having ordinary skill in the art to which the claimed invention pertains. Patentability shall not be negated by the manner in which the invention was made.
Claim(s) 1-2, and 4-20 is/are rejected under 35 U.S.C. 103 as being unpatentable over Gruber (U.S. Pub. No. 20220284537) in view of Wood et al. (U.S. Pub. No. 20160357551).
Regarding claim 1, Gruber discloses an apparatus for graphics processing, comprising: a memory; and a processor coupled to the memory and, based at least in part on information stored in the memory, the processor is configured to (para 23, “In the example shown, the device 104 may include a processing unit 120, a content encoder/decoder 122, and a system memory 124”; also, para 25, “The processing unit 120 and the content encoder/decoder 122 may be communicatively coupled to the system memory 124 over a bus.”; also, para 29, “The processing unit 120 may be a central processing unit (CPU), a graphics processing unit (GPU), a general purpose GPU (GPGPU), or any other processing unit that may be configured to perform graphics processing.”): allocate a wave into a set of sub-waves, wherein each sub-wave in the set of sub-waves comprises a set of threads (para 59, “If so, aspects of the present disclosure may divide a wave of pixels, i.e., a group of threads, into multiple sub-waves of pixels, i.e., a plurality of sub-groups of threads.”; also, para 57, “As shown in FIG. 5, aspects of the present disclosure may divide a wave of pixels, e.g., wave 510 including 64 pixels, into multiple sub-waves of pixels, e.g., sub-waves 512, 514, 516, 518 including 16 pixels each.”); perform a set of wave operations for each sub-wave in the set of sub-waves (para 68, “At 650, GPU component 602 may execute, upon dividing the group of threads into the plurality of sub-groups of threads, a subsection of the shader program for each sub-group of threads of the plurality of sub-groups of threads, e.g., sub-waves 512, 514, 516, 518, where the subsection of the shader program may complete execution for one sub-group of threads before commencing execution for a subsequent sub-group of threads.”); set of wave operations, a last active thread from amongst the set of threads for each sub-wave in the set of sub-waves.
However, in a similar field of endeavor, Wood discloses identify, based on the set of wave operations, a last active thread from amongst the set of threads for each sub-wave in the set of sub-waves (para 22, “the threads 230-235 collectively identify one of the threads to execute a CAS operation 242. The identification can be made in any of a number of ways, including random selection, selection based on a thread order, and the like. In the illustrated example, thread 231 is the thread selected to execute the CAS operation 242.”; also, para 27, “At block 304 the threads collectively identify one thread of the wavefront as a leader thread to execute a CAS operation to test the memory location targeted by the CFP operation.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves, each sub-wave comprising a sub-group of threads, and executing a subsection of a shader program for each sub-wave, with the features of Wood's invention of collectively identifying, based on a thread order, one thread of a wavefront as the thread to perform an operation. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Wood teaches that the threads collectively identify one of the threads to perform the operation and that the identification can be made by "selection based on a thread order," so selecting the thread that is last in the thread order designates the last active thread as the representative of the group. Second, Gruber already executes its wave operations separately for each sub-wave, that is, for each sub-group of threads, so applying Wood's thread-order identification to each of Gruber's sub-waves yields, for each sub-wave, the last active thread from amongst the set of threads of that sub-wave. Third, both Gruber and Wood operate on single instruction multiple data wavefronts in which a group of threads executes together, so one of ordinary skill would have had a reasonable expectation of success in identifying the last active thread of each sub-wave by applying Wood's thread-order selection to the threads of that sub-wave.
Regarding claim 2, Gruber as modified by Wood discloses the apparatus of claim 1, processor is further configured to: inactivate, based on the identification of the last active thread, one or more remaining threads in the set of threads for each sub-wave in the set of sub-waves, wherein the one or more remaining threads do not include the last active thread.
However, in a similar field of endeavor, Wood discloses wherein the processor is further configured to: inactivate, based on the identification of the last active thread, one or more remaining threads in the set of threads for each sub-wave in the set of sub-waves, wherein the one or more remaining threads do not include the last active thread (para 22, “the threads 230-235 collectively identify one of the threads to execute a CAS operation 242. The identification can be made in any of a number of ways, including random selection, selection based on a thread order, and the like. In the illustrated example, thread 231 is the thread selected to execute the CAS operation 242.”, also, para 22, “The threads that were not selected wait for the result of the CAS operation 242 from the thread 231.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves each comprising a set of threads with the features of Wood's invention of identifying one thread of a wavefront and having the threads that were not selected wait while that one thread proceeds. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Wood teaches that once one thread is identified, the threads that were not selected wait for the result from the selected thread, which is an inactivation of the remaining threads that does not include the selected thread. Second, the combination already designates, for each sub-wave, a last active thread as the selected representative, so causing the remaining threads of the sub-wave to wait while that representative proceeds inactivates the one or more remaining threads other than the last active thread. Third, having the non-selected threads wait avoids those threads redundantly performing the work delegated to the representative thread, which one of ordinary skill would have recognized as conserving execution resources within each sub-wave.
Regarding claim 4, Gruber as modified by Wood discloses the apparatus of claim 2, processor is further configured to: perform, based on the inactivation of the one or more remaining threads, a set of atomic operations via the last active thread for each sub-wave in the set of sub-waves.
However, in a similar field of endeavor, Wood discloses wherein the processor is further configured to: perform, based on the inactivation of the one or more remaining threads, a set of atomic operations via the last active thread for each sub-wave in the set of sub-waves (para 27, “At block 304 the threads collectively identify one thread of the wavefront as a leader thread to execute a CAS operation to test the memory location targeted by the CFP operation.”; also, para 23, “The thread 231 executes the CAS operation 242 to test whether the base pointer 120 is being modified by another thread.”; also, para 26, “Further, the GPU 104 executes the fetch-and-phi operation by using only one CAS operation for all the threads of a wavefront.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves each comprising a set of threads with the features of Wood's invention of executing a single atomic compare-and-swap operation via one selected leader thread for all threads of a wavefront. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Wood teaches that one selected leader thread executes the atomic compare-and-swap operation for all the threads of the wavefront while the remaining threads wait, so the atomic operation is performed via the selected representative thread based on the inactivation of the remaining threads. Second, the combination already designates the last active thread of each sub-wave as that representative and inactivates the remaining threads, so directing the atomic operation through the last active thread of each sub-wave follows directly from Wood's leader-thread approach. Third, executing only one atomic operation per sub-wave via the representative thread, rather than one per thread, reduces redundant atomic accesses, which one of ordinary skill would have recognized as improving the efficiency of the per-sub-wave processing.
Regarding claim 5, Gruber as modified by Wood discloses the apparatus of claim 4, processor is further configured to: reactivate, based on the performance of the set of atomic operations, the one or more remaining threads in the set of threads for each sub-wave in the set of sub-waves.
However, in a similar field of endeavor, Wood discloses wherein the processor is further configured to: reactivate, based on the performance of the set of atomic operations, the one or more remaining threads in the set of threads for each sub-wave in the set of sub-waves (para 24, “The thread 231 provides the CAS result 243 to each of the other threads of the wavefront. In some embodiments, the thread 231 providing the CAS result 243 provides the result via an explicit reduction instruction. Specifically, the leader thread 231 passes the base pointer as an argument to the reduction instruction and the other work-items pass a zero value to the reduction instruction. After execution of the reduction completes, all work-items (230-235) in the group have the value of the CAS result 243.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves each comprising a set of threads with the features of Wood's invention of providing the result of the atomic operation back to each of the other threads of the wavefront after the atomic operation completes. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Wood teaches that, after execution of the atomic operation completes, the selected thread provides the result to each of the other threads so that all work-items in the group have the value of the result, which returns the previously waiting remaining threads to active participation. Second, the combination has inactivated the remaining threads of each sub-wave while the last active thread performed the atomic operation, so providing the result back to those remaining threads after the atomic operation reactivates them based on the performance of the atomic operation. Third, returning the result to and resuming the remaining threads allows the sub-wave to continue execution as a unit after the single representative atomic operation, which one of ordinary skill would have recognized as necessary for the remaining threads to make use of the result.
Regarding claim 6, Gruber as modified by Wood discloses the apparatus of claim 4, wherein to perform the set of atomic operations via the last active thread for each sub-wave in the set of sub-waves, the processor is configured to: the last active thread for each sub-wave in the set of sub-waves, at least one of a set of read operations, a set of modify operations, or a set of write operations to occur without any interruption.
However, in a similar field of endeavor, Wood discloses enable, via the last active thread for each sub-wave in the set of sub-waves, at least one of a set of read operations, a set of modify operations, or a set of write operations to occur without any interruption (para 19, “To prevent race conditions and other memory access errors, the threads of a wavefront can employ atomic memory operations, including conditional fetch-and-phi operations, to facilitate communication of data between the threads.”; also, para 23, “In some embodiments, the thread 231 does this by reading the base pointer value 120 into a variable, using the CAS operation to swap a new value for the base pointer value 120, and comparing the value returned by the CAS operation 242 to the variable.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves each comprising a set of threads with the features of Wood's invention of having the selected thread read a memory value and use an atomic compare-and-swap operation to swap in a new value. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Wood teaches that the selected thread reads the base pointer value into a variable and uses the compare-and-swap operation to swap in a new value, which is a read operation and a modify and write operation carried out via the selected thread. Second, Wood teaches that the threads employ atomic memory operations, and an atomic memory operation completes the read of the memory value and the conditional write of the new value as a single indivisible unit, so the read, modify, and write enabled via the last active thread occur without any interruption by other threads. Third, performing the read-modify-write through a single atomic compare-and-swap via the representative thread avoids interference among the threads of the sub-wave when accessing the shared memory location, which one of ordinary skill would have recognized as ensuring correctness of the shared update.
Regarding claim 7, Gruber as modified by Wood discloses the apparatus of claim 1, last active thread for each sub-wave in the set of sub-waves.
However, in a similar field of endeavor, Wood discloses identify, in parallel, the last active thread for each sub-wave in the set of sub-waves (para 22, “the threads 230-235 collectively identify one of the threads to execute a CAS operation 242.”; also, para 18, “The SIMD units execute the sequence of instructions in lockstep, so that each SIMD unit arrives at a given instruction in the sequence at substantially the same time.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves each comprising a set of threads with the features of Wood's invention of having the threads of a wavefront collectively identify the one thread while executing in lockstep. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Wood teaches that the threads collectively identify the one thread and that the SIMD units execute in lockstep so that each arrives at a given instruction at substantially the same time, so the identification is carried out across the threads in parallel rather than serially. Second, Gruber organizes the threads of each sub-wave on a single instruction multiple data substrate that advances together, so performing Wood's collective, lockstep identification identifies the last active thread of each sub-wave in parallel. Third, identifying the last active thread in parallel rather than by serially polling each thread reduces the time to designate the representative thread for each sub-wave, which one of ordinary skill would have recognized as improving throughput of the per-sub-wave processing.
Regarding claim 8, Gruber as modified by Wood discloses the apparatus of claim 7, wherein to identify, in parallel, the last active thread for each sub-wave in the set of sub-waves, the processor is configured to: last active thread for each sub-wave in the set of sub-waves outside of a loop operation associated with the set of wave operations for each sub-wave in the set of sub-waves.
However, in a similar field of endeavor, Wood discloses identify, in parallel, the last active thread for each sub-wave in the set of sub-waves outside of a loop operation associated with the set of wave operations for each sub-wave in the set of sub-waves (para 22, “the threads 230-235 collectively identify one of the threads to execute a CAS operation 242.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of executing wave operations for each sub-wave, which include a texture loop over multiple texture instructions, with the features of Wood's invention of collectively identifying the one thread of a wavefront as a single identification act. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Gruber teaches that the wave operations for each sub-wave are associated with a loop, describing texture loop hardware that "can allow it to execute sub-wave operations across multiple texture instructions," which is a loop operation associated with the set of wave operations. Second, Wood identifies the representative thread as a single collective act rather than an iterative one, so performing that identification once, outside the texture loop rather than on each iteration of it, follows from combining Wood's single collective identification with Gruber's texture loop. Third, identifying the last active thread once outside the loop, rather than repeating the identification on every iteration of the texture loop, avoids redundant work and reduces the operations performed per sub-wave, which one of ordinary skill would have recognized as improving the efficiency of the per-sub-wave processing that Gruber performs.
Regarding claim 9, Gruber as modified by Wood discloses the apparatus of claim 1, last active thread from amongst a plurality of active threads for each sub-wave in the set of sub-waves.
However, in a similar field of endeavor, Wood disclose select the last active thread from amongst a plurality of active threads for each sub-wave in the set of sub-waves (para 22, “the threads 230-235 collectively identify one of the threads to execute a CAS operation 242. The identification can be made in any of a number of ways, including random selection, selection based on a thread order, and the like. In the illustrated example, thread 231 is the thread selected to execute the CAS operation 242.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves each comprising a set of threads with the features of Wood's invention of selecting one thread from amongst the threads of a wavefront based on a thread order. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Wood teaches selecting one thread from amongst the threads of the wavefront and that the selection can be made based on a thread order, so the thread that is last in the thread order is selected from amongst the plurality of threads. Second, Gruber organizes the threads of each sub-wave together, so selecting the last thread in thread order of a sub-wave selects the last active thread from amongst the plurality of active threads of that sub-wave. Third, selecting one definite thread of each sub-wave as the representative ensures that a participating thread is designated to carry forward the per-sub-wave result, which one of ordinary skill would have recognized as necessary for correctly producing that result.
Regarding claim 10, Gruber as modified by Wood discloses the apparatus of claim 9, wherein to select the last active thread from amongst the plurality of active threads for each sub-wave in the set of sub-waves, the processor is configured to: last active thread from amongst the plurality of active threads for each sub-wave in the set of sub-waves, the processor is configured to: select, via a get-last multiple operation, the last active thread from amongst the plurality of active threads for each sub-wave in the set of sub-waves.
However, in a similar field of endeavor, Wood discloses select the last active thread from amongst the plurality of active threads for each sub-wave in the set of sub-waves, the processor is configured to: select, via a get-last multiple operation, the last active thread from amongst the plurality of active threads for each sub-wave in the set of sub-waves (para 22, “The identification can be made in any of a number of ways, including random selection, selection based on a thread order, and the like.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves each comprising a set of threads with the features of Wood's invention of selecting the one thread based on a thread order. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Wood teaches that the selection of the one thread can be made based on a thread order, and an operation that selects the thread that is last in the thread order from among the threads is, under the broadest reasonable interpretation, a get-last operation performed over the multiple threads. Second, Gruber organizes the threads of each sub-wave together, so applying Wood's thread-order selection to the threads of each sub-wave returns the last active thread of that sub-wave. Third, using a single order-based selection to return the last thread provides a direct mechanism for designating the representative thread of each sub-wave, which one of ordinary skill would have recognized as a reliable way to obtain the per-sub-wave representative.
Regarding claim 11, Gruber as modified by Wood discloses the apparatus of claim 9, last active thread is a last active fiber, and wherein the plurality of active threads is a plurality of active fibers for each sub-wave in the set of sub-waves.
However, in a similar field of endeavor, Wood discloses wherein the last active thread is a last active fiber, and wherein the plurality of active threads is a plurality of active fibers for each sub-wave in the set of sub-waves (para 18, “In some embodiments, the threads of a wavefront being executed at the SIMD units each have the same sequence of instructions to be executed on the different data operands.”; also, para 24, “After execution of the reduction completes, all work-items (230-235) in the group have the value of the CAS result 243.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves each comprising a set of threads with the features of Wood's invention of a wavefront of threads, also referred to as work-items, executing on the single instruction multiple data units. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Wood teaches that the threads of a wavefront, also referred to as work-items, each execute the same sequence of instructions on different data operands, which is the same per-lane unit of execution that the broadest reasonable interpretation of a fiber denotes. Second, because the combination identifies a last active thread from amongst a plurality of active threads of each sub-wave, and a thread, work-item, and fiber are the same per-lane unit of execution under the broadest reasonable interpretation, the last active thread is a last active fiber and the plurality of active threads is a plurality of active fibers. Third, treating the threads of each sub-wave as fibers is no more than applying a known label for the per-lane unit of execution, which one of ordinary skill would have done with predictable results and without altering the operation of identifying the representative unit of each sub-wave.
Regarding claim 12, Gruber as modified by Wood discloses the apparatus of claim 1, wherein each sub-wave in the set of sub-waves corresponds to a cluster, and wherein the cluster includes the set of threads for each sub-wave in the set of sub-waves (Gruber: para 59, “If so, aspects of the present disclosure may divide a wave of pixels, i.e., a group of threads, into multiple sub-waves of pixels, i.e., a plurality of sub-groups of threads.”; also, para 64, “At 610, GPU component 602 may determine whether to divide a group of threads, e.g., wave 510, into a plurality of sub-groups of threads, e.g., sub-waves 512, 514, 516, 518, each thread of the group of threads being associated with a shader program.”).
Regarding claim 13, Gruber as modified by Wood discloses the apparatus of claim 12, set of threads in the cluster is associated with at least one of: a fiber identifier (ID), a current active mask, a get-last multiple operation, a local atomic operation, or a join point.
However, in a similar field of endeavor, Wood discloses wherein each of the set of threads in the cluster is associated with at least one of: a fiber identifier (ID), a current active mask, a get-last multiple operation, a local atomic operation, or a join point (para 19, “To prevent race conditions and other memory access errors, the threads of a wavefront can employ atomic memory operations, including conditional fetch-and-phi operations, to facilitate communication of data between the threads.”; also, para 23, “The thread 231 executes the CAS operation 242 to test whether the base pointer 120 is being modified by another thread.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-groups of threads with the features of Wood's invention of having the threads of a wavefront employ atomic memory operations including a compare-and-swap operation. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, the claim requires only that each thread be associated with at least one of the listed items, and Wood teaches that the threads of a wavefront employ atomic memory operations, including the compare-and-swap operation, which is a local atomic operation that each thread of the group is associated with. Second, Gruber organizes the threads of each sub-wave into a sub-group, so associating each thread of that sub-group with the atomic memory operation taught by Wood associates each thread of the cluster with a local atomic operation. Third, associating the threads of a sub-wave with a common atomic operation provides a uniform mechanism for the threads to communicate data while preventing race conditions, which one of ordinary skill would have recognized as improving the correctness of the per-sub-wave processing.
Regarding claim 14, Gruber as modified by Wood discloses the apparatus of claim 12, wherein the set of threads in the cluster includes: two (2) threads, four (4) threads, eight (8) threads, sixteen (16) threads, thirty-two (32) threads, or sixty-four (64) threads (Gruber: para 39, “a typical wave size for a SIMD vector may include a number of threads or pixels, e.g., between 32 and 128 threads or pixels. Some architecture may also utilize a lower amount of threads or pixels, e.g., 16 threads or pixels.”; also, para 56, “wave 510 includes sub-waves 512, 514, 516, 518, each of which is 16 pixels.”).
Regarding claim 15, Gruber as modified by Wood discloses the apparatus of claim 1, wherein the processor is further configured to: obtain an indication of the wave prior to the allocation of the wave into the set of sub-waves, wherein the allocation of the wave into the set of sub-waves is based on the obtained wave (Gruber: para 64, “At 610, GPU component 602 may determine whether to divide a group of threads, e.g., wave 510, into a plurality of sub-groups of threads, e.g., sub-waves 512, 514, 516, 518, each thread of the group of threads being associated with a shader program.”; also, para 57, “As shown in FIG. 5, aspects of the present disclosure may divide a wave of pixels, e.g., wave 510 including 64 pixels, into multiple sub-waves of pixels, e.g., sub-waves 512, 514, 516, 518 including 16 pixels each.”).
Regarding claim 16, Gruber as modified by Wood discloses the apparatus of claim 1, wherein the processor is further configured to: output an indication of the last active thread for each sub-wave in the set of sub-waves (Gruber: para 70, “At 660, GPU component 602 may store, in the cache 604, the memory footprint 662 of the subsection of the shader program for each of the plurality of sub-groups of threads, e.g., sub-waves 512, 514, 516, 518.”).
Regarding claim 17, Gruber as modified by Wood discloses the apparatus of claim 16, wherein the apparatus is a wireless communication device, further comprising at least one of an antenna or a transceiver coupled to the processor, wherein to output the indication of the last active thread for each sub-wave in the set of sub-waves, the processor is configured to: transmit, to at least one component at a graphics processing unit (GPU) or a central processing unit (CPU) via at least one of the antenna or the transceiver, the indication of the last active thread for each sub-wave in the set of sub-waves (Gruber: para 71, “The method may be performed by an apparatus, such as an apparatus for graphics processing, a GPU or other graphics processor, a graphics shader, a compiler, a GPU pipeline, a wireless communication device, and/or any apparatus that can perform graphics processing as used in connection with the examples of FIGS. 1-6.”; also, para 31, “The receiver 128 and the transmitter 130 may be combined into a transceiver 132. In such examples, the transceiver 132 may be configured to perform any receiving function and/or transmitting function described herein with respect to the device 104.”; also, para 29, “The processing unit 120 may be a central processing unit (CPU), a graphics processing unit (GPU), a general purpose GPU (GPGPU), or any other processing unit that may be configured to perform graphics processing.”).
Regarding claim 18, Gruber as modified by Wood discloses the apparatus of claim 16, wherein to output the indication of the last active thread for each sub-wave in the set of sub-waves, the processor is configured to: store, in a graphics processing unit (GPU), the indication of the last active thread for each sub-wave in the set of sub-waves (Gruber: para 63, “As shown in FIG. 6, diagram 600 includes example communications between GPU component 602, e.g., a graphics shader or a compiler, and cache 604, e.g., a texture cache at a GPU, in accordance with one or more techniques of this disclosure.”; also, para 70, “At 660, GPU component 602 may store, in the cache 604, the memory footprint 662 of the subsection of the shader program for each of the plurality of sub-groups of threads, e.g., sub-waves 512, 514, 516, 518.”).
Regarding claim 19, Gruber discloses a method of graphics processing, comprising (para 71, “FIG. 7 is a flowchart 700 of an example method of graphics processing in accordance with one or more techniques of this disclosure.”): allocating a wave into a set of sub-waves, wherein each sub-wave in the set of sub-waves comprises a set of threads (para 59, “If so, aspects of the present disclosure may divide a wave of pixels, i.e., a group of threads, into multiple sub-waves of pixels, i.e., a plurality of sub-groups of threads.”; also, para 57, “As shown in FIG. 5, aspects of the present disclosure may divide a wave of pixels, e.g., wave 510 including 64 pixels, into multiple sub-waves of pixels, e.g., sub-waves 512, 514, 516, 518 including 16 pixels each.”); performing a set of wave operations for each sub-wave in the set of sub-waves (para 68, “At 650, GPU component 602 may execute, upon dividing the group of threads into the plurality of sub-groups of threads, a subsection of the shader program for each sub-group of threads of the plurality of sub-groups of threads, e.g., sub-waves 512, 514, 516, 518, where the subsection of the shader program may complete execution for one sub-group of threads before commencing execution for a subsequent sub-group of threads.”); set of wave operations, a last active thread from amongst the set of threads for each sub-wave in the set of sub-waves.
However, in a similar field of endeavor, Wood discloses identifying, based on the set of wave operations, a last active thread from amongst the set of threads for each sub-wave in the set of sub-waves (para 22, “the threads 230-235 collectively identify one of the threads to execute a CAS operation 242. The identification can be made in any of a number of ways, including random selection, selection based on a thread order, and the like. In the illustrated example, thread 231 is the thread selected to execute the CAS operation 242.”; also, para 27, “At block 304 the threads collectively identify one thread of the wavefront as a leader thread to execute a CAS operation to test the memory location targeted by the CFP operation.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves, each sub-wave comprising a sub-group of threads, and executing a subsection of a shader program for each sub-wave, with the features of Wood's invention of collectively identifying, based on a thread order, one thread of a wavefront as the thread to perform an operation. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Wood teaches that the threads collectively identify one of the threads to perform the operation and that the identification can be made by "selection based on a thread order," so selecting the thread that is last in the thread order designates the last active thread as the representative of the group. Second, Gruber already executes its wave operations separately for each sub-wave, that is, for each sub-group of threads, so applying Wood's thread-order identification to each of Gruber's sub-waves yields, for each sub-wave, the last active thread from amongst the set of threads of that sub-wave. Third, both Gruber and Wood operate on single instruction multiple data wavefronts in which a group of threads executes together, so one of ordinary skill would have had a reasonable expectation of success in identifying the last active thread of each sub-wave by applying Wood's thread-order selection to the threads of that sub-wave.
Regarding claim 20, Gruber discloses a computer-readable medium storing computer executable code for graphics processing, the code when executed by a processor causes the processor to (para 29, “the processing unit 120 may store instructions for the software in a suitable, non-transitory computer-readable storage medium, e.g., internal memory 121, and may execute the instructions in hardware using one or more processors to perform the techniques of this disclosure.”): allocate a wave into a set of sub-waves, wherein each sub-wave in the set of sub-waves comprises a set of threads (para 59, “If so, aspects of the present disclosure may divide a wave of pixels, i.e., a group of threads, into multiple sub-waves of pixels, i.e., a plurality of sub-groups of threads.”); perform a set of wave operations for each sub-wave in the set of sub-waves (para 68, “At 650, GPU component 602 may execute, upon dividing the group of threads into the plurality of sub-groups of threads, a subsection of the shader program for each sub-group of threads of the plurality of sub-groups of threads, e.g., sub-waves 512, 514, 516, 518, where the subsection of the shader program may complete execution for one sub-group of threads before commencing execution for a subsequent sub-group of threads.”); set of wave operations, a last active thread from amongst the set of threads for each sub-wave in the set of sub-waves.
However, in a similar field of endeavor, Wood discloses identify, based on the set of wave operations, a last active thread from amongst the set of threads for each sub-wave in the set of sub-waves (para 22, “the threads 230-235 collectively identify one of the threads to execute a CAS operation 242. The identification can be made in any of a number of ways, including random selection, selection based on a thread order, and the like. In the illustrated example, thread 231 is the thread selected to execute the CAS operation 242.”; also, para 27, “At block 304 the threads collectively identify one thread of the wavefront as a leader thread to execute a CAS operation to test the memory location targeted by the CFP operation.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves, each sub-wave comprising a sub-group of threads, and executing a subsection of a shader program for each sub-wave, with the features of Wood's invention of collectively identifying, based on a thread order, one thread of a wavefront as the thread to perform an operation. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Wood teaches that the threads collectively identify one of the threads to perform the operation and that the identification can be made by "selection based on a thread order," so selecting the thread that is last in the thread order designates the last active thread as the representative of the group. Second, Gruber already executes its wave operations separately for each sub-wave, that is, for each sub-group of threads, so applying Wood's thread-order identification to each of Gruber's sub-waves yields, for each sub-wave, the last active thread from amongst the set of threads of that sub-wave. Third, both Gruber and Wood operate on single instruction multiple data wavefronts in which a group of threads executes together, so one of ordinary skill would have had a reasonable expectation of success in identifying the last active thread of each sub-wave by applying Wood's thread-order selection to the threads of that sub-wave.
Claim(s) 3 is/are rejected under 35 U.S.C. 103 as being unpatentable over Gruber (U.S. Pub. No. 20220284537) in view of Wood et al. (U.S. Pub. No. 20160357551), further in view of Leather et al. (U.S. Pub. No. 20120204014).
Regarding claim 3, Gruber as modified by Wood discloses the apparatus of claim 2, one or more remaining threads in the set of threads for each sub-wave in the set of sub-waves, the processor is configured to: inactivate the one or more remaining threads in the set of threads for each sub-wave in the set of sub-waves until a target program counter is reached.
However, in a similar field of endeavor, Leather discloses wherein to inactivate the one or more remaining threads in the set of threads for each sub-wave in the set of sub-waves, the processor is configured to: inactivate the one or more remaining threads in the set of threads for each sub-wave in the set of sub-waves until a target program counter is reached (para 82, “the mask contains information regarding which of the threads evaluate the condition as true, and which threads evaluate the condition as false. One set of threads is thus masked off, and the other set of threads is executed.”; also, para 85, “an identifier representing the larger set of threads is pushed onto the stack, and the smaller set of threads is executed. This process continues until the join point 214 is reached, at which point all code in the block has finished executing.”; also, para 90, “In an embodiment, the program counter is also pushed onto a stack. In this example, the program counter is pointing to "pcb," representing the second set of threads 406.”; also, para 91, “After thread 416 is finished executing, threads from the stack 420 are processed. The mask and program counter representing threads 418 are popped (as these were the last to be pushed onto the stack) and are executed.”).
It would have been obvious to one of ordinary skill in the art before the effective filing date of the claimed invention to have modified Gruber's invention of dividing a wave into a plurality of sub-waves each comprising a set of threads, as modified by Wood's invention of having non-selected threads wait, with the features of Leather's invention of masking off a set of threads and holding them, by pushing a mask and a program counter onto a stack, until the stored program counter is reached. One of ordinary skill in the art would have been motivated to make this combination for the following reasons. First, Leather teaches masking off one set of threads while pushing an identifier comprising a mask and a program counter onto a stack, the program counter pointing to the resume address of the masked-off set, and holding that set until the mask and program counter are popped and executed. Second, the combination already inactivates the remaining threads of each sub-wave while the last active thread proceeds, so holding those masked-off remaining threads until the stored program counter, that is the target program counter at which they resume, is reached supplies a definite condition that ends their inactivation. Third, using a stored program counter to govern when the inactivated threads resume ensures the remaining threads reconverge and resume at the correct instruction, which one of ordinary skill would have recognized as necessary for correct execution of the sub-wave after the representative thread completes its operation.
Conclusion
Any inquiry concerning this communication or earlier communications from the examiner should be directed to Jai Li whose telephone number is (571)272-1170. The examiner can normally be reached Mon-Thu between 06:00-16:00 EST.
Examiner interviews are available via telephone, in-person, and video conferencing using a USPTO supplied web-based collaboration tool. To schedule an interview, applicant is encouraged to use the USPTO Automated Interview Request (AIR) at http://www.uspto.gov/interviewpractice.
If attempts to reach the examiner by telephone are unsuccessful, the examiner’s supervisor, Xiao Wu can be reached at (571)272-7761. The fax phone number for the organization where this application or proceeding is assigned is 571-273-8300.
Information regarding the status of published or unpublished applications may be obtained from Patent Center. Unpublished application information in Patent Center is available to registered users. To file and manage patent submissions in Patent Center, visit: https://patentcenter.uspto.gov. Visit https://www.uspto.gov/patents/apply/patent-center for more information about Patent Center and https://www.uspto.gov/patents/docx for information about filing in DOCX format. For additional questions, contact the Electronic Business Center (EBC) at 866-217-9197 (toll-free). If you would like assistance from a USPTO Customer Service Representative, call 800-786-9199 (IN USA OR CANADA) or 571-272-1000.
/JAI W LI/Junior Examiner, Art Unit 2613
/XIAO M WU/Supervisory Patent Examiner, Art Unit 2613