IP Library Granted Patent US 10,114,795
Granted Patent B2
US 10,114,795 · App. 15/395,415 · Granted Oct 30, 2018

Processor in non-volatile storage memory

Inventors: Luis Vitorio Cargnini (San Jose, CA); Viacheslav Anatolyevich Dubeyko (San Jose, CA)
Assignee: WESTERN DIGITAL TECHNOLOGIES, INC.
G06F15/80G06F9/3851G06F9/44505
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 10,114,795
App. No.
15/395,415
Granted
Oct 30, 2018
Kind
B2
Abstract

In one example, a device includes a non-volatile memory divided into a plurality of selectable locations, wherein the selectable locations are grouped into a plurality of data lines; one or more processing units (PUs) coupled to the non-volatile memory, each of the PUs associated with a data line of the plurality of data lines, the one or more processing units comprising one or more reconfigurable PUs, the one or more PUs configured to: manipulate, based on one or more instruction sets, data in an associated data line to generate results that are stored in selectable locations of the associated data line reserved to store results of the manipulation; determine which of the instruction sets are most frequently used by the one or more PUs to manipulate data; and reconfigure the one or more reconfigurable PUs to manipulate data using the determined most frequently used instruction sets.

Claims (66)

1. A computing system comprising a device, the device comprising:

a non-volatile memory divided into a plurality of selectable locations, each bit in the non-volatile memory configured to have corresponding data independently programmed and erased, wherein the selectable locations are grouped into a plurality of data lines;

one or more processing units coupled to the non-volatile memory, each of the processing units associated with a data line of the plurality of data lines, the one or more processing units comprising one or more reconfigurable processing units, the one or more processing units configured to:

manipulate, based on one or more instruction sets, data in an associated data line of the plurality of data lines to generate results that are stored in selectable locations of the associated data line reserved to store results of the manipulation;

determine which of the instruction sets are most frequently used by the one or more processing units to manipulate data; and

reconfigure the one or more reconfigurable processing units to manipulate data using the determined most frequently used instruction sets.

2. The computing system of claim 1 , wherein, to determine which of the instruction sets are most frequently used by the one or more processing units to manipulate data, the one or more processing units are configured to:

maintain a queue that includes, for respective instruction sets, a respective usage value that indicates a relative frequency at which the respective instruction set is used to manipulate data; and

select a group of instruction sets from the queue with the highest respective usage values as the most frequently used instruction sets for reconfiguring the one or more reconfigurable processing units.

3. The computing system of claim 2 , wherein the queue further includes a corresponding identifier for one or more instruction sets of the respective instruction sets.

4. The computing system of claim 3 , wherein the identifiers for the one or more instruction sets comprise hash values of the one or more instruction sets, or globally unique identifiers (GUIDs) of the one or more instruction sets.

5. The computing system of claim 3 , wherein, to maintain the queue, the one or more processing units are configured to:

determine that a particular instruction set was used to manipulate data;

responsive to determining that the queue includes an identifier corresponding to the particular instruction set:

increment a usage value for the particular instruction set; and

decrement usage values for instruction sets other than the particular instruction set; and

responsive to determining that the queue does not include an identifier corresponding to the particular instruction set:

insert, in the queue, the identifier corresponding to the particular instruction set;

increment a usage value for the particular instruction set; and

decrement usage values for instruction sets other than the particular instruction set.

6. The computing system of claim 5 , wherein, responsive to determining that the queue does not include an identifier corresponding to the particular instruction set, the one or more processing units are configured to:

responsive to determining that a quantity of identifiers included in the queue is greater than a threshold quantity of usage values, remove an identifier having a lowest usage value from the queue.

7. The computing system of claim 2 , wherein, to maintain the queue, the one or more processing units are configured to:

maintain, for each respective data line of the data lines, a respective queue that includes, for respective instruction sets, a respective usage value that indicates a relative frequency at which the respective instruction set is used to manipulate data in the respective data line.

8. The computing system of claim 1 , wherein the one or more processing units are configured to:

periodically determine which of the instruction sets are most frequently used by the one or more processing units to manipulate data, and

periodically reconfigure the one or more reconfigurable processing units to manipulate data using the determined most frequently used instruction sets.

9. The computing system of claim 1 , wherein the programmable processing units comprise field programmable gate arrays (FPGAs).

10. The computing system of claim 1 , where the one or more processing units comprise one or more dedicated processing units, wherein a dedicated processing unit of the one or more dedicated processing units takes longer to manipulate data based on a particular instruction set than a reconfigurable processing unit of the one or more reconfigurable processing units takes to manipulate data based on the same particular instruction set.

11. The computing system of claim 1 , wherein programming data at a particular selectable location of the plurality of selectable locations does not alter data stored at other selectable locations of the plurality of selectable locations, and wherein erasing data at the particular selectable location of the plurality of selectable locations does not alter data stored at the other selectable locations of the plurality of selectable locations.

12. A method comprising:

computing, by one or more processing units that are coupled to a non-volatile memory that is divided into a plurality of selectable locations that are grouped into a plurality of data lines and based on one or more instruction sets and data in an associated data line of the plurality of data lines, corresponding results, wherein each bit in the non-volatile memory is configured to have corresponding data independently programmed and erased, wherein each processing unit of the processing units is associated with a data line of the plurality of data lines, and wherein the one or more processing units comprise one or more reconfigurable processing units;

selectively altering, based on the corresponding results, data in selected locations of the associate data line reserved to store the corresponding results;

maintaining a queue that includes, for respective instruction sets, a respective usage value that indicates a relative frequency at which the respective instruction set is used to compute results;

selecting a group of instruction sets from the queue with the highest respective usage values as the most frequently used instruction sets for reconfiguring the one or more reconfigurable processing units; and

reconfiguring the one or more reconfigurable processing units to compute results using the selected group of instruction sets.

13. The method of claim 12 , wherein the queue further includes a corresponding identifier for one or more instruction sets of the respective instruction sets.

14. The method of claim 13 , wherein the identifiers of the one or more instruction sets comprise hash values of the one or more instruction sets, or globally unique identifiers (GUIDs) of the one or more instruction sets.

15. The method of claim 13 , wherein maintaining the queue comprises:

determining that a particular instruction set is or was used to compute results;

responsive to determining that the queue includes an identifier corresponding to the particular instruction set:

incrementing a usage value for the particular instruction set; and

decrementing usage values for instruction sets other than the particular instruction set; and

responsive to determining that the queue does not include an identifier corresponding to the particular instruction set:

inserting, in the queue, the identifier corresponding to the particular instruction set;

incrementing a usage value for the particular instruction set; and

decrementing usage values for instruction sets other than the particular instruction set.

16. The method of claim 15 , wherein responsive to determining that the queue does not include an identifier corresponding to the particular instruction set, the method further comprises:

removing, responsive to determining that a quantity of identifiers included in the queue is greater than a threshold quantity of usage values, an identifier having a lowest usage value from the queue.

17. The method of claim 12 , wherein maintaining the queue comprises:

maintaining, for each respective data line of the data lines, a respective queue that includes, for respective instruction sets, a respective usage value that indicates a relative frequency at which the respective instruction set is used to compute results for the respective data line.

18. The method of claim 12 , wherein the programmable processing units comprise field programmable gate arrays (FPGAs), ASICs, DSPs, elementary circuit logics, or ALUs.

19. A device comprising:

means for computing, based on one or more instruction sets and data in associated data lines of a plurality of data lines of a non-volatile memory that is divided into a plurality of selectable locations that are grouped into the plurality of data lines, corresponding results, wherein each bit in the non-volatile memory is configured to have corresponding data independently programmed and erased, and wherein the means for computing comprise one or more reconfigurable processing units;

means for selectively altering, based on the corresponding results, data in selected locations of the associated data line reserved to store the corresponding results;

means for maintaining a queue that includes, for respective instruction sets, a respective usage value that indicates a relative frequency at which the respective instruction set is used to compute results;

means for selecting a group of instruction sets from the queue with the highest respective usage values as the most frequently used instruction sets for reconfiguring the one or more reconfigurable processing units; and

means for reconfiguring the one or more reconfigurable processing units to compute results using the selected group of instruction sets.

20. The device of claim 19 , wherein means for maintaining the queue comprise:

means for determining that a particular instruction set is or was used to compute results;

means for, responsive to determining that the queue includes an identifier corresponding to the particular instruction set, incrementing a usage value for the particular instruction set;

means for, responsive to determining that the queue includes an identifier corresponding to the particular instruction set, decrementing usage values for instruction sets other than the particular instruction set;

means for, responsive to determining that the queue does not include an identifier corresponding to the particular instruction set, inserting, in the queue, the identifier corresponding to the particular instruction set;

means for, responsive to determining that the queue does not include an identifier corresponding to the particular instruction set, incrementing a usage value for the particular instruction set;

means for, responsive to determining that the queue does not include an identifier corresponding to the particular instruction set, decrementing usage values for instruction sets other than the particular instruction set; and

removing, responsive to determining that the queue does not include an identifier corresponding to the particular instruction set and responsive to determining that a quantity of identifiers included in the queue is greater than a threshold quantity of usage values, an identifier having a lowest usage value from the queue.

Assignments (10)
SECURITY AGREEMENT Recorded Apr 25, 2025
From: SANDISK TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 071050/0001 →
PARTIAL RELEASE OF SECURITY INTERESTS Recorded Apr 25, 2025
From: JPMORGAN CHASE BANK, N.A., AS AGENT
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 071382/0001 →
PATENT COLLATERAL AGREEMENT Recorded Aug 23, 2024
From: SANDISK TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS THE AGENT
Reel/Frame 068762/0494 →
CHANGE OF NAME Recorded Jun 27, 2024
From: SANDISK TECHNOLOGIES, INC.
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 067982/0032 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 29, 2024
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: SANDISK TECHNOLOGIES, INC.
Reel/Frame 067567/0682 →
PATENT COLLATERAL AGREEMENT - A&R LOAN AGREEMENT Recorded Aug 21, 2023
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 064715/0001 →
PATENT COLLATERAL AGREEMENT - DDTL LOAN AGREEMENT Recorded Aug 21, 2023
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 067045/0156 →
RELEASE OF SECURITY INTEREST AT REEL 052915 FRAME 0566 Recorded Feb 8, 2022
From: JPMORGAN CHASE BANK, N.A.
To: WESTERN DIGITAL TECHNOLOGIES, INC.
Reel/Frame 059127/0001 →
SECURITY INTEREST Recorded Feb 6, 2020
From: WESTERN DIGITAL TECHNOLOGIES, INC.
To: JPMORGAN CHASE BANK, N.A., AS AGENT
Reel/Frame 052915/0566 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 30, 2016
From: CARGNINI, LUIS VITORIO; DUBEYKO, VIACHESLAV ANATOLYEVICH
To: WESTERN DIGITAL TECHNOLOGIES, INC.
Reel/Frame 041228/0004 →
Continuity (1)
Related Publication 20180189230A1 · Jul 5, 2018
Cited By (1)
US 12,405,866