Learn the following two programing langrages
- C (C99)
- Python (v3.0)
Do the following projects to practice and learn good habits when programming in C
Here's another good repo that has lots of good projects for you to practice.
- Project-Based-Tutorials-in-C (try 'Emulator 101', 'hash table', 'How to Write a Video Player in Less Than 1000 Lines')
Learn the following Good Coding Styles and use them in your research projects:
- C语言的语法风格与代码书写规范指南 (简单)
- NASA C coding style, NASA, 1994 (推荐)
- Recommended C Style and Coding Standards, UC Berkeley, 1997 (简单)
- Guidelines for the use of the C language in critical systems, MISRA, 2018 (高级)
- A list of C and C++ Style Guides
Read the following two books to learn basic concepts for computer architecture. Important things to understand include pipeline, memory hierarchy, roofline model, Amdahl's law, ILP (instruction level parallelism), TLP (task level parallelism), DLP (data level parallelism), SIMD/VLIW processor
- ''Computer Organization and Design The Hardware Software Interface'', 3rd Edition, 2004 (基础)
- ''Computer Architecture A Quantitative Approach'', 6th Edition, 2019 (进阶)
Read the following book to learn OpenCL programing (GPU/FPGA):
- ''OpenCL Programming Guide'', Aaftab Munshi, et.al., 2012 [also known as The Green Book]
- ''FPGA异构计算——基于OpenCL的开发方法'', 黄乐天 等, 2015
Also, refers to Intel/Xilinx's OpenCL user guide to learn specific techniques that will be used in the project.
Finally, learn our opensource project PipeCNN. Run the examples, such as caffenet, vgg-16, resnet, YOLO on the DE10-nano and DE5-net platforms. Learn how to configure, compile, debug the source codes and profile the performance of the accelerator.
Learn TensorRT and CUDA programing. Try examples on our TX2/TK1 platforms.
Students who are working on hardware designs for deep neural networks should read the following tutorials.
- Hardware Architectures for Deep Neural Networks, MICRO Tutorial 2016.
First, read the following artichles to learn how to write research papers.
- ''How to write a great research paper'', Deep Learning Indaba, Stellenbosch, 2018
- ''How to Publish a Research Paper'', wikiHow, 2019
- ''How to Write a Good Scientific Paper'', Chris A. Mack, SPIE, 2018
- ''How to Write a Good Paper in Computer Science and How Will It Be Measured by ISI Web of Knowledge'', R?zvan Andonie, et.al., 2010
Secondly, read the following papers, which are really good examples in the related fields.
- Optimizing FPGA-based Accelerator Design for Deep Convolutional Neural Networks, FPGA 2015.
- Throughput-Optimized OpenCL-based FPGA Accelerator for Large-Scale Convolutional Neural Networks, FPGA 2016.
- An OpenCL Deep Learning Accelerator on Arria 10, FPGA 2017.
- Improving the Performance of OpenCL-based FPGA Accelerator for Convolutional Neural Network, FPGA 2017.
- A Framework for Generating High Throughput CNN Implementations on FPGAs, FPGA 2018.
- An Efficient Hardware Accelerator for Sparse Convolutional Neural Networks on FPGAs, FCCM 2019.
The following survery papers are also worth reading.
- A Survey of FPGA Based Neural Network Accelerator, ACM TRETS 2017.
- Deep Neural Network Approximation for Custom Hardware: Where We’ve Been, Where We’re Going, ACM Computing Surveys 2019.
Our own research papers on FPGA accelerators:
- PipeCNN: An OpenCL-Based Open-Source FPGA Accelerator for Convolution Neural Networks, FPT 2017
- ABM-SpConv: A Novel Approach to FPGA-Based Acceleration of Convolutional Neural Network Inference, DAC 2019
- Ristretto: A Framework for Empirical Study of Resource-Efficient Inference in Convolutional Neural Networks, IEEE T-NNLS 2018.
- 8-bit Inference with TensorRT, Nvidia 2017.
- Quantizing deep convolutional networks for efficient inference: A whitepaper, Google, 2018.
A more complete list is here.
A more complete list is here.
A more complete list is here.
A more complete list is here.