Qt openmpパラレルアクセラレータ使用


最近、あるお客様は大量の株式データを処理し、データベースに移動する必要があります.元のプログラムをデータベースにインポートするには2日かかるので、データ処理を並列化することが重要です.
くだらないことは言わないで、コードテストをします.ツールQt、コンパイラVC 2010またはVc 2013
ステップ1:QtCreatorを使用してコンソールプログラムを作成し、ProファイルにQMAKEを追加CXXFLAGS+=/openmp
ステップ2:テストコードの作成
#include 
#include 

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    

    qint64 iBegin = QDateTime::currentDateTime().toMSecsSinceEpoch();
//#pragma omp parallel for
    for(int i=0; i<10000; i++)
    {
        QString sI = QString::number(i);
        QFile f("D:\\openmp\\"+sI+".txt");
        f.open(QIODevice::WriteOnly);
        f.write(sI.toUtf8());
        f.close();
    }

    qint64 iEnd = QDateTime::currentDateTime().toMSecsSinceEpoch();

    qint64 iLast = iEnd-iBegin;

    double fUse = (double)iLast/1000;

    WL("----Use time:"<
テストは10000個のファイルを書く時間を費やして、openmpを使わない時、私の4コアAMD CPU、CPU占有率は50%未満で、openmpを使う時、CPU占有率は直接100%で、消費時間も半分短縮しました.
速度が飛躍的に増加し、データ処理プログラムに速度を上げることができます.
Openmp parallelループに共有変数に対する操作がある場合は、ロックが必要になるか、付与操作の前に#pragma omp atomicを加えてデータが破損しないようにすることに注意してください.