使用OpenMpi矩阵向量乘法运算进行并行化

时间:2019-04-27 08:42:07

标签: c visual-studio openmpi

我写了一个简单的矩阵向量乘法运算。 在这段代码中,矩阵是矩阵的集合,向量是向量的集合,可以通过i * matrixSize或i * vectorSize的偏移量进行访问。 现在,我想通过以下方法使用OpenMpi并行执行此任务: 将所有输入矩阵和向量的数量平均分配到各个过程之间,并在每个过程中分别相乘,最后将结果收集为相似的均匀结果。我的C语言不太好。 我不完全了解我的结构的情况,其中矩阵和向量的集合由单个无符号char *指针表示。 如何并行执行此操作?

我将openmpi连接到我的项目,并在手册上做了一些测试任务,但是我不知道如何用这样的结构来完成任务。也许还有其他方法可以破坏数据?

unsigned int* multiplyMatrixColumn(unsigned char* matrix, unsigned char* vector, int partition) {

    int i, m, n;
    int rank, size;
    unsigned char rmatrixbuf[2500], rvectorbuf[2500];
    int * result = malloc(partition * rows * sizeof(int));
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    // What is the correct way to break the data?
    //MPI_Scatter(matrix, 2500, MPI_UNSIGNED_CHAR, rmatrixbuf, 2500, MPI_UNSIGNED_CHAR, 0, MPI_COMM_WORLD);
    //MPI_Scatter(vector, 2500, MPI_UNSIGNED_CHAR, rvectorbuf, 2500, MPI_UNSIGNED_CHAR, 0, MPI_COMM_WORLD);
    for (i = 0; i < partition; i++)
    {
        for (m = 0; m < rows; m++) {
            result[(i % buffered) * rows + m] = 0;
            for (n = 0; n < columns; n++)
                result[(i % buffered) * rows + m] += matrix[(i % buffered) * rows * columns + m * columns + n]
                * vector[(i % buffered) * columns + n];
        }
    }
    //MPI_Gather(I can not understand how to aggregate data);

    return result;
}

我想获得与pragma openMP(并行于pragma openmp)的行为,其中for循环被拆分为多个进程并针对每个乘法运算并行执行。

0 个答案:

没有答案