使用OpenMP进行稀疏(COO格式)矩阵向量乘法

时间:2015-03-03 05:40:23

标签: c openmp matrix-multiplication sparse-matrix

以下是以COO格式提供的稀疏矩阵的矩阵向量乘法的代码

for (int i=0; i<n; ++i)
    y[i] = 0.0;
for (int i=0; i<nnz; ++i)
    y[row[i]] += val[i]*x[col[i]];

表示由rowcolval数组给出的稀疏矩阵,每个数组大小为nnz,矩阵中非零值的数量。当我将乘法与openmp并行化时,我正在执行以下操作

#pragma omp parallel for default(shared)
for (int i=0; i<nnz; ++i)
#pragma omp atomic
    y[row[i]] += val[i]*x[col[i]];

我正在使用原子构造,因为我不知道存储行和列值的顺序。因此,当y减少时,我应该避免出现“竞争”条件的可能性。使用此代码,我可以在16个处理器(大约2.0倍)上获得微弱的加速。我有什么选择来执行这样的矩阵向量乘法与给定的COO稀疏矩阵,它提供了不错的加速?我可以避免使用原子构造吗?

谢谢

0 个答案:

没有答案