Each cycle, it pulls out the finished tasks from each context’s’ queue and assigns those successors of that task whose all ancestors have finished to their assigned context. Additionally, parses the taskgraph using the contech framework and assigns the first task to its context. The first thing it does is that it retrieves the number of contexts from the taskgraph and rounds it down to a power of 2 for simplicity’s sake and creates that many context objects. ![]() The simulator receives the taskgraph file and protocol type as specified by the user as its input. Then, operations from this queue are popped and executed whenever the previous operation finishes. Once a task appears on a context’s taskQueue, the processor parses that task to form a queue of read/write operations. As each task finishes, it assigns those successors of that task whose all ancestor tasks have finished to the assigned context. The simulator takes as input the taskgraph of the program and generates as many contexts (rounded down to a power of 2 for simplicity) as in the taskgraph. Additionally, each task has a collection of memory reads and writes which is used by the simulator to simulate the behavior of a directory-based coherence scheme. A taskgraph is a graph of tasks carried out by the program where each task is performed by one thread or core. Brian Railing to generate taskgraphs of programs we wished to simulate. We hope that our project would eventually come available as a tool for programmers who are interested in knowing the cache behavior and memory reference characteristics of their programs, which could potentially be helpful in optimizing the code. Therefore, we decide to develop a deeper understanding of the various directory-based cache coherence protocols by actually implementing them and observe cache behavior of programs with distinct memory traces. Comparing to snooping-based which relies heavily on broadcasting on the entire bus, directory-based protocols seems to be more scalable with regard to number of processors as it allows point-to-point communication. In the lectures, we discussed both snooping-based and directory-based cache coherence protocols. MotivationĬache coherence is one of the most important topics in designing multi-processor caches. ![]() ![]() It’s biggest strength is that it is highly scalable as cores only talk to cores they are interested in instead of broadcasting the message across the entire interconnect. Each core is connected to a directory that keeps track of state of cache lines in the core’s’ local memory vs using a bus as in a snooping based scheme. It takes in memory reference traces, simulates cache and directory traffic, and finally analyzes/reports the behaviors.Ī Directory-Based Cache Coherence Scheme solves the cache coherence problem in Distributed Shared Memory or NUMA systems. SyncdSim is a directory-based cache coherence simulator that supports MSI and MESI (more to come).
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |