The field of invention pertains to computing systems, generally, and, more specifically, to memory address collision detection of ordered parallel threads with bloom filters.
Bloom filters are a special type of data structure that can be used to indicate whether a specific data pattern has been previously observed. Basic operation of a bloom filter is depicted in
As observed in
As observed in
Thus, if there is some sensitivity to the fact that the same value has appeared previously, the bloom filter 101 can be used to identify whether or not a particular value has appeared before. According to the mathematical properties of a traditional bloom filter, it is possible that a lookup of N bits will yield all ones when in fact that input has not been presented before (“false positive”). However, a traditional bloom filter will not yield anything other than all ones if in fact the input value has been presented before (i.e., false negatives are not possible).
The present invention is illustrated by way of example and not limitation in the figures of the accompanying drawings, in which like references indicate similar elements and in which:
According to the operation of the system of
Likewise, if a thread seeks to load information, it not only provides the address for the load operation to its own load bloom filter but also provides the address to the store bloom filters of its lesser ordered (older) parallel threads. If any of the store bloom filters of the younger threads indicate that the address had previously been used for a load operation an error flag is raised because the younger thread may potentially read incorrect data since it did not wait for the earlier store operation.
For simplicity
A problem with this approaches is the inefficiency associated with all the bloom filters that need be instantiated as well as the propagation cost and overhead of accessing a large number of such filters for any particular load or store operation by a thread.
The individual storage elements within the respective data stores of both bloom filters 301_L, 301_S are expanded to store more than one bit (here, recall from the discussion of
Internal to each bloom filter, at time T2 as observed in
At time T3, as observed in
The P bit of each resultant 450_1_L/S through 450_N_L/S is analyzed to see if any P bits are set to 0. If any P bits of a particular bloom filter are set to zero the memory address has not been previously presented to that bloom filter. In that case, an operation of the type represented by the bloom filter has not yet been attempted at the address 400 provided by the accessing thread 401_7.
In the present example, note that resultant 450_N_L of the load bloom filter 401_L has a P bit=0 which therefore indicates that a load operation has not yet been performed at memory address 400 by the set of parallel threads. By contrast, all P bits in the resultant 450_1_S through 450_N_S of the store bloom filter 401_S are set equal to 1. As such, a store operation has been performed before at address 400.
At time T4, as observed in
In the case of where all the resultants 450_1_S through 450_N_S of the store bloom filter 402_1 have higher order number, when all resultant P bits are also equal to 1, a flag or other error condition is raised as it means a younger (out-of-order) store has been performed at the address 401. That is, the current older thread will potentially read incorrect data because a younger thread did not “wait” for the current load operation. As an example, no error will be raised from resultants of 401_S at T4 because only resultant 450_2_S has a higher order number than the accessing thread (i.e., less than all the resultants have higher order number therefore no error flag is raised). Here, if all resultants had a higher order number, it would mean that a younger thread had accessed the memory location.
At time T1, as observed in
Internal to each bloom filter, at time T2 as observed in
At time T3, the contents 550_1_L/S through 550_N_L/S of the N different storage locations are read from the respective data stores 503_L/S. As before, the contents are observed to include not only the aforementioned P bit that indicates whether the location has been accessed before, but also, the “order number” of the highest ordered thread that has accessed it if so. Also as before, thread 510_1 is provided order number 00001, thread 510_2 is provided order number 00002, etc.
The P bit of each resultant 550_1_L/S through 550_N_L/S is analyzed to see if any P bits are set to 0. If any P bits of a particular bloom filter are set to zero the memory address has not been presented before at that bloom filter. In that case, an operation of the type represented by the bloom filter has not yet been attempted at the address provided by the accessing thread.
In the present example, note that resultant 550_N_S of the store bloom filter 501_S has a P bit=0 which therefore indicates that a store operation has not yet been performed at memory address 500. By contrast, all P bits in the resultant 550_1_L through 550_N— L of the load bloom filter 501_L are set equal to 1. As such, a load operation has been performed before at address 500.
At time T4, referring to
In the case of higher valued order number in all of the resultants 550_1_L through 550_N_L of the load bloom filter 502_L, when all resultant P bits are also equal to 1, a flag or other error condition is raised as it means a younger (out-of-order) load has been performed at the address 501. That is, a younger thread has loaded potentially incorrect information because it did not “wait for” the current store operation. As observed in
During an order check phase 605, a second bloom filter representing the opposite operation (the store bloom filter if a load operation, or, the load bloom filter if a store operation) is provided with the address and N hash functions are executed 606 to identify N different storage locations. The resultant of each storage location indicates whether it has been accessed before and, if so, the youngest (highest ordered) thread to have done so. If one of the storage locations has not been accessed before the process ends. If all of the storage locations have been accessed before, the respective order numbers provided by the identified storage locations are compared against the order number of the accessing thread 60. If a younger (higher ordered) order number is present in all of these resultants, it signifies that an operation of opposite type has been performed by a younger thread (if a store operation, a load has been performed by a younger thread, or, if a load operation, a store operation has been performed by a younger thread) and a flag or other error signal is raised 607.
Upon the presentation of any address, each bloom filter circuit will internally perform N hash functions and return the respective P bit and stored thread order number of N storage locations identified by the N hash functions. Central intelligence logic circuitry 752_L, 752_S receives the respective P bit and order number returned from each of the N storage locations.
Each circuit also has an input to indicate whether the memory access operation is of the same type or of opposite type.
In the case where the operation is of the same type as the collision detection circuit (e.g., the load collision detection circuit receives an order number and address for a load operation), the central intelligence logic circuitry 752_L, 752_S writes back to any P bit indicating that the memory address has not been observed before the opposite information (i.e., that the address has now been observed). The central intelligence logic circuitry also includes a comparator bank_L, 753_S to compare each of the thread order numbers retrieved from the bloom filter against the accessing thread order number presented at the collision detection circuit input. Again, in the case where the operation is of the same type, the central intelligence logic circuitry 752_L, 752_S identifies any stored thread order number returned from the bloom filter that is older than the accessing thread's and overwrites it with the younger accessing thread number.
In the case where the operation is of the opposite type (e.g., the load collision detection circuit receives an address and order number for a store operation), each P bit is received by central intelligence logic circuitry 752_L, 752_S to make a threshold decision as to whether or not the memory address has been observed before. If not no further action is taken. If the P bits indicate the memory address has been observed before, the compactor bank is used to see if the accessing thread order number is older than all of the order numbers returned from the bloom filter circuit. If so an error flag is raised as an output.
Alternative embodiments compared to those discussed above may not use a P bit but instead use a special thread order number “code” to indicate a storage location has not been written to before. For example, noting that the thread order number sequence begins with the value 00001, in an embodiment, the code word 00000 could be used to indicate that the storage location has not been written to before. In this case the separate P bit could be eliminated.
Also, note that insertion process performed by a collision circuit of same operation can be operate wholly or partially in parallel with its sibling collision circuit as it performs the sequence for opposite operation. Said more simply, the load and store address collision circuits 751_L, 751_S can operate wholly or partially in parallel for any load or store memory operation. Also, although the term order “number” has been used at length to more clearly describe the operation of the embodiments described above, it should be clear that the term applies to any value (e.g., alpha-numeric) from which thread ordering can be deduced.
Those of ordinary skill will be able to determine the appropriate number of storage locations and hash functions per bloom filter as a function of the number of parallel threads to support and the size of the memory address space. Although the above described embodiments have indicated that both bloom filters have an equal number of hash functions (N) it is conceivable that the load and store bloom filters may have a different number of hash functions.
The queue 860 receives the load and store operations from the one or more processing unit(s) 870 executing the parallel threads and dispatches them to the collision detect circuits 851_L, 851_S when they reach the bottom (head) of the queue. Note that each operation entered into the queue 860 as received from a processing unit and dispatched from the queue 860 to the collision circuits 850_L, 850_S contains some identity of the type of operation (load or store), the address of the operation and the thread order number. In an embodiment, logic circuitry is coupled to the tail (entry point) of the queue to arbitrate multiple simultaneous requests from the parallel threads. Here, the logic circuitry is configured to place requests from older threads ahead of requests from younger threads.
Another possible operation mode of the approach of
Note that any of the “circuits”, “circuitry” or operations described above can be implemented on a semiconductor chip with dedicated (e.g., custom) logic circuitry designed to perform the specified task(s). The data stores of the bloom circuits may be built with storage cell circuitry such as registers or synchronous random access memory (SRAM) cells. Alternatively, the circuits/circuitry/operations can implemented partially or wholly with circuitry that executes some form of program code such as micro-controller, controller, processing core, etc. As such, some embodiments may be implemented with a machine readable storage medium or media that stores program code that when executed causes some or all of the above described tasks to be performed.
A machine readable medium that stores program code may be embodied as, but is not limited to, one or more memories (e.g., one or more flash memories, random access memories (static, dynamic or other)), optical disks, CD-ROMs, DVD ROMs, EPROMs, EEPROMs, magnetic or optical cards or other type of machine-readable media suitable for storing electronic instructions. Program code may also be downloaded from a remote computer (e.g., a server) to a requesting computer (e.g., a client) by way of data signals embodied in a propagation medium (e.g., via a communication link (e.g., a network connection)).
In the foregoing specification, the invention has been described with reference to specific exemplary embodiments thereof. It will, however, be evident that various modifications and changes may be made thereto without departing from the broader spirit and scope of the invention as set forth in the appended claims. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense.
The present patent application is a divisional application claiming priority from U.S. patent application Ser. No. 13/730,704, filed Dec. 28, 2012, and titled: “Memory Address Collision Detection of Ordered Parallel Threads with Bloom Filters”, which is incorporated herein by reference in its entirety.
Number | Name | Date | Kind |
---|---|---|---|
4943915 | Wilhelm et al. | Jul 1990 | A |
5890010 | Nishigami | Mar 1999 | A |
6105127 | Kimura et al. | Aug 2000 | A |
6397240 | Fernando | May 2002 | B1 |
6944746 | So | Sep 2005 | B2 |
7200741 | Mine | Apr 2007 | B1 |
7234042 | Wilson | Jun 2007 | B1 |
7302627 | Mimar | Nov 2007 | B1 |
7765388 | Barrett et al. | Jul 2010 | B2 |
7793080 | Shen et al. | Sep 2010 | B2 |
8063907 | Lippincott et al. | Nov 2011 | B2 |
8190863 | Fossum et al. | May 2012 | B2 |
8230442 | Aho et al. | Jul 2012 | B2 |
8259585 | S P | Sep 2012 | B1 |
8424018 | Aho et al. | Apr 2013 | B2 |
8776084 | Aho et al. | Jul 2014 | B2 |
9015443 | Aho et al. | Apr 2015 | B2 |
9053025 | Ben-Kiki et al. | Jun 2015 | B2 |
9946492 | Diestelhorst | Apr 2018 | B2 |
20010042210 | Blaker et al. | Nov 2001 | A1 |
20020004904 | Blaker et al. | Jan 2002 | A1 |
20030208665 | Peir | Nov 2003 | A1 |
20040022776 | Gomes Sanches et al. | Feb 2004 | A1 |
20040215444 | Patel et al. | Oct 2004 | A1 |
20040227763 | Wichman et al. | Nov 2004 | A1 |
20050257186 | Zilbershlag | Nov 2005 | A1 |
20060288193 | Hsu | Dec 2006 | A1 |
20070226464 | Chaudhry et al. | Sep 2007 | A1 |
20080005253 | Vincent | Jan 2008 | A1 |
20080052532 | Akkar et al. | Feb 2008 | A1 |
20080104425 | Gunther et al. | May 2008 | A1 |
20080162889 | Cascaval | Jul 2008 | A1 |
20090015072 | Bauer et al. | Jan 2009 | A1 |
20090024836 | Shen et al. | Jan 2009 | A1 |
20090150722 | Reid et al. | Jun 2009 | A1 |
20090198972 | Nystad | Aug 2009 | A1 |
20100058356 | Aho et al. | Mar 2010 | A1 |
20100332901 | Nussbaum et al. | Dec 2010 | A1 |
20110145778 | Chen | Jun 2011 | A1 |
20120023314 | Crum et al. | Jan 2012 | A1 |
20120124588 | Sinha et al. | May 2012 | A1 |
20120166777 | McLellan et al. | Jun 2012 | A1 |
20120311360 | Balasubramanian et al. | Dec 2012 | A1 |
20120331310 | Burns et al. | Dec 2012 | A1 |
20130005487 | Frazzini et al. | Jan 2013 | A1 |
20130054871 | Lassa | Feb 2013 | A1 |
20130166516 | Reid | Jun 2013 | A1 |
20140189300 | Pardo et al. | Jul 2014 | A1 |
20140189317 | Ben-Kiki et al. | Jul 2014 | A1 |
20140189332 | Ben-Kiki et al. | Jul 2014 | A1 |
20140189333 | Ben-Kiki et al. | Jul 2014 | A1 |
20170123723 | Diestelhorst | May 2017 | A1 |
20170123794 | Chen | May 2017 | A1 |
20170123795 | Chen | May 2017 | A1 |
Entry |
---|
L. Ceze et al., “Bulk Disambiguation of Speculative Threads in Multiprocessors,” Proc. 33th Ann. Int'l Symp. Computer Architecture (ISCA '06), pp. 227-238, May 2006. |
Office action from U.S. Appl. No. 13/729,915, dated Jul. 23, 2015, 17 pages. |
Final Office action from U.S. Appl. No. 13/729,915, dated Dec. 2, 2015, 20 pages. |
Notice of Allowance from U.S. Appl. No. 13/729,915, dated Feb. 17, 2016, 8 pages. |
PCT/US2013/046863 Notification Concerning Transmittal of International Preliminary Report on Patentability, dated Jul. 9, 2015, 6 pages. |
PCT/US2013/046863 Notification Concerning Transmittal of the International Search Report and the Written Opinion of the International Searching Authority, dated Aug. 28, 2013, 9 pages. |
PCT/US2013/048694 Notification Concerning Transmittal of International Preliminary Report on Patentability, dated Jul. 9, 2015, 6 pages. |
PCT/US2013/048694 Notification Concerning Transmittal of the International Search Report and the Written Opinion of the International Searching Authority, dated Sep. 30, 2013, 9 pages. |
Office action from U.S. Appl. No. 13/730,719, dated May 13, 2015, 10 pages. |
Final Office action from U.S. Appl. No. 13/730,719, dated Dec. 15, 2015, 9 pages. |
Pereira, “Reproducible User-Level Simulation of Multi-Threaded Workloads”, 2007 (no further date). |
Dharmapurikar et al, “Design and Implementation of a String Matching System for Network Intrusion Detection using FPGA-based Bloom Filters”, 2004 (no further date). |
Office action from U.S. Appl. No. 13/730,704, dated Sep. 28, 2015, 10 pages. |
Notice of Allowance from U.S. Appl. No. 13/730,704, dated Mar. 1, 2016, 8 pages. |
Notice of Allowance from U.S. Appl. No. 13/730,704, dated Aug. 4, 2016, 6 pages. |
Office action from U.S. Appl. No. 13/730,719, dated Sep. 23, 2016, 9 pages. |
Notice of Allowance from U.S. Appl. No. 13/730,719, dated May 18, 2017, 5 pages. |
Notice of Allowance from U.S. Appl. No. 13/730,719, dated Nov. 13, 2017, 5 pages. |
Notice of Allowance from U.S. Appl. No. 13/730,719, dated Mar. 27, 2018, 5 pages. |
Office action from Chinese Patent Application No. 201380060918.9, dated Dec. 5, 2017, 30 pages. |
Number | Date | Country | |
---|---|---|---|
20170147344 A1 | May 2017 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 13730704 | Dec 2012 | US |
Child | 15403101 | US |