0

私は xeon-phi を学習しようとしています。Intel Xeon-Phi Coprocessor HPC book を勉強しながら、ここでコードを実行しようとしました。(本より)

コードは openmp と 2 つのスレッドを使用します。

しかし、私が取っている結果は、1 つのスレッドで実行した場合と同じです。(openmp は一切使用しない)

私はマイクのさまざまな組み合わせでも使用しましたが、それでも同じです:

export OMP_NUM_THREADS=2
export MIC_OMP_NUM_THREADS=124
export MIC_ENV_PREFIX=MIC

どういうわけかopenmpが有効になっていないようです?ここで何か不足していますか?

1スレッドのみを使用したコードはこちら

私は以下を使用してコンパイルしました:

icc -mmic -openmp -qopt-report -O3 hello.c

ありがとう!

4

3 に答える 3

0

あなたが使用しているコードのシリアルバージョンを見ていました。次の行の場合:

        for(j=0; j<MAXFLOPS_ITERS; j++)  
        {
        //
        // scale 1st array and add in the 2nd array
        // example usage - y = mx + b;
        //
            for(k=0; k<LOOP_COUNT; k++)  
            {
                fa[k] = a * fa[k] + fb[k];
            }
         }

ここでは、アレイ全体をスキャンしていないことがわかります。代わりに、配列 Fa の最初の 128 (LOOP_COUNT) 要素を更新し続けます。このシリアル バージョンを参照しているパラレル コードと比較したい場合は、プログラムが両方のバージョンで同じ量の作業を行うことを確認する必要があります。

ありがとう

于 2015-03-28T00:14:04.403 に答える