# US 2018/0321937 A1 · Instructions for dual destination type conversion, mixed precision accumulation, and mixed precision atomic memory operations

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 2018/0321937 A1
- Document ID: US20180321937A1
- Status: Published application
- Kind: A1
- Application number: 15/586,032
- Filed: 2017-05-03
- Published: 2018-11-08
- Earliest claimed: 2017-05-03
- Assignees: Intel Corporation
- Applicants: Intel Corporation
- Inventors: William M. Brown; Karthik Raman
- Web page: https://patentgrep.com/patent/US20180321937A1

## CPC

- G06F 9/30014: {with variable precision}
- G06F 9/30025: {Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion}
- G06F 9/30036: {Instructions to perform operations on packed data, e.g. vector, tile or matrix operations}
- G06F 9/30038: {using a mask}
- G06F 9/3016: {Decoding the operand specifier, e.g. specifier format}
- G06F 9/3802: {Instruction prefetching}
- G06F 9/3887: {controlled by a single instruction for multiple data lanes [SIMD]}
- G06F 9/3888: {controlled by a single instruction for multiple threads [SIMT] in parallel}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Disclosed embodiments relate to instructions for dual-destination type conversion, accumulation, and atomic memory operations. In one example, a system includes a memory, a processor including: a fetch circuit to fetch the instruction from a code storage, the instruction including an opcode, a first destination identifier, and a source identifier to specify a source vector register, the source vector register including a plurality of single precision floating point data elements, a decode circuit to decode the fetched instruction, and an execution circuit to execute the decoded instruction to: convert the elements of the source vector register into double precision floating point values, store a first half of the double precision floating point values to a first location identified by the first destination identifier, and store a second half of the double precision floating point values to a second location.

## Claims

### Claim 1

A system used to execute an instruction, the system comprising:
a memory;
a processor comprising:
a fetch circuit to fetch the instruction from a code storage, the instruction comprising an opcode, a first destination identifier, and a source identifier to specify a source vector register, the source vector register comprising a plurality of single precision floating point data elements;
a decode circuit to decode the fetched instruction; and
an execution circuit to execute the decoded instruction to: convert the elements of the source vector register into double precision floating point values, store a first half of the double precision floating point values to a first location identified by the first destination identifier, and store a second half of the double precision floating point values to a second location.

### Claim 2 (depends on 1)

The system of claim 1, wherein the instruction further comprises a second destination identifier, and wherein the second location is identified by the second destination identifier.

### Claim 3 (depends on 1)

The system of claim 1, wherein the second location is the source vector register.

### Claim 4 (depends on 3)

The system of claim 3, wherein the source vector register, the first destination vector register, and the second destination vector register are 512-bit vector registers.

### Claim 5 (depends on 1)

The system of claim 1, wherein the execution circuit is further to add each vector element of the first half of the double precision floating point values to data previously stored in the first location and to store a first sum to the first location, and to add each vector element of the second half of the double precision floating point values to data previously stored in the second location and to store a second sum to the second location.

### Claim 6 (depends on 1)

The system of claim 1, wherein the locations identified by the first destination identifier and the second destination identifier are in the memory.

### Claim 7 (depends on 6)

The system of claim 6, wherein the execution circuit is further to:
perform a first atomic read-modify-write to read first data stored in the first location, add the first half of the double precision floating point values to the first data, and store double precision floating point sums to the first location; and
perform a second atomic read-modify-write to read second data stored in the second location, add the second half of the double precision floating point values to the second data, and store double precision floating point sums to the second location.

### Claim 8 (depends on 1)

The system of claim 1, wherein the execution circuit is to convert all elements of the source vector register in parallel.

### Claim 9 (depends on 1)

The system of claim 1, wherein the opcode is to specify that only a lower half of the source vector register is to be converted and stored to the first location.

### Claim 10 (depends on 1)

The system of claim 1, wherein the opcode is to specify that only an upper half of the source vector register is to be converted and stored to the first location.

### Claim 11

A method of executing an instruction, the method comprising:
fetching the instruction from a code storage, the instruction comprising an opcode, a first destination identifier, and a source identifier to specify a source vector register comprising a plurality of single precision floating point data elements;
decoding the fetched instruction by a decode circuit; and
executing, by an execution circuit, the decoded instruction to: convert the elements of the source vector register into double precision floating point values, store a first half of the double precision floating point values to a first location identified by the first destination identifier, and store a second half of the double precision values to a second location.

### Claim 12 (depends on 11)

The method of claim 11, wherein the instruction further comprises a second destination identifier, and wherein the second location is identified by the second destination identifier.

### Claim 13 (depends on 11)

The method of claim 11, wherein the second location is the source vector register.

### Claim 14 (depends on 13)

The method of claim 13, wherein the source vector register, the first destination vector register, and the second destination vector register are 512-bit vector registers.

### Claim 15 (depends on 11)

The method of claim 11, further comprising: adding, by the execution circuit, each of the first half of the double precision floating point values to data previously stored in the first location, and adding each of the second half of the double precision floating point values to data previously stored in the second location.

### Claim 16 (depends on 11)

The method of claim 11, wherein the locations identified by the first destination identifier and the second destination identifier are in the memory.

### Claim 17 (depends on 16)

The method of claim 16, further comprising accumulating results in the first location and the second location by:
performing a first atomic read-modify-write to read first data stored in the first location, add the first half of the double precision floating point values to the first data, and store double precision floating point results to the first location; and
performing a second atomic read-modify-write to read second data stored in the second location, add the second half of the double precision floating point values to the second data, and store double precision floating point results to the second location.

### Claim 18

An apparatus for executing an instruction, the apparatus comprising:
means for fetching an instruction, the means for fetching to fetch the instruction from a code storage, the instruction comprising an opcode, a first destination identifier, and a source identifier to specify a source vector register, the source vector register comprising a plurality of single precision floating point data elements;
means for decoding to decode the fetched instruction; and
means for executing the decoded instruction to: convert the elements of the source vector register into double precision floating point values, store a first half of the double precision floating point values to a first location identified by the first destination identifier, and store a second half of the double precision floating point values to a second location.

### Claim 19 (depends on 18)

The apparatus of claim 18, wherein the instruction further comprises a second destination identifier, and wherein the second location is identified by the second destination identifier.

### Claim 20 (depends on 18)

The apparatus of claim 18, wherein the second location is the source vector register.
