I wonder if this sort of functionality could be used to greatly improve the performance of immutable datastructures. It could certainly improve a worst-case situation where a large (>= 2kb) datastructure had to be copied in its entirety. The question is, does that case occur often enough to matter.
Lawliet
Doesn't the read from row A destroy the contents of row A? How do we get the information back into it?
bmperez
You're correct, every read from DRAM destroys the memory that was read. So, in this case. the contents of A will be destroyed. However, the row A is still in the row buffer, so it can written back to A. This will happen once it gets evicted from the row buffer by a subsequent request.
This operation is staying consist with other memory operations, where the row that was read from is stored in the row buffer, and flushed when a different row in the bank is required.
MuscleNerd
Is it also possible to optimize by using multiple row buffers?
stride16
The first step in reading a block from the DRAM is the activation of the desired row, containing the memory we need, then transferring it to the buffer, and then essentially copying it back to the row.
I wonder if this sort of functionality could be used to greatly improve the performance of immutable datastructures. It could certainly improve a worst-case situation where a large (>= 2kb) datastructure had to be copied in its entirety. The question is, does that case occur often enough to matter.
Doesn't the read from row A destroy the contents of row A? How do we get the information back into it?
You're correct, every read from DRAM destroys the memory that was read. So, in this case. the contents of A will be destroyed. However, the row A is still in the row buffer, so it can written back to A. This will happen once it gets evicted from the row buffer by a subsequent request.
This operation is staying consist with other memory operations, where the row that was read from is stored in the row buffer, and flushed when a different row in the bank is required.
Is it also possible to optimize by using multiple row buffers?
The first step in reading a block from the DRAM is the activation of the desired row, containing the memory we need, then transferring it to the buffer, and then essentially copying it back to the row.