  Developing efficient software and hardware has never been harder whether it
is for a tiny IoT device or an Exascale supercomputer. Apart from the ever
growing design and optimization complexity, there exist even more fundamental
problems such as lack of interdisciplinary knowledge required for effective
software/hardware co-design, and a growing technology transfer gap between
academia and industry.
  We introduce our new educational initiative to tackle these problems by
developing Collective Knowledge (CK), a unified experimental framework for
computer systems research and development. We use CK to teach the community how
to make their research artifacts and experimental workflows portable,
reproducible, customizable and reusable while enabling sustainable R&D and
facilitating technology transfer. We also demonstrate how to redesign
multi-objective autotuning and machine learning as a portable and extensible CK
workflow. Such workflows enable researchers to experiment with different
applications, data sets and tools; crowdsource experimentation across diverse
platforms; share experimental results, models, visualizations; gradually expose
more design and optimization choices using a simple JSON API; and ultimately
build upon each other's findings.
  As the first practical step, we have implemented customizable compiler
autotuning, crowdsourced optimization of diverse workloads across Raspberry Pi
3 devices, reduced the execution time and code size by up to 40%, and applied
machine learning to predict optimizations. We hope such approach will help
teach students how to build upon each others' work to enable efficient and
self-optimizing software/hardware/model stack for emerging workloads.
