Note: The course catalogues, the SGS Calendar, and ACORN list all graduate courses associated with ECE – please note that not all courses will be offered every year.
This course provides the student with the fundamental knowledge needed in the rapidly growing field of Personal Cybernetics, including “Wearable Computing”, “Personal Technologies”, “Human Computer Interaction (HCI),” “Mobile Multimedia,” “Augmented Reality,” “Mediated Reality,” CyborgLogging,” and the merging of communications devices such as portable telephones with computational and imaging devices. The focus is on fundamental aspects and new inventions for human-computer interaction. Topics to be covered include: mediated reality, Personal Safety Devices, lifelong personal video capture, the Eye Tap principle, collinearity criterion, comparametric equations, photoquantigraphic imaging, lightvector spaces, anti-homomorphic imaging, application of personal imaging to the visual arts, and algebraic projective geometry.
Prerequisites: ECE242H1, recommended ECE341H1 and CSC488H1.
Theoretical and practical aspects of building modern optimizing compilers. Topics: intermediate representations, basic blocks and flow graphs, data flow analysis, partial evaluation and redundancy elimination, loop optimizations, register allocation, instruction scheduling, interprocedural analysis, and memory hierarchy optimizations, dependence analysis and automatic parallelization. Students will implement significant optimizations within the framework of a modern research compiler.
Performance analysis and metrics and cost. Instruction set architectures. Instruction-level parallelism: pipelining, superscalar, dynamic scheduling, VLIW processors. Data-level prallelism: vector processors, GPUs. Thread-level parallelism: multiprocessors, multi-core, coherence, simultaneous multi-threading. Memory hierarchies: caches and virtual memory support. Simulation tools and methods. Limited Enrollment.
Prerequisite: ECE344H1 or ECE353H1.
As computers permeate our society, the security of such computing systems is becoming of paramount importance. This course covers principles of computer systems security. To build secure systems, one must understand how attackers operate. This course starts by teaching students how to identify security vulnerabilities and how they can be exploited. Then techniques to create secure systems and defend against such attacks will be discussed. Industry standards for conducting security audits to establish levels of security will be introduced. The course will include an introduction to basic cryptographic techniques as well as hardware used to accelerate cryptographic operations in ATMs and webservers.
This course is focused on traditional programming of embedded systems running under Linux, with emphasis on I/O methodologies. The embedded platform used in this course will include a dual-core ARM processor and a field-programmable gate array (FPGA). Lectures will cover such topics as: introduction to ARM processors and FPGA systems, introduction to embedded Linux and code development in an embedded environment, memory-mapped I/O with virtual memory in user and kernel space, kernel modules (device drivers), interrupts, and I/O devices such as buttons, switches, lights, timers, accelerometers, audio, video, A/D, USB peripherals, and developing custom hardware systems in the FPGA.
The course will include a set of required laboratory exercises. Also, each student will propose a novel design project that leverages the topics covered in the course. A project should be somewhat unique and involve development of code in a non-trivial device driver and/or user application program. Students are encouraged to make use a new types of I/O devices (many devices can be connected to Linux via USB), and/or to develop their own custom hardware components using the FPGA provided in the embedded system.
Literature shows that performance per watt can be improved by order(s) of magnitude replacing general purpose compute with application-specific accelerators. This course introduces the students to the world of hardware acceleration in digital systems. They will experience different examples of frameworks that enable the design, implementation, and optimization of such hardware/software systems. They will also be encouraged to explore new trends in the field of domain-specific system architecture. This course is intended to be pure hands-on, targeting independent students who like to tackle challenges and dig deep to get things done. Enrolled students should expect to roll up their sleeves, get familiar with new frameworks, develop some code, perform proper experimentation and analysis, and report their findings in a professional way. Suggested Background: strong software programming ability using high-level language(s) such as C, as well as experience with hardware design and implementation using hardware description language(s) such as Verilog or VHDL, and simulation using EDA tool(s). Familiarity with SIMD and GPU acceleration is a plus.
The goal of this course is to empower students to think critically about the role of computer hardware and systems in some of the most pressing challenges facing society today including climate change, inequality and bias, healthcare, infrastructure, security and privacy. This course takes inspiration from some of the UN’s sustainable development goals including industry, innovation and infrastructure (goal 9), reduced inequalities (goal 10), responsible consumption and production (goal 12), and climate action (goal 13). The course will provide a broad overview of ethical and societal issues that are touched by computer hardware and systems, with a particular focus on sustainability.
Since the first microprocessor was introduced 50 years ago, evolving computer hardware has enabled many innovations critical to society. Consider as just one example the COVID-19 global pandemic and the role computer hardware has played in the delivery of education, facilitation of remote work, disease tracking, and drug discovery. However, we also see societal harms done by computing innovations including the spread of disinformation, propagation of bias into machine learning, and security breaches.
The course will be structured with weekly lectures by the instructor that heavily emphasize discussion. Students should have undergraduate-level knowledge of computer organization, computer hardware, computer architecture and/or computer systems. In addition to building up technical skills and knowledge, it is imperative that today’s engineer also be cognizant of the role their technology plays in society and be equipped to make informed ethical decisions. This course aims to fill a gap in graduate education in preparing socially responsible computer engineers for the workforce.
This project-based course provides a comprehensive introduction to bio-inspired search algorithms and highlights the power of these computational techniques in solving ill-structured problems in the context of smart mobility. Topics to be covered include: graph search algorithms, metaheuristics, evolutionary computing methods, swarm intelligence algorithms, parallel and hybrid metaheuristics and graph neural networks. Adaptive and cooperative aspects of these algorithms are highlighted. Different case studies are discussed to show the ability of these cooperative and adaptive algorithms in solving complex continuous and discrete problems that arise in smart mobility systems and services such as multi-criteria optimal routing, motion planning, vehicle sharing, ridesharing, ridehailing/ridesourcing and ridesplitting problems, deadheading problem, multi-modal transportation planning, last-mile delivery using droids/cargo-bikes, communication relaying, platooning, flocking and fleet management problems to name just a few.
The last decade has seen an enormous shift in computing, with the rise of cloud computing and big data processing, powered by web-scale applications. This course discusses the principles, key technologies and trends in the design of web-scale applications. The course will examine and compare the architectures and implementation of several types of web-scale applications. Students will learn how these applications are designed to achieve high scalability, reliability and high availability.
This is a seminar-style course in which students will be required to read, analyze, present and discuss seminal and cutting-edge research in this area. The aim is to both learn from prior work and extract exciting research questions. A course project will provide concrete experience and deeper understanding of the material.
This course will consist of weekly lectures, seminars, and presentations, on Wearable AI (Artificial Intelligence), wearable sensing, meta-sensing, and “wearables” in the broader intellectual landscape. Experts and invited speakers will provide specific questions that will be asked and moderated by course professor. Students will be given ample opportunity participate in discussions and pose questions. The weekly meetings will consist of:
- Intro + course overview: Wearable AI/HI Today; History and future of wearable AR/VR/XR, important fundamental questions to be explored in the course;
- Applied wearable AI platforms: Vuzix Blade and Vuzix Smart Swim; InteraXon Muse; BlueberryX.com brain-and-world-sensing eyeglass; GPS, location-based, cloud-based, heart monitors; physical, affective, and mental health sensing.
- All Reality (Wearable AI and AR, VR, and XR) with Tom Furness, the “Grandfather of Virtual Reality (VR)”;
- History and state-of-the-art in VR
- Superhumachines and the IEEE Council on Extended Intelligence;
- Extended senses, sensing, and metasensing
- The wearable AI industry featuring InteraXon CEO, BlueberryX CEO, and the Founder and CEO of Vuzix, Paul Travers, as well as Smart Swim creator, Craig Travers
- Final project presentations.
- Looking into the future: What we’ll be/become. What will be the most important breakthrough in wearable AI and how will it affect humanity in 5 years, 10 years, 20 years, and 40 years?
This course is an intermediate graduate course in the area of parallel programming. In the first part of the course we will briefly introduce the architecture of parallel systems and the concept of data dependencies/races. The three most commonly used parallel programming paradigms (shared memory, distributed memory and data parallel) will then be examined in detail. An overview of automatic parallelization of programs and the use of parallel processing in related domains such as parallel and distributed database transaction processing will also be given.
In the second part of the course selected research topics will be examined. This part of the course consists of student-lead discussions of relevant research papers. A research-intensive group project in an area related to program parallelization is a fundamental part of the course.
The projects can be done individually or in small teams of two or three people. The project outcome will be presented in a class session at the end of the semester.
Recommended: an undergraduate course in operating systems.
Interconnection networks form the communication backbone of computers at a variety of scales, from the internet to on-chip networks in multi-core/many-core architectures. With growing emphasis on parallelism as a means of extracting additional processor performance, the communication substrate is a critical factor in both the performance and power consumption of many-core architectures. This course will explore the architecture and design of interconnection networks including topology, routing, flow control and router microarchitecture. This course will also look into the impact on communication requirements of various parallel architectures and cache coherence mechanism. This graduate-level course will focus on interconnection network architectures used in multiprocessor systems and many-core designs with emphasis on recent research innovations in these areas.
An introduction to compiler analyses and techniques used in the automatic parallelization of programs. Topics include: data dependence, dependence testers, loop-level parallelization, loop transformations, loop scheduling, locality management, data distribution, computation partitioning, task-level parallelization, case studies. Students carry out a significant literature survey or a programming project in one of the course topics.
Prerequisites: basic computer architecture and operating systems
With the advent of multicore processors, we are faced with the challenge of exploiting this ubiquitous multi-threaded hardware. This course explores the evolution of modern parallel architectures and programming models, and is divided into two phases. In the first phase, we will investigate in detail the design and operation of modern parallel architectures, with a brief look at how they are programmed.
The second phase of the course will switch gears: we will study current research and development of emerging parallel architectures including multicore processors, interconnection networks, and accelerators and heterogeneous systems-on-chip. In this phase we will read research papers, and through the class project, implement and evaluate new ideas. Students are welcome to suggest topics for class discussion and/or projects.
Field Programmable Gate Arrays are computer chips whose function and wiring can be re-programmed to suit different purposes. FPGAs enable “reconfigurable computing” wherein one can create a custom computing engine with higher efficiency than a conventional software-programmed device, without the expense and difficulty of manufacturing a custom chip. As the development costs of custom (ASIC) computer chips have exploded and the capabilities of FPGAs have increased, FPGAs have become an ever more popular choice to implement complex systems. This course will explore both the use of FPGAs and the design of the FPGA architecture itself.
Through hands-on work students will compare the efficiency and programming effort of FPGA-based signal processing with a DSP processor implementation. We will analyze how well various classes of applications will map to FPGAs vs. alternative highly parallel solutions such as DSP processors and GPUs.
We will also study the architecture of FPGAs: what are the building blocks of FPGAs, how are they interconnected, and what makes a good vs. a bad architecture? Students will learn how to model the area and delay of key circuitry such as RAM blocks and programmable routing, how the ability of Computer-Aided Design (CAD) tools to target different structures affects FPGA architecture, and how to experimentally evaluate new FPGAs. Finally, we will discuss emerging architectures and possible future directions for FPGA evolution.
This course examines current research topics in the area of operating systems. Prerequisites: Advanced Operating Systems Course. Operating system implementation experience.
This is a fundamental course for all majors in computer engineering and electronics. Initially, it will review background in combinatorics and basic data structures. Next, we will cover in detail advanced algorithmic design techniques and data structures, including: quicksort (randomized, deterministic), selecting in linear time, red-black trees, hash tables and hash functions, lower bounds, amortized analysis and splay trees, dynamic programming, greedy methods, graph algorithms, spanning trees, shortest paths, network flow, NP completeness and approximation algorithms.
Prerequisites: Any senior-level VLSI design or logic design course plus intermediate level skills in programming with C or C++.
The Semiconductor Industry Association anticipates that Very Large Scale Integration (VLSI) semi-conductor devices of the near future will indeed be “very large”, including designs that integrate 100-200 million transistors operating in 1-3 GHz clock rates. Due to the increasing dependence on microelectronic devices and the concern for high reliability and short time-to-market window, the VLSI Computer Aided Design community faces great challenges in the development of tools that aid the design of complex devices and guarantee their functionality.
This course covers fundamentals of testing theory and practice for complex VLSI designs and it is a good source of information for engineers with interests in chip and system level design, test engineers and CAD developers. The objective is to give students the ability to solve a wide range of non-trivial testing problems using practical and cost effective techniques. Computer-aided design tools will be developed throughout the semester from the students. These tools will serve as an application of the theory presented in class. Topics covered include Logic Simulation, Fault Modeling, Fault Simulation, Algorithms and techniques for Automatic Test Pattern Generation in Combinational and Sequential Circuits (D-algorithm, PODEM, recursive learning), Design Error/Fault Diagnosis, Introduction to Functional Testing of Microprocessors, ALUs and Memories, Design for Testability, and logic and scan Built-in Self-Test.
Course requirements include a full-term design project and a final exam. During the project, each student will develop a parallel fault simulator and a test generator for single stuck-at faults in combinational and sequential circuits.
This course presents theory and practice for the synthesis of digital systems at the behavioral level (algorithm level), register transfer level and logic level. Lecture topics focus on classic subjects such as micro-architecture, control/data flow analysis, optimization, scheduling, resource and interconnect binding, multi-level logic synthesis, technology mapping and retiming. Lecture topics also extend to cover advanced frontend issues, such as the synthesis of object oriented language constructs, as well as advanced backend issues, such as the interaction with layout design. The class project involves the construction of a complete behavioral synthesis tool from C to synthesizable HDL.
The objectives of this course are to understand the characteristics of emerging blockchain abstractions, how they differ in conception and use, and how to apply blockchains to build distributed applications. We refer to these abstractions as “blockchain middleware”.
A “middleware system” — middleware for short, — constitutes services and (programming) abstractions that facilitate the development of distributed applications and systems in heterogeneous networked environments. The primary objectives of middleware are to increase application reliability, availability, fault-tolerance, scalability, and security. At least conceptually, the “middleware layer” comprises a layer below the application and above the operating system and network substrate.
This course targets research-oriented graduate students who would like to learn more about blockchain middleware. We will discuss the Bitcoin blockchain, the Ethereum blockchain, and the Hyperledger blockchain as well as explore how to build blockchain-based applications. The course will feature invited speakers and student paper presentations. A course project will be a mandatory aspect of the course.
This course aims to present a collection of fundamental design principles and guidelines in modern distributed systems and real- world large-scale networks. In the process, we review a small collection of important research results, not only in the recent literature but also in the literature spanning the past two decades, and see how they reflect fundamental design principles that we have discussed. Our focus is on more recent research literature, in the areas that have been studied extensively: multimedia networking, peer- to-peer networks, as well as multi-hop wireless networks.
The holy grail of distributed systems and networking design is to achieve Quality of Service, or QoS. Quality of Service is concerned with the “peace of mind” that resources are set aside to guarantee a particular level of performance, even with competition from other users sharing the same pool of resources. We will see why this is hard, and why it sometimes may not be necessary. However, having such an objective is important to motivate innovation in the design of distributed systems and real-world networks, wireless or wired.
The course is divided into a number of episodes (each covered in the time of approximately one lecture depending on progress). We start with an examination of our design objectives, including Quality of Service. We then introduce a number of fundamental design principles that may lead to a high-quality design. Subsequently, we take a leisure walk through more specific areas of research, spanning peer- to-peer networks, wireless mesh networks, secure protocols, so-called “killer” applications, as well as recent advances in network coding. Throughout the course, we revisit the design principles often, and see how they affect the successes (or failures) of research ideas.
Prerequisites: Basic uniprocessor design. Basic Instruction set. Computer organization. Hardwired and Microcoded control. Basic pipelining. Basic Memory Systems.
State-of-the-art Uniprocessor Design. In a nutshell we ask not “how can I build a processor that works?” but “how can we build the ‘best’ processor possible?”. The following topics are included: instruction set architecture, performance analysis and metrics, cost, simulation methods and tools, instruction-level parallelism, vector processors, VLIW processors. Advanced uniprocessor prediction-based techniques and memory systems. If you will be pursuing research in computer architecture this course provides the knowledge necessary to get started. If you will not be pursuing research in computer architecture this course will expose you to the current cutting-edge techniques used in modern processors.
Note: Students who took the course Sensory Cybernetics and the Theoretical Foundation of the Senses will not be allowed to take this course under the new title.
The senses from the point of view of an engineer. This course explores the theoretical foundations of the senses from both a systems and a neurophysiological point of view. Emphasis will be placed on understanding the senses holistically rather than individually (i.e. we study the common features that span the various sensory modalities). The course material will involve the application of ideas drawn from information theory, statistical signal detection theory and probability theory. In particular, we cover the following theories: (1) the signal detection approach to sensory analysis (vis-à-vis Donald Laming’s theory of differential coupling), the information encoded by sensory neurons, generalized Fechnerian psychophysics (e.g. the entropy theory of Kenneth Norwich), and finally the probabilistic approach to perception. Along the way, concepts crucial to the study of sensory system are also introduced including: the identification and categorization of sensory stimuli, reaction time, decision-making processes, differentiation of stimuli, the limits of perceptibility, and large-scale integration of sensory information. The course will also consider applications of sensory research to pattern recognition, multimedia and biological computers. Course work will involve surveying the existing literature, doing a research project in small groups and a final examination. No biology background is required although some familiarity with the concept of probability is preferred.
The course introduces students to research topics on Computer Security. Students will be introduced to concepts in exploiting vulnerabilities, tools for detection of vulnerabilities, access control models, basic cryptography, and operating system, hardware, and network security.
Circuit simulation is a commonly used technique for analysis and verification of circuits, ranging from integrated circuits and microelectronics to power distribution networks and power electronics. It is an established art and remains an important area of research. This course covers the theoretical background for modern circuit simulation, as well as the numerical techniques that are at the core of every circuit simulator.
Mobile and wearable devices have had a dramatic impact on a vast array of new areas including psychology, medicine, global health, music, banking, cooking, exploring, travel, shopping, and games. Many more things are possible, and so the purpose of this course is to encourage creativity in the creation of new applications of mobile, wearable devices, often together with online servers in an inter-disciplinary environment. The course is open to all graduate students at the University of Toronto, and is primarily a project-based course in which the goal is to produce a working app by the end of course. Projects will be done in groups of three: two students with programming skills are matched with one from a non-programming (a ‘specialist’) background. The project subject area must in the specialist’s field. Some of the projects are also driven by external (non-student) specialists recruited to participate in the course.
There will be three kinds of lectures:
1. On the capabilities of modern mobile devices at both a technical and lay level for non-specialists.
2. Case studies of innovative applications, linking to methods of innovating.
3. Project Proposals and Presentations
Grading will be on a four basic assignments (programming mobile devices for the programmers, and explorations of mobile ideas and case studies for the non-programmers) project proposals, interim presentations, and final project report and presentation. The course will support the use Google Android-based phones and Apple iOS-based phones only.
This course is a mixture of technical work, creativity in the medium of software mobile applications, communication and inter-disciplinary interaction.
See: http://www.eecg.utoronto.ca/~jayar/ece1778/ for a complete description of this course, and example projects from previous years.
Previous programming experience is a prerequisite for this course.
This course provides an introduction into the technologies behind cloud computing. A combination of lectures and hands-on programming assignments expose the student to the leading cloud computing paradigms and programming interfaces (e.g., EC2, Azure, App Engine). In addition, lectures provide an overview of the underlying technological concepts that make cloud computing possible (e.g., virtualization, scalability, fault tolerance, security).
With the rapid advancement of mobile computing, and the limited physical space available for keyboards/buttons on mobile device, there will be an ever greater need for novel types of mobile user interfaces including dynamic keyboards, computer-vision based interfaces, speech and audio processing (with Siri as one example), as well as other interface modalities. The goal of this course is to provide an overview of the information processing algorithms and design principles behind today’s most popular and tomorrow’s emerging mobile user interface systems.
Prerequisites: ECE344H1 or equivalent
Modern computer systems have become tightly intertwined with our daily lives. However, they are failure-prone and difficult to manage and thus hardly dependable. Today, these problems dominate total cost of ownership of computer systems, and unfortunately they have no simple solutions. There is a realization that these problems cannot be decisively solved but are ongoing facts of life that must be dealt with regularly. To do so, systems should be designed to detect, isolate and recover from these problems.
This advanced graduate-level course focuses on dependability in software systems and examines current research that aims to address challenges caused by software and hardware bugs and software misconfiguration. Students are expected to read and critique recent research papers in operating systems that cover these areas. They are also expected to work on a research project and make class presentations.
The aim of the course is to provide hands-on experience in developing applications software for graphics processors with massively parallel computing resources. The target audiences of the course are those who want to develop exciting applications for these processors, as well as those who want to develop programming tools and future implementations for these processors. The initial part of the course focuses on popular programming interfaces for these processors. The course continues with a closer view of the internal organization of graphics processors and how it impacts performance. Finally, implementations of applications and algorithms on these processors will be discussed.
Skillful system architects ought to study the customers’ requirements and the target use-cases carefully and adequately before designing their algorithms/architectures. This course introduces the students to various design aspects of digital systems, and train them to deal with the existing tradeoffs, by influencing their designs to meet the target use-cases. Digital video codec system(s) are chosen to be the case-study to explain the concepts that are delivered throughout the course. The students will be introduced to the multi-dimensional design aspects of such a digital system, and will learn how technology leaders seek compromises between various important parameters such as throughput, power consumption, cost, programmability, time to market, as well as application-specific aspects such as quality, target bitrate, latency, and error resiliency. They will be trained to model different algorithms using high-level software and analyze the gains/losses of various tradeoffs. The course is intended to be self-contained, hence, reasonable preparation for most of the topics is provided. This is a hands-on type of course, so enrolled students should expect to roll up their sleeves and develop some high-level software code to solve interesting problems.
The deployment of machine learning in real-world systems calls for a set of complementary technologies that will ensure that machine learning is trustworthy. Here, the notion of trust is used in its broad meaning: the course covers different topics in emerging research areas related to the broader study of security and privacy in machine learning. Students will learn about attacks against computer systems leveraging machine learning, as well as defense techniques to mitigate such attacks.
The course assumes students already have a basic understanding of machine learning. Students will familiarize themselves with the emerging body of literature from different research communities investigating these questions. The class is designed to help students explore new research directions and applications. Most of the course readings will come from seminal papers in the field.
This course provides an overview and hands-on experience with a core of qualitative and quantitative empirical research methods, including interviews, qualitative coding, survey design, and large-scale mining and analysis of data. There will be extensive reading with occasional student presentations about the reading in class, weekly homework assignments, and a semester-long research project for which students must prepare in-class kickoff and final presentations as well as a final report. We will focus on software-engineering related research questions in readings and assignments. Students will mine and integrate data from and across online software repositories (e.g., GitHub and Stack Overflow) and employ a spectrum of data analysis techniques, ranging from statistical modeling to social network analysis. For the final research project, we encourage students to come up with a research question of interest to themselves. The delivery will be a research paper, and one or more empirical methods presented in class have to be part of the paper.
Prerequisites: APS360H, CSC311H, ECE324H, ECE1513H, or equivalent
This course is about learning and applying deep learning approaches in Natural Language Processing. We assume that a prior course in neural networks training and software has been taken. This course begins with the basics of word-level embeddings – their properties and training. These form the basis of neural-network-based classifiers employed to do classification of sentiment, named entity recognition and many other language tasks. We will include a description of the Transformer deep learning network – its structure, training and use. This will include the use of the transformer as a classifier, but also as in generative mode, in which language is produced in response to input language. Much of the learning will be applied in 3 or 4 hands-on programming assignments. Students will also do a major project of their own choosing to make use of these capabilities. There will also be an emphasis on developing good software engineering practices in the creation of the project.