Office Hours: see course info on MyCourses or by appointment

  • CSCI-251 Concept of Parallel and Distributed Systems: 2019 Fall; 2020 Fall;
  • CSCI-651 Foundation of Computer Networks
  • CSCI-652 Distributed Systems: 2014 Fall; 2017 Spring, Fall; 2018 Spring, Fall;
  • CSCI-654 Foundation of Parallel Computing: 2019 Fall;
  • CSCI-759 Topics in Systems: Pervasive and Mobile Systems: 2015 Spring, Fall; 2016 Spring, Fall;
  • CSCI-759 Topics in Systems: Computations on Encrypted Data: 2020 Fall;
  • CSCI-788 Master's Project Colloquium: 2019 Spring;

If you have questions related to these courses and want quick response, you can signup to our Slack channel PervasiveMobileRIT. Students with RIT email accounts @rit.edu or @cs.rit.edu can signup automatically. 


Course Description

CSCI-251 Concept of Parallel and Distributed Systems (slack channel: #csci251)

This course is an introduction to the organization and programming of systems comprising multiple computers. Topics include the organization of multi-core computers, parallel computer clusters, computing grids, client-server systems, and peer-to-peer systems; computer networks and network protocols; network security; multi-threaded programming; and network programming. Programming projects will be required.

Programming assignments and example code: https://gitlab.com/SpiRITlab/CoPaDS

CSCI-651 Foundation of Computer Networks (slack channel: #csci651)

This course will focus on studying the different aspects of computer networks, including various OSI layers, TCP/IP protocol, routing algorithms, wireless networking. Please refer to one of the following books for course materials.

Computer Networking: A Top-Down Approach 7th ed. J.F. Kurose and K.W. Ross or Barnes&Noble

Computer Networking: A Top-Down Approach 6th ed.  J.F. Kurose and K.W. Ross  or Barnes&Noble

Students will work with the instructor to co-develop protocols or algorithms related to computer networks or distributed systems. Students should prepare themselves by learning subversion control, in this case will be git. Please study the concept of git and different git commands: clone, checkout, commit, merge, branch, pull, push, rebase, cherrypick from this book or refer to git-scm site documentations. 


CSCI-652 Distributed Systems (slack channel: #csci652)

The course on Distributed Systems deals with computing components of networked environments. Examples of distributed systems include: the Internet, an intranet, a network of sensors, a personal area network around a person, etc. The distributed systems paradigm facilitates sharing of resources across the network. The challenges of such a paradigm are: heterogeneity, interoperability, concurrency, transparency, scalability, security, and many others. Furthermore, unlike traditional distributed systems, modern ones face new challenges in terms of mobility, disconnectedness, resource constraints, and battery limitations.

The course will be in two phases. During the first phase, we study traditional distributed computing concepts – distributed processes/objects, inter-process communication, remote procedure call, coordination, file systems, clocks and global states, security, concurrency, shared memory, transactions and replication. Second phase deals with systems – The Internet, P2P, mobile and pervasive systems, sensor systems and others. The course will comprise group project, exams and reading of research papers.

Covered topics include MapReduce, Docker, Apache Spark, BlockChain (consensus algo, smart contracts), homomorphic encryption.

There will be two group projects (Pub/Sub system, Calvin/Spark/Blockchain) and one individual project (Chord DHT). The final project will be around distributed systems with centralized and decentralized trust model. More specifically, we will look into the Calvin framework (by Ericsson Research), Apache Spark, or Blockchain (+Smart Contracts).

For the Calvin framework, please learn about the two MS thesis Mobile Devices In the Distributed IoT Platform Calvin and Dynamic Fault Tolerance and Task Scheduling in Distributed Systems. The project will be around implementing distributed algorithms using the Calvin framework. One important paper to have a read is the Kademlia DHT.

Calvin Constrained — A Framework for IoT Applications in Heterogeneous Environments. ICDCS 2017.

Creating your own Docker image by download this Dockerfile to a folder and run this command: docker build -t peiworld/csci652:latest . (Change peiworld to your own docker repo name) or you can docker pull peiworld/csci652 to get the precompiled image.

Projects on Spark and Blockchain will be discussed in the class. All project submissions are via Gitlab repo. Programming assignments and example code: https://gitlab.com/SpiRITlab/distributedsystems


CSCI-654 Foundation of Parallel Computing (slack channel: #csci654)

This course is a study of the hardware and software issues in parallel computing. Topics include an introduction to the basic concepts, parallel architectures and network topologies, parallel algorithms, parallel metrics, parallel languages, granularity, applications, parallel programming design and debugging. Students will become familiar with various types of parallel architectures and programming environments, such as OpenMP, OpenMPI, GPU, cluster programming.

Programming assignments and example code: https://gitlab.com/SpiRITlab/parallelcomputing

CSCI-759 Topics in Systems: Pervasive and Mobile Systems (slack channel: #csci759)

Mobile devices are an important component in modern computing. The advance in wireless networks and miniaturization of mobile devices has created an opportunity to perform computing everywhere, and through the use of everyday objects (augmented with computing elements). This course will cover fundamental concepts and technologies of pervasive and mobile systems. Topics include wireless networking, location-based services, sensing, context-driven adaptation, mobile security, and middleware management systems. Individual projects and a significant team-programming project are an integral part of the course. Note: Students should have networking background such as that obtained by taking CSCI-651 (Foundations of Computer Networks),  or similar courses in undergraduate level, or permission of instructor.

The goal of this course is to provide students with: (i) understanding of the concept of pervasive systems: topics include sensors, actuators, information modeling/management/reasoning, context-awareness/adaptation; (ii) fundamental understanding of mobile systems: topics include wireless networking, storage and power constraints, mobility; (iii) understanding of security and privacy implications in pervasive and mobile systems: topics include privacy-preserving techniques, homomorphic encryption and its applications; (iv) hand-on experience through developing real-world pervasive and mobile computing applications. Recommended readings before the class: JSON-RPC, Fuzzy Logic, Pi4J library, Android SDK, Context Modeling (Ontology, RDF), Routing Protocols (AODV, OLSR, DTN). This course consists of following components:

  • Paper Reading Challenge: study research papers from latest MobiCom, MobiSys, PerCom, or Ubicomp conferences; each group will present their study and prepare a report.
  • Group Project 1 - Interacting with the Physical world: SmartBlind that automatically adjusts itself based on current context and user preferences. android-app-screenshots
  • Group Project 2 - Sample Datasets for Distributed computation algorithm on a cluster of RaspberryPi: Large (313MB), Small (with sorted results, 62KB)


CSCI-759 Topics in Systems: Computations on Encrypted Data (slack channel: #csci759)

This course will cover recent techniques that support outsourced computations while preserving the privacy of user data. Topics include system and security models of secure computation outsourcing, number theory and cryptography, secret-sharing, secure multiparty computation (MPC), homomorphic encryption (HE), and zero-knowledge proof (ZKP). These techniques can be the potential solutions for problems in which computations need to be outsourced, but data privacy is important. Individual and team projects with an accompanying report are an integral part of the course. Ideally, students should have background in cryptography such as that obtained by taking CSCI-462 (Introduction to Cryptography) or CSCI-662 (Foundations of Cryptography), or similar courses from computing security department such as CSEC-362 (Cryptography and Authentication), CSEC-604 (Cryptography and Authentication). To ensure high performance, C++ is the primarily programming language in this course. Extending from this course, students can choose to participate in our open-source project SparkFHE which is in collaboration with Microsoft Research.

A tentative plan for this course:

1.    Overview of secure computation outsourcing 
    - System model (two-party, multiparty, and computations outsourced to the cloud)
    - Security model (trust, honest-but-curious, malicious)
2.    Overview of number theory (group, ring, etc) and cryptography (symmetric and asymmetric schemes)
3.    Secret-sharing (incl. honest and dis-honest majority model) 
4.    Secure multiparty computation (MPC)
5.    Homomorphic encryption (incl. Paillier, ElGamal, Somewhat and Fully HE) 
6.    Zero-knowledge proofs (e.g., Feige-Fiat-Shamir, Schnorr) 

This course will also feature invited talks by researchers who conduct research on PrivateAI using these techniques. 

Related resources: 


CSCI-788 Master's Project Colloquium (slack channel: #csci788)

More info about this course can be found here