次のコードは、指定された配列内の最小/最大とその位置を検索します。
//Finding the array index//
#include "stdafx.h"
#include <iostream>
#include <iterator>
#include <list>
#include <algorithm>
using namespace std;
int main () {
int A[4] = {0, 2, 1, 1};
const int N = sizeof(A) / sizeof(int);
cout << "Index of max element: "
<< distance(A, max_element(A, A + N))
<< endl;
return 0;
}
このコードを2D配列用に改善し、プリフェッチを利用したい
したがって、私のデータは次のようになります。
A[3][10] = { {3,7,2,9,39,4,9,2,19,20},
{3,7,2,9,33,4,22, 2,19,21},
{3,7,2,36,33,4,9,2,19,22}
};
実際の場合、データははるかに多くなります。ここでプリフェッチする利点は本当にありますか?もしそうなら、私はこれについてどうやって行くのですか?また、Aのデータをプリフェッチするようにコンパイラに指示できるコンパイラ指令はありますか?
編集:
2D配列全体の最大値と、対応するインデックスが必要です。x86、Intel i3、Windows7で実行されます。
ご覧のとおり、このコードでは、最初に最大値を見つけ、次に最大値の場所を見つけています。この2ステップのプロセスを1つに単純化して、プロセスを高速化する方法はありますか?
更新: このコードを変更して、最初に最大値を見つけてからインデックスを見つけた以前とは異なり、データを1つのステップで処理するようにしました。問題は、パフォーマンスを向上させるためにプリフェッチをどのように使用するかです。