This repository holds all machine problems, projects, and supplementary material for the ECE 506 course.
The need for parallel and massively parallel computers. Taxonomy of parallel computer architecture, and programming models for parallel architectures. Example parallel algorithms. Shared-memory vs. distributed-memory architectures. Correctness and performance issues. Cache coherence and memory consistency. Bus-based and scalable directory-based multiprocessors. Interconnection-network topologies and switch design. Brief overview of advanced topics such as multiprocessor pre-fetching and speculative parallel execution. Credit is not allowed for more than one course in this set: ECE 406, ECE 506.
- It is recommended to always to go back to the book as a reference.
- (NEW) Fundamentals of Parallel Multi-core Architecture (Chapman & Hall/CRC Computational Science) 1st Edition-2015 by Yan Solihin (Author).
- Fundamentals of Parallel Computer Architecture Paperback-2009 by Yan Solihin (Author).
- For now this repository is for FALL 2021 Class any future updates are the responsibility of future TAs if they want to use it.
- This framework developed on Ubuntu-Linux. It is your responsibility to make it work on windows or other systems, though it will run on any Linux machine that has a terminal.
- Clone the repository. enter the directory and initialize the submodules
git clone https://github.ncsu.edu/atmughra/ECE-506-406-Projects.git
UnityID:
PASSWord:
cd ECE-506-406-Projects
- Edge lists are provided in textual format and they are formatted as source → destination separated by a tab. Src → Dest
- After cloning the repository. enter the directory
cd 01_Project-1/code
-
compile and run the code depending on which rule (openmp/mpi/hybrid) will generate a separate binary
-
run the code in openmp (bin/run-graph-openmp)
make run-openmp
- run the code in mpi (bin/run-graph-mpi)
make run-mpi
- run the code in Hyrbid (openmp+mpi) (bin/run-graph-hybrid)
make run-hybrid
- main.c/sort.c/sort.h files contain defines that are enabled depending on which rule you choose with the make file
make run-openmp
#ifdef OPENMP_HARNESS
// add code that you want to compile only for OpenMP
#endif
make run-mpi
#ifdef MPI_HARNESS
// add code that you want to compile only for MPI
#endif
make run-hybrid
#ifdef HYBRID_HARNESS
// add code that you want to compile only for MPI+OpenMP
#endif
00_Architecture_of_Parallel_Computers
00_ARC_HPC_Guide
- How to setup ARC/HPC NCSU for future Projects/MachineProblems(MPs).01_OpenMP
- OpenMP tutorials and guides with examples within the slides.02_Slides
- Slides from chapter 1-12 from the old book 2009.03_papers
- Extra reading material and papers (optional).04_Fall_2018
- Updated slides and notes for the semester the class being taught.
Project-1
- Project 1code
- base code for the problembin
- binaries are generated in this folderdatasets
- sample data sets for the codeinclude
- [.h] header files to be included in the codebfs.h
- push/pull breadth first search implementation for testing CSR correctnessgraph.h
- graph abstraction contains edgelists and inverse edge-lists with their mappingsbitmap.h
- bitmap implementation not multi-thread safearrayQueue.h
- simple array based queueedgelist.h
sort.h
- count/radix sort implementation to be parallelizedtimer.h
vertex.h
obj
- [.o] object files generated here for linkingsrc
- source code resides in this directorybfs.c
- push/pull breadth first search implementation for testing CSR correctnessgraph.c
- graph abstraction contains edge-lists and inverse edge-lists with their mappingsbitmap.c
- bitmap implementation not multi-thread safearrayQueue.c
- simple array based queue not multi-thread safeedgelist.c
sort.c
- count/radix sort implementation to be parallelizedtimer.c
vertex.c
main.c
- parallel/serial count/radix sort called here
Makefile
- a file that compiles the base code
doc
- Documents describes the Machine Problem