Faculty Spotlight: David Whalley
David Whalley is a professor in the Department of Computer Science, part of the College of Arts and Sciences. He served as the computer science department chair from 2005 to 2011, and his research interests include compiler optimizations, tools for supporting the development and maintenance of compilers, computer architecture and embedded systems. Whalley’s research has been supported by the National Science Foundation for many years.
Tell us a little about your background.
I received my doctorate degree in computer science from the University of Virginia in the spring of 1990. Since joining FSU in the fall of 1990, I have received five teaching awards. I became a named professor in 2003, a distinguished member of the Association for Computing Machinery in 2009 and a fellow of the Institute of Electrical and Electronics Engineers in 2017. I am also the first FSU faculty member to receive a Fulbright Distinguished Chair award, and I have received over $8 million in research funding with almost $6 million as a principal investigator. FSU has issued multiple patents on my research, and I have also served as an investigator on grants that have provided over $14 million in scholarships to FSU computer science students.
Regarding my personal background, both of my parents attended FSU. My father attended for his master’s degree in psychology in 1947, which was the transition year Florida State College for Women became Florida State University. My father was in the first class of men at FSU, and here is where he met my mother who was majoring in education.
What brought you to FSU?
I spent three years in the computer science industry between my master’s and doctorate degrees. I decided to pursue my doctorate degree, found that I liked research, and wanted to give academia a try.
What are your areas of research and what inspired you to choose them?
My areas of research include compilers and computer architecture. I will define a few terms to make the overview of my research areas easier to understand. An application is the code that performs tasks that can be utilized by the users of a computer. These applications are written by a programmer in a high-level language, which has a strong abstraction from the details of the computer. A compiler is the software that automatically translates these applications to the commands that a computer can perform. The computer architecture is the interface to the computer hardware that executes these commands. A compiler optimization involves transformations on these computer commands associated with an application that provides some types of improvements. I write compiler optimizations to better exploit architectural features and propose new architectural features that can be exploited by compiler optimizations. I like working in the areas of compilers and computer architecture as they are very quantitative, meaning one can measure the improvement that has been made.
What do you want the public to know about your research? Why is your topic important?
Improving computer performance allows new types of applications to be utilized. For instance, current computers can generate graphical user interfaces, recognize speech and translate text written in one human language to another. These tasks were not possible until the performance of computers improved. Reducing the code size of executables allows more applications to be simultaneously resident in the memory space of a computer, which can decrease the cost for embedded systems where computers are embedded in other devices. Reducing energy usage like this allows for mobile computers, like smartphones, to extend the time before recharging batteries is needed, desktop computers to run faster without overheating, and decreases electricity usage for clusters that need many computers to provide services over the internet.
Furthermore, some of compiler optimizations I have developed have been adopted in industrial compilers. I have developed a technique to automatically isolate the point when and where a compiler applies an optimization that causes incorrect output. I also developed some of the foundational techniques to automatically calculate the worst-case execution time of tasks so they can be safely scheduled in real-time systems. For instance, there are timing constraints to recognize features in images to support a self-driving car. Finally, I have discovered techniques to determine the best order of applying optimization phases, which had previously been believed to be a completely intractable problem.
Who are your role models? Who has influenced you most in your life and career?
My parents were my role models. All four of my grandparents never had the opportunity to pursue education beyond elementary school. Both of my parents earned university degrees, and my father was able to earn a doctorate degree with my mother's support.
What is your favorite part of your job? What is the most challenging part of your job?
I like the variety of tasks that I do every day. This includes teaching classes, advising my research students, coming up with research ideas and applying for grant funding for my research. The best aspect of my job is that I have almost complete freedom in my research, and I have a lot of influence on the courses I teach and services I provide at the university. The most challenging aspect of my job is also how open-ended it is, as there is always more that I can do, particularly in research.
What do you like to do in your free time?
I do not have a lot of free time or hobbies outside of my work, but I like to exercise at the gym and I do everything I can to make my wife and son happy at home.
If your students only learned one thing from you (of course, hopefully they learn much more than that), what would you hope it to be?
Attitude is often more important than aptitude. Students should always try to do their best, whether in classes, working on research problems or any other aspects of their studies.