IP Library Granted Patent US 12,561,138
Granted Patent B2
US 12,561,138 · App. 18/392,053 · Granted Feb 24, 2026

Performing an operation on an array of values at a processing unit

Inventor: Szabolcs Cséfalvay (Hertfordshire, GB)
Assignee: Imagination Technologies Limited
G06F9/3009G06F9/30043G06F9/5016
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,561,138
App. No.
18/392,053
Granted
Feb 24, 2026
Kind
B2
Abstract

A computer-implemented method of performing an operation on an array of values at a processing unit so as to perform a phase of the operation. For each of one or more one-dimensional sequences of values of the array of values a respective section of values of the one-dimensional sequence of values is assigned to each of a plurality of threads, and a first thread of the plurality of threads determines at least one contribution, from the section of values assigned to the first thread, to the phase of the operation that is to be completed by a second thread of the plurality of threads for a neighbouring section of values of the one-dimensional sequence of values. The at least one contribution is written to a memory, and a second thread of the plurality of threads reads the at least one contribution from the memory. and completes the phase of the operation for the neighbouring section of values assigned to the second thread in dependence on the at least one contribution read from the memory in order to generate a section of processed values.

Claims (63)

1 . A computer-implemented method of performing an operation on an array of values at a processing unit, the method comprising, so as to perform a phase of the operation:

for each of one or more one-dimensional sequences of values of the array of values:

assigning a respective section of values of the one-dimensional sequence of values to each of a plurality of threads;

a first thread of the plurality of threads determining at least one contribution, from the section of values assigned to the first thread, to the phase of the operation that is to be completed by a second thread of the plurality of threads for a neighbouring section of values of the one-dimensional sequence of values, and

writing the at least one contribution to a memory; and

a second thread of the plurality of threads reading the at least one contribution from the memory, and

completing the phase of the operation for the neighbouring section of values assigned to the second thread in dependence on the at least one contribution read from the memory in order to generate a section of processed values.

2 . The method of claim 1 , further comprising the first thread of the plurality of threads performing at least one part of the phase of the operation on at least one set of one or more values of the section of values assigned to the first thread in order to determine the at least one contribution, from said at least one set of one or more values, to the phase of the operation that is to be completed by the second thread of the plurality of threads for the neighbouring section of values of the one-dimensional sequence of values.

3 . The method of claim 2 , further comprising:

the second thread of the plurality of threads performing at least one part of the phase of the operation on at least one set of one or more values of the neighbouring section of values assigned to the second thread in order to determine at least one contribution, from said at least one set of one or more values of the neighbouring section of values, to the phase of the operation that is to be completed by the first thread for the section of values assigned to the first thread, and

writing the at least one contribution determined by the second thread to the memory; and

the first thread of the plurality of threads reading the at least one contribution determined by the second thread from the memory, and

completing the phase of the operation for the section of values assigned to the first thread in dependence on the at least one contribution determined by the second thread read from the memory in order to generate a section of processed values.

4 . The method of claim 2 , wherein completing the phase of the operation for the neighbouring section of values comprises:

the second thread performing at least one part of the phase of the operation on at least one set of one or more values of the neighbouring section of values assigned to the second thread in order to determine at least one contribution from each of said one or more values of the neighbouring section of values to the phase of the operation; and

combining said at least one contribution determined by the second thread for the neighbouring section of values with the at least one contribution read from the memory by the second thread.

5 . The method of claim 1 , further comprising the first thread of the plurality of threads determining one or more values of the section of values assigned to the first thread as the at least one contribution, from the section of values assigned to the first thread, to the phase of the operation that is to be completed by the second thread of the plurality of threads for the neighbouring section of values of the one-dimensional sequence of values.

6 . The method of claim 1 , wherein the plurality of threads are processed by processing logic comprised by a core of the processing unit, the processing logic being implemented on a chip and the memory being physically located on the same chip as the processing logic.

7 . The method of claim 6 , further comprising each of the plurality of threads reading the values of the section of values assigned to that thread from a further memory that is not physically located on the same chip as the core.

8 . The method of claim 1 , wherein the array of values is an array of pixel values, an array of audio samples of an audio signal, or an array of signal samples of a transmitted signal.

9 . The method of claim 1 , wherein the array of values is a two-dimensional array of pixel values, and the operation is a separable filter operation.

10 . The method of claim 9 , wherein, during the phase of the separable filter operation, values of the one-dimensional sequence of values are filtered in dependence on a one-dimensional filter kernel including the value to be filtered and one or more values of the sequence of values positioned on one or both sides of that value.

11 . The method of claim 9 , wherein the separable filter operation is a separable Gaussian filter operation or a separable box filter operation.

12 . The method of claim 10 , wherein the radius of the filter kernel is less than or equal to half of the number of values in each section of values.

13 . The method of claim 1 , wherein:

the one-dimensional sequence of values of the array of values is a row of values of the array of values; or

the one-dimensional sequence of values of the array of values is a column of values of the array of values.

14 . The method of claim 1 , further comprising writing the sections of processed values generated by the plurality of threads to the memory such that a processed value is written to memory corresponding to each value of the array of values.

15 . The method of claim 14 , wherein said phase of the operation is an initial phase of the operation, the array of values is a two-dimensional array of values, the operation is a separable operation, and the method further comprises, so as to perform a subsequent phase of the operation:

for each of one or more perpendicular one-dimensional sequences of values of the two-dimensional array of values:

assigning, to each of the plurality of threads, a respective plurality of processed values from the memory, said plurality of processed values corresponding to a one-dimensional section of values of the perpendicular one-dimensional sequence of values of the two-dimensional array of values; and

a first thread of the plurality of threads determining at least one contribution, from the plurality of processed values assigned to the first thread, to the subsequent phase of the operation that is to be completed by a second thread of the plurality of threads for a plurality of processed values that correspond with a one-dimensional section of values of the perpendicular one-dimensional sequence of values of the two-dimensional array of values that neighbour the one-dimensional section of values of the perpendicular one-dimensional sequence of values that correspond to the plurality of processed values assigned to the first thread, and

writing the at least one contribution determined by the first thread to the memory; and

the second thread of the plurality of threads reading the at least one contribution determined by the first thread from the memory, and

completing the subsequent phase of the separable operation for the plurality of processed values assigned to the second thread in dependence on the at least one contribution determined by the first thread in order to generate a section of output values.

16 . The method of claim 15 , further comprising:

the first thread of the plurality of threads performing at least one part of the subsequent phase of the separable operation on at least one set of one or more values of the plurality of processed values assigned to the first thread in order to determine at least one contribution, from said at least one set of one or more values, to the subsequent phase of the operation that is to be completed by the second thread of the plurality of threads for the plurality of processed values that correspond with the one-dimensional section of values of the perpendicular one-dimensional sequence of values of the two-dimensional array of values that neighbour the one-dimensional section of values of the perpendicular one-dimensional sequence of values that correspond to the plurality of processed values assigned to the first thread; or

the first thread of the plurality of threads determining one or more values of the plurality of processed values assigned to the first thread as the at least one contribution, from the plurality of processed values assigned to the first thread, to the subsequent phase of the operation that is to be completed by the second thread of the plurality of threads for the plurality of processed values that correspond with the one-dimensional section of values of the perpendicular one-dimensional sequence of values of the two-dimensional array of values that neighbour the one-dimensional section of values of the perpendicular one-dimensional sequence of values that correspond to the plurality of processed values assigned to the first thread.

17 . The method of claim 15 , wherein:

the one-dimensional sequence of values of the two-dimensional array of values is a row of values of the two-dimensional array of values and the perpendicular one-dimensional sequence of values of the two-dimensional array of values is a column of values of the two-dimensional array of values; or

the one-dimensional sequence of values of the two-dimensional array of values is a column of values of the two-dimensional array of values and the perpendicular one-dimensional sequence of values of the two-dimensional array of values is a row of values of the two-dimensional array of values.

18 . The method of claim 1 , further comprising:

receiving a two-dimensional image;

dividing the two-dimensional image into a plurality of overlapping tiles, each tile comprising a two-dimensional array of pixel values; and

performing said method on the two-dimensional array of pixel values of each tile.

19 . A processing unit for performing an operation on an array of values, the processing unit comprising processing logic and a memory, the processing logic being configured, so as to perform a phase of the operation, to:

for each of one or more one-dimensional sequences of values of the array of values:

assign a respective section of values of the one-dimensional sequence of values to each of a plurality of threads; and

by a first thread of the plurality of threads:

determine at least one contribution, from the section of values assigned to the first thread, to the phase of the operation that is to be completed by a second thread of the plurality of threads for a neighbouring section of values of the one-dimensional sequence of values; and

write the at least one contribution to the memory; and

by the second thread of the plurality of threads:

read the at least one contribution from the memory; and

complete the phase of the operation for the neighbouring section of values assigned to the second thread in dependence on the at least one contribution read from the memory in order to generate a section of processed values.

20 . A non-transitory computer readable storage medium having stored thereon computer readable instructions that, when executed at a computer system, cause the computer system to perform a computer-implemented method of performing an operation on an array of values at a processing unit, including, so as to perform a phase of the operation:

for each of one or more one-dimensional sequences of values of the array of values:

assigning a respective section of values of the one-dimensional sequence of values to each of a plurality of threads; and

a first thread of the plurality of threads:

determining at least one contribution, from the section of values assigned to the first thread, to the phase of the operation that is to be completed by a second thread of the plurality of threads for a neighbouring section of values of the one-dimensional sequence of values; and

writing the at least one contribution to a memory; and

the second thread of the plurality of threads:

reading the at least one contribution from the memory; and

completing the phase of the operation for the neighbouring section of values assigned to the second thread in dependence on the at least one contribution read from the memory in order to generate a section of processed values.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 16, 2025
From: CSÉFALVAY, SZABOLCS
To: IMAGINATION TECHNOLOGIES LIMITED
Reel/Frame 073235/0093 →
SECURITY INTEREST Recorded Jul 31, 2024
From: IMAGINATION TECHNOLOGIES LIMITED
To: FORTRESS INVESTMENT GROUP (UK) LTD
Reel/Frame 068221/0001 →
Priority Claims (2)
GB 2219374 · Dec 21, 2022 · national
GB 2219375 · Dec 21, 2022 · national
Continuity (1)
Related Publication 20240231826A1 · Jul 11, 2024
References Cited (15)
US 7584342B1 · Nordquist · 2009 [cited by examiner]
US 7836116B1 · Goodnight et al. · 2010 [cited by applicant]
US 9436760B1 · Tacchi · 2016 [cited by examiner]
US 9558265B1 · Tacchi · 2017 [cited by examiner]
US 9710544B1 · Smith · 2017 [cited by examiner]
US 20080120298A1 · Duffy · 2008 [cited by examiner]
US 20080120299A1 · Duffy · 2008 [cited by examiner]
US 20100325187A1 · Juffa et al. · 2010 [cited by applicant]
US 20110238955A1 · Nickolls et al. · 2011 [cited by applicant]
US 20190278593A1 · Elango et al. · 2019 [cited by applicant]
US 20200241844A1 · Koeplinger et al. · 2020 [cited by applicant]
EP 1717753A2 · 2006 [cited by applicant]
Anonymous, “Memory Statistics—Shared,” NVIDIA® Nsight™ Development Platform, Visual Studio Edition 4.7 User Guide, 2015. [cited by applicant]
Jonas Larsson, “A case study of parallel bilateral filtering on the GPU.” (2015), pp. 1-52. [cited by applicant]
Van Werkhoven et al. “Optimizing convolution operations on GPUs using adaptive tiling.” Future Generation Computer Systems 30 (2014): 14-26. [cited by applicant]