質問

私は少しのコードに取り組んでおり、基本的には一定の時間制限内で実行できるように、それを可能な限り最適化しようとしています。

以下は電話をかけます...

static affinity_partitioner ap;
parallel_for(blocked_range<size_t>(0, T), LoopBody(score), ap);

...そして以下が実行されるものです。

void operator()(const blocked_range<size_t> &r) const {

    int temp;
    int i;
    int j;
    size_t k;
    size_t begin = r.begin();
    size_t end = r.end();

    for(k = begin; k != end; ++k) { // for each trainee
        temp = 0;
        for(i = 0; i < N; ++i) { // for each sample
            int trr = trRating[k][i];
            int ei = E[i];              
            for(j = 0; j < ei; ++j) { // for each expert
                temp += delta(i, trr, exRating[j][i]);
            }
        }           
        myscore[k] = temp;
    }
}

これを最適化するために Intel の TBB を使用しています。しかし、私は SIMD や SSE2 など、その性質に沿ったものについても読んでいます。そこで私の質問は、変数 (i,j,k) をレジスタに格納して、CPU からより速くアクセスできるようにするにはどうすればよいでしょうか?答えは SSE2 またはそのバリエーションの実装に関係していると思いますが、その方法がわかりません。何か案は?

編集:これは Linux ボックス上で実行されますが、Intel のコンパイラを使用すると思います。それが役立つ場合は、コンパイラが動作することを確認するために、何かをする前に次のコマンドを実行する必要があります...ソース/opt/intel/Compiler/11.1/064/bin/intel64/iccvars_intel64.csh;ソース /opt/intel/tbb/2.2/bin/intel64/tbbvars.csh ...そしてコンパイルするには次のようにします。icc -ltbb テスト.cxx -o テスト

SSE2 を実装する簡単な方法がない場合、コードをさらに最適化する方法についてアドバイスはありますか?

ありがとう、フリスト

役に立ちましたか?

解決

あなたの質問は、何が起こっているのかについての混乱を表しています。 i、j、k変数は、最適化(これを行う必要がある - ICCの呼び出しに「-o2」を追加する必要がある)をコンパイルしていると仮定して、ほぼ確実にレジスタに保持されています。

使用できます asm ブロックですが、既にICCを使用していることを考慮した簡単な方法は、SSE内在性を使用することです。 Intelの彼らのためのドキュメントはここにあります - http://www.intel.com/software/products/compilers/clin/docs/ug_cpp/comm1019.htm

トップレベルのループをsimd-izeすることができるように見えますが、それはあなたのものに大きく依存する予定です delta 関数はです。

他のヒント

C ++モジュール内でアセンブリ言語を使用する場合は、 asm ブロックし、ブロックの外側から変数名を使用し続けます。内部で使用するアセンブリの指示 asm ブロックは、どのレジスタなどが操作されているかを指定しますが、プラットフォームによって異なります。

GCC を使用している場合は、次を参照してください。 http://gcc.gnu.org/projects/tree-ssa/vectorization.html コンパイラーによるコードの自動ベクトル化を支援する方法と例については、

それ以外の場合は、使用しているプラ​​ットフォームをお知らせいただく必要があります。

コンパイラはあなたのためにこれを行うべきです。たとえば、VC ++では、SSE2をオンにするだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top