A method carried out by a memory controller, the method comprising: monitoring accesses to a group of memory regions, each region comprising two or more portions of a group of data banks (245a-d); detecting a high-access memory region based on whether accesses to a region of the group of memory regions exceeds a threshold; in response to the detection of the high-access memory region, generating coding values of only a coding region corresponding to the high-access memory region, the high-access memory region comprising data values distributed across the group of data banks (245a-d); and storing the coding values of the coding region in a coding bank (250a-f); wherein the group of data banks (245a-d) comprises a first data bank and a second data bank, wherein the high-access memory region comprises a first portion of the first data bank and a second portion of the second data bank, wherein the coding bank (250a-f) is smaller than the first data bank, and wherein generating the coding values comprises generating pairs of data values, each pair comprising a data value from the first portion and a data value from the second portion; the method further comprising: receiving a first memory request to a first data bank of the group of data banks (245a-d); receiving a second memory request to a second data bank of the group of data banks (245a-d); determining whether the second request is satisfiable based on data produced by the first memory request and a coding value from the coding bank (250a-f); scheduling, in a single cycle, accesses comprising (i) an access for data from the first data bank to satisfy the first memory request and (ii) an access for data from the coding bank in lieu of the second data bank to satisfy the second memory request; reconstructing data based on the data from the first data bank and the data from the coding bank; and providing the reconstructed data in response to the second memory request. monitoring accesses to a group of memory regions, each region comprising two or more portions of a group of data banks (245a-d); detecting a high-access memory region based on whether accesses to a region of the group of memory regions exceeds a threshold; in response to the detection of the high-access memory region, generating coding values of only a coding region corresponding to the high-access memory region, the high-access memory region comprising data values distributed across the group of data banks (245a-d); and storing the coding values of the coding region in a coding bank (250a-f); wherein the group of data banks (245a-d) comprises a first data bank and a second data bank, wherein the high-access memory region comprises a first portion of the first data bank and a second portion of the second data bank, wherein the coding bank (250a-f) is smaller than the first data bank, and wherein generating the coding values comprises generating pairs of data values, each pair comprising a data value from the first portion and a data value from the second portion; the method further comprising: receiving a first memory request to a first data bank of the group of data banks (245a-d); receiving a second memory request to a second data bank of the group of data banks (245a-d); determining whether the second request is satisfiable based on data produced by the first memory request and a coding value from the coding bank (250a-f); scheduling, in a single cycle, accesses comprising (i) an access for data from the first data bank to satisfy the first memory request and (ii) an access for data from the coding bank in lieu of the second data bank to satisfy the second memory request; reconstructing data based on the data from the first data bank and the data from the coding bank; and providing the reconstructed data in response to the second memory request. receiving a first memory request to a first data bank of the group of data banks (245a-d); receiving a second memory request to a second data bank of the group of data banks (245a-d); determining whether the second request is satisfiable based on data produced by the first memory request and a coding value from the coding bank (250a-f); scheduling, in a single cycle, accesses comprising (i) an access for data from the first data bank to satisfy the first memory request and (ii) an access for data from the coding bank in lieu of the second data bank to satisfy the second memory request; reconstructing data based on the data from the first data bank and the data from the coding bank; and providing the reconstructed data in response to the second memory request.