Contents
vii
Contents
1
Introduction
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduces some features of the ’C6000 microprocessor and discusses the basic process for
creating code and understanding feedback.
1.1
TMS320C6000 Architecture
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2
TMS320C6000 Pipeline
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3
Code Development Flow To Increase Performance
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4
Understanding Feedback
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.1
Stage 1: Qualify the Loop for Software Pipelining
. . . . . . . . . . . . . . . . . . . . . . . .
1.4.2
Stage 2: Collect Loop Resource and Dependency Graph Information
. . . . . .
1.4.3
Stage 3: Software Pipeline the Loop
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
Compiler Optimization Tutorial
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Uses example code to walk you through the code development flow for the TMS320C6000.
2.1
Introduction: Simple C Tuning
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2
Lesson 1: Loop Carry Path From Memory Pointers
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3
Lesson 2: Balancing Resources With Dual-Data Paths
. . . . . . . . . . . . . . . . . . . . . . . . .
2.4
Lesson 3: Packed Data Optimization of Memory Bandwidth
. . . . . . . . . . . . . . . . . . . . .
2.5
Lesson 4: Program Level Optimization
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6
Lesson 5: Writing Linear Assembly
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
Optimizing C/C++ Code
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Explains how to maximize C performance by using compiler options, intrinsics, and code trans-
formations.
3.1
Writing C/C++ Code
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1
Tips on Data Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2
Analyzing C Code Performance
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2
Compiling C/C++ Code
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.1
Compiler Options
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.2
Memory Dependencies
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3
Performing Program-Level Optimization (–pm Option)
. . . . . . . . . . . . . . . . . . .
3.3
Profiling Your Code
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.1
Using the Standalone Simulator (load6x) to Profile
. . . . . . . . . . . . . . . . . . . . . .
3.4
Refining C/C++ Code
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.1
Using Intrinsics
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.2
Using Word Access for Short Data
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.3
Software Pipelining
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .