| typedef float fftw_real; |
| |
| void complex_transpose(fftw_real *rA, fftw_real *iA, int n, int is, int js) |
| { |
| int i, j; |
| |
| for (i = 1; i < n; ++i) { |
| for (j = 0; j < i; ++j) { |
| fftw_real ar, ai, br, bi; |
| |
| ar = rA[i * is + j * js]; |
| ai = iA[i * is + j * js]; |
| br = rA[j * is + i * js]; |
| bi = iA[j * is + i * js]; |
| |
| rA[j * is + i * js] = ar; |
| iA[j * is + i * js] = ai; |
| rA[i * is + j * js] = br; |
| iA[i * is + j * js] = bi; |
| } |
| } |
| } |
| |
| extern int printf(const char *str, ...); |
| |
| fftw_real A[2048]; |
| int main(int argc, char **argv) |
| { |
| int i; |
| |
| fftw_real sum = 0.0; |
| for (i = 0; i < 2048; ++i) { |
| A[i] = i; |
| sum = sum + A[i]; |
| } |
| printf("Checksum before = %lf\n", sum); |
| |
| for (i = 0; i < 10; ++i) { |
| complex_transpose(A, A+1, 32, 2, 64); |
| } |
| |
| sum = 0.0; |
| for (i = 0; i < 2048; ++i) |
| sum = sum + A[i]; |
| printf("Checksum after = %lf\n", sum); |
| |
| return 0; |
| } |
| |