If you have any question, suggestion, or new idea while taking my course, please come to talk with me. My office is E-114 (Engineering building).

ECE 432/532 Parallel programming

The current trend in computing and embedded architectures is to replace complex superscalar architectures with many processing units connected by an on-chip network. Modern embedded, server, graphics and network processors already include tens to hundred of cores on a single die. Moreover, the development of such multi-core platforms is driven by the increase of highly parallel/multi-threading and demanding applications such as complex system simulation and machine learning. In this course, we will discuss many key concepts used in modern parallel computer architectures explore parallel programming frameworks such MPI, Pthreads and OpenMP.

ECE 430 Principles of system programming

What is an operating system and how can we explore its properties? Can we customize some of its properties in order to boost specific application types? Operating systems are the cornerstone of modern computing systems and require tight collaboration between hardware and software. This course focuses on the principles of operating systems (Unix, Windows) such as processes, deadlocks, CPU scheduling, memory management, file management, sockets etc.

ECE 321 Introduction to software engineering

How can you effectively develop an application? Which abstract data types should you utilize and what is the trade-off? Procedural or Object Oriented Programming? These are some of the most important questions to be answered in this course. As the complexity of modern applications and problems increases, developers should design efficient solutions while taking into considerations performance, scalability and memory consumption of their solutions. The focus of this course is on the design and trade-off of abstract data types under procedural (C) and Object Oriented Programming (C++).

ECE 329 Computer architecture

The interaction between software and hardware at multiple levels requires deep understanding of the computing fundamentals. Computer organization is a very important and basic course for computer engineer students. The course, among others, focuses on computer abstractions and technologies, processor design details, memory hierarchy, and computer arithmetics.

ECE 511 Software Hardware Co-design for Deep Neural Networks

Analysis of deep learning techniques such as deep feedforward networks, regularization, optimization algorithms, convolutional networks, and sequence modeling. Utilization of machine learning frameworks such as Tensorflow and Pytorch. Investigation of hardware architectures for machine learning applications such as GPUs, TPUs, and systolic arrays.

ECE 517 Edge Computing

Edge computing is a rapidly evolving field that seeks to address the growing need for efficient data processing and real-time decision-making in modern computing environments. The course aims to provide a comprehensive understanding of the principles, technologies, and applications of edge computing. Students will explore the architecture, key components, and challenges of edge systems, along with the advantages they offer over traditional centralized cloud computing models. The curriculum will also delve into topics such as data management, security, and privacy concerns, while highlighting the role of edge computing in various industry sectors, including IoT, smart cities, and autonomous vehicles. By the end of this course, students will be equipped with the knowledge and skills to design and implement edge computing solutions, as well as to identify opportunities for innovation and optimization in this burgeoning field.