a depicts a mapping of the elements in a multi-dimensional array to memory banks.
b depicts how N contiguous elements of a the first column are all stored in different memory banks, and, therefore, can be read without contention.
c depicts how N contiguous elements in the third row are all stored in different memory banks, and, therefore, can be read without contention.
d depicts how a subarray of N/2 contiguous elements—elements (3,2), (4,2), (3,3), and (4,3)—are all stored in different memory banks, and, therefore, can be read without contention.
e depicts how some, but not all, subarrays of N contiguous elements are stored in different memory banks, and, therefore, can be read without contention.
Memory 301 comprises N=8 data ports and N=8 address ports. A word can be read from or written to memory 301 on a data port independently of whether a word is read from or written to memory 301 on another port. In other words, any combination of N=8 words can be read from and written into memory 301 in one cycle. For example, a word can be written into memory 301 on data ports 1, 6, and 8, while words are read from memory 301 on data ports 2, 3, 4, 5, and 7. In all cases, the data on port n, wherein nε{1, 2, . . . , N}, is associated with the address on address port n.
Storage 501 comprises P memory locations, N address ports, 510-1 through 510-8, and N data ports, 513-1 through 513-8. In accordance with the illustrative embodiment, each logical memory location corresponds to only one of the address ports 510-1 through 510-8 and one of the data ports 513-1 through 513-8.
The constraint that each logical memory location in memory 501 corresponds to only one of the address ports 510-1 through 510-8 means that a logical address on one of address ports 511-1 through 511-8 must be routed to the correct one of address ports 510-1 through 510-8. This is the function performed by address switch and decoder 503. In other words, address switch and decoder 503 must:
The shuffling of addresses between address ports 511-1 through 511-8 and address ports 510-1 through 510-8, without more, destroys the isomorphic relationship in which the data on port 512-n is associated with the address on address port 511-n. To preserve this relationship, data switch 502 performs the inverse shuffle of address switch and decoder 503. For example, if logical address 0x0000 is presented on address port 511-3 during a read operation, the data in logical address 0x0000 should appear on data port 512-3. But within memory 301, address switch and decoder 503 might route the corresponding physical address to address port 510-1 which would cause the desired word to emerge on data port 513-1. To ensure that the word emerges on data port 512-3, data switch 513 routes the word from data port 513-1 to 512-3.
In accordance with the illustrative embodiment, data switch 502 is an N×N non-blocking crossbar switch, but it will be clear to those skilled in the art, after reading this specification, how to make and use alternative embodiments of the present invention in which another structure provides the requisite functionality.
There is another advantage to the combination of address switch and decoder 503 and data switch 502 and that is that it enables the word at any logical address to be read from, or written to, any of data ports 512-1 through 512-8. This is particularly advantageous when, for example, memory 301 is used to load and unload the vector registers in a single-instruction, multiple-data processor.
Although the worst-case contention situation cannot be eliminated the average-case can be by distributing words that are often accessed together across different memory banks. There are special-purpose applications where group of words are often accessed together and one of those applications involves the storage of multi-dimensional arrays, such as those commonly manipulated in video coding and coding (e.g., H.264, MPEG, etc.). For example, in video decoding, the elements in a row, a column, and a contiguous block tend to be accessed far more frequently together than random elements in the array.
In accordance with the illustrative embodiment, each element of a J×K two-dimensional array, wherein J and K are both positive integers greater than 1, is assigned to one of the memory banks so that three conditions are satisfied:
b depicts how N contiguous elements of a the first column are all stored in different memory banks, and, therefore, can be read without contention. The reader can verify that the same is true for all columns.
c depicts how N contiguous elements in the third row are all stored in different memory banks, and, therefore, can be read without contention. The reader can verify that the same is true for all columns.
d depicts how a subarray of N/2 contiguous elements—elements (3,2), (4,2), (3,3), and (4,3)—are all stored in different memory banks, and, therefore, can be read without contention. The reader can verify that the same is true for all subarrays of N/2 contiguous elements.
e depicts how some, but not all, subarrays of N contiguous elements are stored in different memory banks, and, therefore, can be read without contention. The reader can verify that the same is true for some, but not all, subarrays of N contiguous elements.
One corollary of the above constraints is that, in accordance with the Pigeon Hole Principal, at least two coordinates for any N+1 elements decode into the same memory bank.
In accordance with the illustrative embodiment, each element of a J×K two-dimensional array is assigned a logical address in, for example, row-column order as depicted in
In addition, address switch and decoder 503 comprises logic for decoding each of the addresses into:
Here too, because there are only N memory banks, the Pigeon Hole Principal holds—at least two addresses in every set of N+1 addresses decode into the same memory bank.
Address switch 1001 is combinational logic that receives a P-bit logical address on each of address ports 511-1 through 511-8 and that outputs a (log2P-log2N)-bit physical address on each of address ports 510-1 through 510-8. Address switch 1001 shuffles the addresses under the control of address decoder 1002 using a non-blocking cross-bar switch, but performs the logical address to physical memory address translation on its own so that each P-bit logical address assigned to a single memory bank generates a unique (log2P-log2N)-bit physical address. It will be clear to those skilled in the art how to accomplish this.
It is to be understood that the above-described embodiments are merely illustrative of the present invention and that many variations of the above-described embodiments can be devised by those skilled in the art without departing from the scope of the invention. It is therefore intended that such variations be included within the scope of the following claims and their equivalents.