###質問内容
行列の回転(転置させてあと,行の順序の反転)をなるべく効率よく行いたいと考えているのですが,愚直な方法しか思い浮かびません,効率化の方法としてはどのようなものが考えられますでしょうか.
二回転置していて,一回目のほうはCPUとキャッシュを温めるために行っています.
現状のコードは次のようになっています.
C
1#include<stdio.h> 2#include <stdlib.h> 3#include <time.h> 4#include "clock.h" 5#define N 64 6#define data_t double 7 8 9 int src[N][N], dst[N][N]; 10 11void naive_rotate(int n, int src[n][n], int dst[n][n]) 12{ 13 int i, j; 14 for (i = 0; i < n; i++) 15 for (j = 0; j < n; j++) 16 dst[n-1-j][i] = src[i][j]; 17 return; 18} 19 20 21int main(void){ 22 double t; 23 srand((unsigned int)time(NULL)); 24 25 for(int i = 0; i < N; i++){ 26 for(int j = 0; j < N; j++){ 27 src[i][j] = rand() % 10; 28 //printf("%d ",src[i][j]); 29 } 30 //printf("\n"); 31 } 32 33 naive_rotate(N, src, dst); 34 35 start_counter(); 36 naive_rotate(N, src, dst); 37 t = get_counter(); 38 printf("%7.4f\n", t); 39 40 41 return 0; 42 43}
回答3件
あなたの回答
tips
プレビュー