使用Qt框架并行进行矩阵加法 [英] Using Qt framework for doing matrix addition in parallel

查看:156
本文介绍了使用Qt框架并行进行矩阵加法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#include <vector>
#include <QList>
#include <QMap>
#include <QTextStream>
#include <QString>
#include <QStringList>
#include <QDir>
#include <QTime>
#include <QApplication>
#include <QDebug>
#include <QVector>

#include <qtconcurrentmap.h>

using namespace std;

using namespace QtConcurrent;

typedef QPair<int, QVector<int> > FileEntry;

QVector<int> mapping(FileEntry & entry, QVector< QVector<int> > mat)
{
    int index = entry.first;

    QVector<int> row1 = entry.second;

    QVector<int> row2 = mat.at(index);

    QVector<int> row;

    for(int i = 0; i != row1.size(); ++i)
    {
        row.append( row1.at(i) + row2.at(i));
    }



    return row;
}

void reduce(QVector< QVector<int> > & reduceResult, QVector<int> part )
{

    reduceResult.append(part);


}




int main()
{
    vector< vector<int> > vec;
    vector<int> temp;

    for(int i = 0; i != 9; ++i )
    {

        for(int i = 0; i != 9; ++i)
        {

            temp.push_back(i);
        }
        vec.push_back(temp);
    }

    vector< vector<int> >::iterator r;
    vector<int>::iterator c;


    QVector< QVector<int> > qmat;

    for (r = vec.begin(); r != vec.end(); r++)
    {
            QVector<int> qtemp;


            for (c = r->begin(); c != r->end(); c++)
            {
                qtemp.append(*c);


            }
            qmat.append(qtemp);



    }



    QList<FileEntry> fileEntries;
    fileEntries.reserve(9);
    int i = 0;


    QVectorIterator< QVector<int> > in(qmat);
    while (in.hasNext())
    {
        fileEntries << qMakePair(++i, in);
    }

    QVector< QVector <int> > final;

    final = mappedReduced(fileEntries, mapping, reduce, SequentialReduce);






}





我试图使用Qt框架,更具体地说是他们的MapReduce实现;但是,我真的不明白如何使用它。我试图用它添加矩阵,但我认为reduce函数有问题。我不认为它接受列表以外的任何东西,我错了吗?你能告诉我可能是什么问题吗?我已经把头发拉了一会儿。





I am trying to use the Qt framework, more specifically their MapReduce implementation; however, I don't really understand how to use it. I was trying to do matrix addition with it, but I think there's something wrong with the reduce function. I don't think it accepts anything other than lists, am I wrong? Can you tell me what the problem might be? I've been pulling my hair out for a while.

<pre lang="c++">#include <vector>
#include <iostream>
#include <QList>
#include <QMap>
#include <QTextStream>
#include <QString>
#include <QStringList>
#include <QDir>
#include <QTime>
#include <QApplication>
#include <QDebug>
#include <QVector>

#include <qtconcurrentmap.h>

using namespace std;

using namespace QtConcurrent;

//typedef QPair<int, QVector<int> > FileEntry;

void printQVec(QVector< QVector< int> > vec)
{
    for(int i = 0; i < vec.size(); ++i)
    {
        for(int j = 0; j < (vec.at(i)).size(); ++j)
        {
            cout << ((vec.at(i)).at(j)) << endl;
        }
    }
}

QVector<int> mapping(const QVector <int> vec)
{
    //int index = entry.first;

    //QVector<int> row1 = entry.second;

    //QVector<int> row2 = mat.at(index);

    QVector<int> row;

    for(int i = 0; i != vec.size(); ++i)
    {
        row.append( vec.at(i) + vec.at(i));

        cout << row.at(i) << endl;
    }



    return row;
}

void reduce(QVector< QVector<int> > & reduceResult, const QVector<int> part )
{

    //reduceResult.append(part);

    reduceResult += part;

    cout << "running reduce" << endl;


}




int main()
{
    vector< vector<int> > vec;
    vector<int> temp;

    for(int i = 0; i != 9; ++i )
    {

        for(int i = 0; i != 9; ++i)
        {

            temp.push_back(i);
        }
        vec.push_back(temp);
    }

    vector< vector<int> >::iterator r;
    vector<int>::iterator c;


    QVector< QVector<int> > qmat;

    for (r = vec.begin(); r != vec.end(); r++)
    {
            QVector<int> qtemp;


            for (c = r->begin(); c != r->end(); c++)
            {
                qtemp.append(*c);


            }
            qmat.append(qtemp);



    }

    printQVec(qmat);



    /*



    QList<FileEntry> fileEntries;
    fileEntries.reserve(9);
    int i = 0;


    QVectorIterator< QVector<int> > in(qmat);
    while (in.hasNext())
    {
        fileEntries << qMakePair(++i, in);
    }
    */

    QVector< QVector <int> > final;


    final = mappedReduced(qmat, mapping, reduce, SequentialReduce);










}





我修改了一下代码,但它仍然不起作用。我不能在最后生成一个矩阵。



I tinkered the code a bit, but it still doesn't work. I can't produce a matrix at the end.

推荐答案

这篇关于使用Qt框架并行进行矩阵加法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆