MUDA
Loading...
Searching...
No Matches
atomic.h
1#pragma once
2#include <muda/atomic.h>
3#include <muda/ext/eigen/eigen_core_cxx20.h>
4
5namespace muda::eigen
6{
7template <typename T, int M, int N>
8MUDA_GENERIC Eigen::Matrix<T, M, N> atomic_add(Eigen::Matrix<T, M, N>& dst,
9 const Eigen::Matrix<T, M, N>& src)
10{
11 Eigen::Matrix<T, M, N> ret;
12
13#pragma unroll
14 for(int j = 0; j < N; ++j)
15#pragma unroll
16 for(int i = 0; i < M; ++i)
17 {
18 ret(i, j) = muda::atomic_add(&dst(i, j), src(i, j));
19 }
20}
21
22template <typename T, int M, int N>
23MUDA_GENERIC Eigen::Matrix<T, M, N> atomic_add(Eigen::Map<Eigen::Matrix<T, M, N>>& dst,
24 const Eigen::Matrix<T, M, N>& src)
25{
26 Eigen::Matrix<T, M, N> ret;
27
28#pragma unroll
29 for(int j = 0; j < N; ++j)
30#pragma unroll
31 for(int i = 0; i < M; ++i)
32 {
33 ret(i, j) = muda::atomic_add(&dst(i, j), src(i, j));
34 }
35}
36} // namespace muda::eigen