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 earithmetics.