SURFER : ANY-CORE SOFTWARE DEFINED RADIO A Dissertation Submitted to the Graduate School of the University of Notre Dame in Partial Fulfillment of the Requirements for the Degree of Doctor of Philosophy by Michael L Dickens J. Nicholas Laneman, Director Graduate Program in Electrical Engineering Notre Dame, Indiana April 2012 (cid:13)c Copyright by Michael L Dickens 2012 All Rights Reserved SURFER : ANY-CORE SOFTWARE DEFINED RADIO Abstract by Michael L Dickens This thesis presents a general-purpose software defined radio architecture, Surfer, which has been designed to allow for dynamic modification of system behavior during runtime. Surfer leverages commodity processing devices such as those on a typical laptop to allow heterogeneous processing. This heterogeneity is enabled through the use of one or more signal processing implementations, or flavors, per block. Each flavor can target a different processing device, and flavors can be swapped during runtime without interrupting data flow. Two waveform programming interfaces are provided that can be intermixed for waveform defini- tion: traditional block-centric programming, and a buffer-centric approach such as that found in MATLAB. Within a waveform graph consisting of processing blocks, each connection is a buffer that holds the data being generated by one block and consumed by others. Each connection is paired with a threshold on the amount of data in the buffer, and is used for scheduling. Runtime statistics allow a system supervisor to assist in mapping and scheduling, dynamically during run- time, in order to meet waveform requirements. This work demonstrates that it is both possible and useful to implement dynamic reconfiguration, mapping, and scheduling during runtime on commodity hardware, entirely in software. These capabilities are demonstrated via an OFDM transmitter implementation. To my grandfather, Milton Dickens, PhD; and my father, J. Kirk Dickens, PhD: They always wanted one of their offspring to have a PhD. And to Robert D. Preuss, PhD: You never truly knew the lessons I learned from you. Thank you for mentoring me; may you rest in peace, my friend. ii ACKNOWLEDGMENTS I would first and foremost like to thank my advisor, Dr. J. Nicolas Laneman, for his advice, encouragement, support, and – most of all – patience in tolerating the long and winding path I took that has culminated in this dissertation. I am grateful to my committee – Drs. Poellabauer, Pratt, Rondeau, and Stevenson – for their time and valuable suggestions in this dissertation writing process as well as the papers and presentations leading up to it. My advisor’s group has been supportive and encouraging the many ways. Thank you Alice, Brian, Ebrahim, Glenn, Joseph, Mostafa, Peyman, and Utsaw – we’ve had some great times together over the years. I would not be where I am today with having been a GNU Radio developer, and the challenges and friendships made though that project. My friends and Notre Dame colleagues from my Master’s days have also played an important role in keeping me sane. A big “shout out” especially to Betty, Rob, Sean, and Sami. I thank my parents and grandparents for making education a high priority for me during my youth, and encouraging me to pursue higher education. Finally, I recognize my partner, Jeanne, and son, Conrad, for loving and sup- porting me throughout this process. iii CONTENTS ACKNOWLEDGMENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . iii FIGURES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix CHAPTER 1: INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Problem Description . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3 Contributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.4 Thesis Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 CHAPTER 2: BACKGROUND . . . . . . . . . . . . . . . . . . . . . . . . 16 2.1 A Brief History of Wireless Communications . . . . . . . . . . . . 16 2.2 A Brief History of Software Defined Radio . . . . . . . . . . . . . 18 2.3 SDR Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.3.1 Block Abstraction . . . . . . . . . . . . . . . . . . . . . . . 24 2.3.2 Waveform / Graph . . . . . . . . . . . . . . . . . . . . . . 25 2.3.3 Data Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.3.4 Buffering . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.3.5 Packets and Frames . . . . . . . . . . . . . . . . . . . . . . 31 2.3.6 Computational Intensity . . . . . . . . . . . . . . . . . . . 32 2.3.7 Chunks, Throughput, and Latency . . . . . . . . . . . . . 33 2.3.8 Signal Processing . . . . . . . . . . . . . . . . . . . . . . . 34 2.3.9 Scheduling and Mapping . . . . . . . . . . . . . . . . . . . 36 2.3.10 Reconfiguration . . . . . . . . . . . . . . . . . . . . . . . . 37 2.3.11 OS Abstraction Layer . . . . . . . . . . . . . . . . . . . . 38 2.3.12 Waveform Interfaces . . . . . . . . . . . . . . . . . . . . . 39 2.4 Other SDR implementations . . . . . . . . . . . . . . . . . . . . . 40 2.5 Other Related Work . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.5.1 SDR Using GPUs . . . . . . . . . . . . . . . . . . . . . . . 42 2.5.2 GNU Radio . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.5.3 IRIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 iv 2.5.4 OSSIE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 CHAPTER 3: SURFER OVERVIEW . . . . . . . . . . . . . . . . . . . . 49 3.1 System Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.1.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.1.2 Operating System . . . . . . . . . . . . . . . . . . . . . . . 51 3.1.3 Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.1.4 Block Processing . . . . . . . . . . . . . . . . . . . . . . . 53 3.1.5 Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.1.6 Graphical . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.1.7 Application . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.2 Design Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.2.1 Background Dependencies . . . . . . . . . . . . . . . . . . 55 3.2.2 Pool of Runners . . . . . . . . . . . . . . . . . . . . . . . . 56 3.2.3 “Dumb” Runtime, “Smart” Supervisor . . . . . . . . . . . 57 3.2.4 Connection Information and Use . . . . . . . . . . . . . . 58 3.2.5 Frames and Packets . . . . . . . . . . . . . . . . . . . . . . 59 3.2.6 Reconfigurability . . . . . . . . . . . . . . . . . . . . . . . 59 3.2.7 Statistics Collection and Use . . . . . . . . . . . . . . . . . 60 3.3 Next Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 CHAPTER 4: SALT : THE SURFER OS ABSTRACTION LAYER . . . 62 4.1 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.2 New and Augmented . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.2.1 Application and Executable . . . . . . . . . . . . . . . . . 63 4.2.2 Debugging and Inline . . . . . . . . . . . . . . . . . . . . . 64 4.2.3 DynamicStructure . . . . . . . . . . . . . . . . . . . . . . 64 4.2.4 Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.2.5 External Dependencies . . . . . . . . . . . . . . . . . . . . 67 4.2.6 Global Initialization . . . . . . . . . . . . . . . . . . . . . 68 4.2.7 Item Type . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.2.8 Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.2.9 Packet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.2.10 Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 4.2.11 Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 CHAPTER 5: SHARK : THE SURFER RUNTIME KERNEL . . . . . . . 75 5.1 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.2 Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.2.1 Connections . . . . . . . . . . . . . . . . . . . . . . . . . . 78 v 5.2.2 Connection Parameters . . . . . . . . . . . . . . . . . . . . 79 5.2.3 Thresholds . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.2.4 Self-Processing . . . . . . . . . . . . . . . . . . . . . . . . 83 5.2.5 Processing Sequence . . . . . . . . . . . . . . . . . . . . . 83 5.3 Block Runners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.4 Buffering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.4.1 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.4.2 Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.4.3 Affinity . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.4.4 Masters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.4.5 Readers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 5.4.6 Writers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.4.7 Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.4.8 Stalled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 5.4.9 Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 5.5 Supervisor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 5.5.1 Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 5.5.2 Reconfiguration . . . . . . . . . . . . . . . . . . . . . . . . 95 5.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 CHAPTER6: SPF:THESURFERSIGNALPROCESSINGFRAMEWORK 97 6.1 Typed Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 6.1.1 Buffer Readers and Writers . . . . . . . . . . . . . . . . . 99 6.1.2 Shared Memory Double-Mapped Buffers . . . . . . . . . . 100 6.1.3 Packets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.2 Flavor Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 6.2.1 Apple Accelerate Base . . . . . . . . . . . . . . . . . . . . 107 6.2.2 FFTW3 Base . . . . . . . . . . . . . . . . . . . . . . . . . 108 6.2.3 naCL Base . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 6.2.4 Subgraph Base . . . . . . . . . . . . . . . . . . . . . . . . 110 6.3 Flavor Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 6.4 State Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 6.5 Block Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 CHAPTER 7: NACL : ANOTHER OPENCL C++ INTERFACE . . . . . 118 7.1 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 7.1.1 Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 7.1.2 Device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 7.1.3 Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 7.1.4 Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 7.1.5 Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 vi 7.1.6 KernelArgument . . . . . . . . . . . . . . . . . . . . . . . 128 7.1.7 ProgramSource . . . . . . . . . . . . . . . . . . . . . . . . 128 7.1.8 CommandQueue . . . . . . . . . . . . . . . . . . . . . . . 129 7.1.9 MemoryObject . . . . . . . . . . . . . . . . . . . . . . . . 130 7.1.9.1 DeviceBuffer . . . . . . . . . . . . . . . . . . . . . . . . 131 7.1.9.2 DeviceImage . . . . . . . . . . . . . . . . . . . . . . . . 131 7.1.9.3 DeviceRect . . . . . . . . . . . . . . . . . . . . . . . . . 131 7.1.10 MemoryMap . . . . . . . . . . . . . . . . . . . . . . . . . . 132 7.1.11 Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 7.2 Additions for Data-Flow Processing . . . . . . . . . . . . . . . . . 133 7.2.1 RepetitiveTask . . . . . . . . . . . . . . . . . . . . . . . . 134 7.2.2 Runtime Compiling . . . . . . . . . . . . . . . . . . . . . . 135 7.2.3 Work Items . . . . . . . . . . . . . . . . . . . . . . . . . . 140 7.2.4 CommandQueue Profiling . . . . . . . . . . . . . . . . . . 141 7.3 Connection to Surfer . . . . . . . . . . . . . . . . . . . . . . . . . 141 7.3.1 Block Runners . . . . . . . . . . . . . . . . . . . . . . . . 142 7.3.2 Flavor Base . . . . . . . . . . . . . . . . . . . . . . . . . . 142 7.4 Future Work: Optimized naCL Flavors . . . . . . . . . . . . . . . 145 7.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 CHAPTER 8: SALINE : THE SURFER ALGEBRAIC LANGUAGE IN- TERFACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 8.1 Abstraction Comparison . . . . . . . . . . . . . . . . . . . . . . . 151 8.1.1 Block-centric Abstraction . . . . . . . . . . . . . . . . . . 151 8.1.2 Buffer-centric Abstraction . . . . . . . . . . . . . . . . . . 154 8.2 Algebraic Abstraction . . . . . . . . . . . . . . . . . . . . . . . . 155 8.2.1 Types of Variables . . . . . . . . . . . . . . . . . . . . . . 155 8.2.2 Types of Operators . . . . . . . . . . . . . . . . . . . . . . 157 8.2.3 Type Propagation via Templates . . . . . . . . . . . . . . 159 8.2.4 Runtime operation checks . . . . . . . . . . . . . . . . . . 161 8.2.5 Interface to the Underlying SDR Framework . . . . . . . . 163 8.2.6 Example Block Implementation . . . . . . . . . . . . . . . 163 8.3 Example Saline Use . . . . . . . . . . . . . . . . . . . . . . . . . . 168 8.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 CHAPTER 9: EXAMPLES . . . . . . . . . . . . . . . . . . . . . . . . . . 171 9.1 Narrowband FM Decoder and Downsampler . . . . . . . . . . . . 172 9.1.1 Latency and Throughput . . . . . . . . . . . . . . . . . . . 175 9.1.2 Execution Timing . . . . . . . . . . . . . . . . . . . . . . . 177 9.2 OFDM Over-the-Air Transmitter . . . . . . . . . . . . . . . . . . 182 9.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 vii CHAPTER 10: CONCLUSIONS . . . . . . . . . . . . . . . . . . . . . . . 190 10.1 Future Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 10.1.1 Cognitive Supervisor . . . . . . . . . . . . . . . . . . . . . 192 10.1.2 Machine Learning for Channel Estimation . . . . . . . . . 194 APPENDIXA:ACRONYMS,ABBREVIATIONS,CONCEPTS,ANDTER- MINOLOGY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 A.1 Acronyms and Abbreviations . . . . . . . . . . . . . . . . . . . . 195 A.2 Concepts and Terminology . . . . . . . . . . . . . . . . . . . . . . 197 APPENDIX B: C++ FEATURES . . . . . . . . . . . . . . . . . . . . . . 207 B.1 Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 B.2 Operator overloading . . . . . . . . . . . . . . . . . . . . . . . . . 209 B.3 type info and typeid . . . . . . . . . . . . . . . . . . . . . . 210 B.4 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 B.5 Passing by Reference . . . . . . . . . . . . . . . . . . . . . . . . . 212 APPENDIX C: BLOCKS AND FLAVORS . . . . . . . . . . . . . . . . . . 214 BIBLIOGRAPHY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 viii
Description: