Texas Instruments TMS320C64X User Manual

Page 103

Advertising
background image

DSP_mat_trans

4-75

C64x+ DSPLIB Reference

Matrix Transpose

DSP_mat_trans

Function

void DSP_mat_trans (const short *x, short rows, short columns, short *r)

Arguments

x[rows*columns]

Pointer to input matrix.

rows

Number of rows in the input matrix. Must be a multiple
of 4.

columns

Number of columns in the input matrix. Must be a multiple
of 4.

r[columns*rows]

Pointer to output data vector of size rows*columns.

Description

This function transposes the input matrix x[ ] and writes the result to matrix r[ ].

Algorithm

This is the C equivalent of the assembly code without restrictions. Note that
the assembly code is hand optimized and restrictions may apply.

void DSP_mat_trans(short *x, short rows, short columns, short
*r)

{

short i,j;

for(i=0; i<columns; i++)

for(j=0; j<rows; j++)

*(r+i*rows+j)=*(x+i+columns*j);

}

Special Requirements

-

Rows and columns must be a multiple of 4.

-

Matrices are assumed to have 16-bit elements.

Implementation Notes

-

Bank Conflicts: No bank conflicts occur.

-

Interruptibility: The code is interrupt-tolerant but not interruptible.

-

Data from four adjacent rows, spaced “columns” apart are read, and a
local 4x4 transpose is performed in the register file. This leads to four
double words, that are “rows” apart. These loads and stores can cause
bank conflicts; hence, non-aligned loads and stores are used.

Benchmarks

Cycles

(2 * rows + 9) * columns/4 + 3

Codesize

224 bytes

Advertising