Qt openmpパラレルアクセラレータ使用
1191 ワード
最近、あるお客様は大量の株式データを処理し、データベースに移動する必要があります.元のプログラムをデータベースにインポートするには2日かかるので、データ処理を並列化することが重要です.
くだらないことは言わないで、コードテストをします.ツールQt、コンパイラVC 2010またはVc 2013
ステップ1:QtCreatorを使用してコンソールプログラムを作成し、ProファイルにQMAKEを追加CXXFLAGS+=/openmp
ステップ2:テストコードの作成
速度が飛躍的に増加し、データ処理プログラムに速度を上げることができます.
Openmp parallelループに共有変数に対する操作がある場合は、ロックが必要になるか、付与操作の前に#pragma omp atomicを加えてデータが破損しないようにすることに注意してください.
くだらないことは言わないで、コードテストをします.ツール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を加えてデータが破損しないようにすることに注意してください.