Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ class ZagryadskovMComplexSpMMCCSTBB : public BaseTask {
private:
inline static void SpMM(const CCS &a, const CCS &b, CCS &c);
inline static void SpMMSymbolic(const CCS &a, const CCS &b, std::vector<int> &col_ptr);
inline static void SpMMNumeric(const CCS &a, const CCS &b, CCS &c, const std::complex<double> &zero, double eps);
inline static void SpMMKernel(const CCS &a, const CCS &b, CCS &c, const std::complex<double> &zero, double eps,
inline static void SpMMNumeric(const CCS &a, const CCS &b, CCS &c, const std::complex<double> &zero);
inline static void SpMMKernel(const CCS &a, const CCS &b, CCS &c, const std::complex<double> &zero,
std::vector<int> &rows, std::vector<std::complex<double>> &acc,
std::vector<int> &marker, int j);
bool ValidationImpl() override;
Expand Down
21 changes: 8 additions & 13 deletions tasks/zagryadskov_m_complex_spmm_ccs/tbb/src/ops_tbb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,8 @@ void ZagryadskovMComplexSpMMCCSTBB::SpMMSymbolic(const CCS &a, const CCS &b, std
}

void ZagryadskovMComplexSpMMCCSTBB::SpMMKernel(const CCS &a, const CCS &b, CCS &c, const std::complex<double> &zero,
double eps, std::vector<int> &rows,
std::vector<std::complex<double>> &acc, std::vector<int> &marker,
int j) {
std::vector<int> &rows, std::vector<std::complex<double>> &acc,
std::vector<int> &marker, int j) {
rows.clear();

int write_ptr = c.col_ptr[j];
Expand All @@ -80,17 +79,14 @@ void ZagryadskovMComplexSpMMCCSTBB::SpMMKernel(const CCS &a, const CCS &b, CCS &
}

for (int r_idx : rows) {
if (std::norm(acc[r_idx]) > eps * eps) {
c.row_ind[write_ptr] = r_idx;
c.values[write_ptr] = acc[r_idx];
++write_ptr;
}
c.row_ind[write_ptr] = r_idx;
c.values[write_ptr] = acc[r_idx];
++write_ptr;
acc[r_idx] = zero;
}
}

void ZagryadskovMComplexSpMMCCSTBB::SpMMNumeric(const CCS &a, const CCS &b, CCS &c, const std::complex<double> &zero,
double eps) {
void ZagryadskovMComplexSpMMCCSTBB::SpMMNumeric(const CCS &a, const CCS &b, CCS &c, const std::complex<double> &zero) {
const int m = a.m;
const int n = b.n;

Expand All @@ -106,7 +102,7 @@ void ZagryadskovMComplexSpMMCCSTBB::SpMMNumeric(const CCS &a, const CCS &b, CCS
std::vector<int> rows;

for (int j = r.begin(); j < r.end(); ++j) {
SpMMKernel(a, b, c, zero, eps, rows, acc, marker, j);
SpMMKernel(a, b, c, zero, rows, acc, marker, j);
}
});
}
Expand All @@ -116,15 +112,14 @@ void ZagryadskovMComplexSpMMCCSTBB::SpMM(const CCS &a, const CCS &b, CCS &c) {
c.n = b.n;

std::complex<double> zero(0.0, 0.0);
const double eps = 1e-14;

SpMMSymbolic(a, b, c.col_ptr);

int nnz = c.col_ptr[b.n];
c.row_ind.resize(nnz);
c.values.resize(nnz);

SpMMNumeric(a, b, c, zero, eps);
SpMMNumeric(a, b, c, zero);
}

bool ZagryadskovMComplexSpMMCCSTBB::ValidationImpl() {
Expand Down
Loading