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
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,11 @@ python -m pip install dace
```
However, you may want to install the latest version from the [GitHub repository](https://github.com/spcl/dace).
To run NPBench with DaCe, you have to select as framework (see details below)
either `dace_cpu` or `dace_gpu`.
either `dace_cpu` or `dace_gpu` (which build the SDFG and `auto_optimize` it), or
`dace_canonicalize_cpu` / `dace_canonicalize_gpu` (which instead run DaCe's
`canonicalize` pipeline, leaving `sdfg.openmp_array_reductions` on so whole-buffer
WCR accumulators lower to OpenMP array-section reductions rather than per-element
atomics).

### DPNP

Expand Down
10 changes: 10 additions & 0 deletions framework_info/dace_canonicalize_cpu.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"framework": {
"simple_name": "dace_canonicalize_cpu",
"full_name": "DaCe Canonicalize CPU",
"prefix": "dc",
"postfix": "dace",
"class": "DaceCanonicalizeFramework",
"arch": "cpu"
}
}
10 changes: 10 additions & 0 deletions framework_info/dace_canonicalize_gpu.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"framework": {
"simple_name": "dace_canonicalize_gpu",
"full_name": "DaCe Canonicalize GPU",
"prefix": "dc",
"postfix": "dace",
"class": "DaceCanonicalizeFramework",
"arch": "gpu"
}
}
Binary file added npbench.db
Binary file not shown.
6 changes: 3 additions & 3 deletions npbench/benchmarks/cavity_flow/cavity_flow_cupy.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def build_up_b(b, rho, dt, u, v, dx, dy):


def pressure_poisson(nit, p, dx, dy, b):
pn = np.empty_like(p)
pn = np.zeros_like(p)
pn = p.copy()

for q in range(nit):
Expand All @@ -39,8 +39,8 @@ def pressure_poisson(nit, p, dx, dy, b):


def cavity_flow(nx, ny, nt, nit, u, v, dt, dx, dy, p, rho, nu):
un = np.empty_like(u)
vn = np.empty_like(v)
un = np.zeros_like(u)
vn = np.zeros_like(v)
b = np.zeros((ny, nx))

for n in range(nt):
Expand Down
6 changes: 3 additions & 3 deletions npbench/benchmarks/cavity_flow/cavity_flow_dace.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def build_up_b(b: dc.float64[ny, nx], rho: dc.float64, dt: dc.float64,
@dc.program
def pressure_poisson(p: dc.float64[ny, nx], dx: dc.float64, dy: dc.float64,
b: dc.float64[ny, nx]):
pn = np.empty_like(p)
pn = np.zeros_like(p)
pn[:] = p.copy()

for q in range(nit):
Expand All @@ -51,8 +51,8 @@ def cavity_flow(nt: dc.int64, nit: dc.int64, u: dc.float64[ny, nx],
v: dc.float64[ny, nx], dt: dc.float64, dx: dc.float64,
dy: dc.float64, p: dc.float64[ny, nx], rho: dc.float64,
nu: dc.float64):
un = np.empty_like(u)
vn = np.empty_like(v)
un = np.zeros_like(u)
vn = np.zeros_like(v)
b = np.zeros((ny, nx))

for n in range(nt):
Expand Down
148 changes: 74 additions & 74 deletions npbench/benchmarks/cavity_flow/cavity_flow_dpnp.py
Original file line number Diff line number Diff line change
@@ -1,74 +1,74 @@
import dpnp as np
def build_up_b(b, rho, dt, u, v, dx, dy):
b[1:-1, 1:-1] = (
rho * (
(1 / dt * ((u[1:-1, 2:] - u[1:-1, 0:-2]) / (2 * dx) +
(v[2:, 1:-1] - v[0:-2, 1:-1]) / (2 * dy))) -
((u[1:-1, 2:] - u[1:-1, 0:-2]) / (2 * dx))**2 -
2 * ((u[2:, 1:-1] - u[0:-2, 1:-1]) / (2 * dy) *
(v[1:-1, 2:] - v[1:-1, 0:-2]) / (2 * dx)) -
((v[2:, 1:-1] - v[0:-2, 1:-1]) / (2 * dy))**2
)
)
def pressure_poisson(nit, p, dx, dy, b):
pn = np.empty_like(p)
for q in range(nit):
pn[:] = p.copy()
p[1:-1, 1:-1] = (
((pn[1:-1, 2:] + pn[1:-1, 0:-2]) * dy**2 +
(pn[2:, 1:-1] + pn[0:-2, 1:-1]) * dx**2) /
(2 * (dx**2 + dy**2)) - dx**2 * dy**2 /
(2 * (dx**2 + dy**2)) * b[1:-1, 1:-1]
)
p[:, -1] = p[:, -2] # dp/dx = 0 at x = 2
p[0, :] = p[1, :] # dp/dy = 0 at y = 0
p[:, 0] = p[:, 1] # dp/dx = 0 at x = 0
p[-1, :] = 0 # p = 0 at y = 2
def cavity_flow(nx, ny, nt, nit, u, v, dt, dx, dy, p, rho, nu):
un = np.empty_like(u)
vn = np.empty_like(v)
b = np.zeros((ny, nx))
for n in range(nt):
un[:] = u.copy()
vn[:] = v.copy()
build_up_b(b, rho, dt, u, v, dx, dy)
pressure_poisson(nit, p, dx, dy, b)
u[1:-1, 1:-1] = (
un[1:-1, 1:-1] - un[1:-1, 1:-1] * dt / dx *
(un[1:-1, 1:-1] - un[1:-1, 0:-2]) -
vn[1:-1, 1:-1] * dt / dy *
(un[1:-1, 1:-1] - un[0:-2, 1:-1]) - dt / (2 * rho * dx) *
(p[1:-1, 2:] - p[1:-1, 0:-2]) + nu *
(dt / dx**2 *
(un[1:-1, 2:] - 2 * un[1:-1, 1:-1] + un[1:-1, 0:-2]) +
dt / dy**2 *
(un[2:, 1:-1] - 2 * un[1:-1, 1:-1] + un[0:-2, 1:-1]))
)
v[1:-1, 1:-1] = (
vn[1:-1, 1:-1] - un[1:-1, 1:-1] * dt / dx *
(vn[1:-1, 1:-1] - vn[1:-1, 0:-2]) -
vn[1:-1, 1:-1] * dt / dy *
(vn[1:-1, 1:-1] - vn[0:-2, 1:-1]) - dt / (2 * rho * dy) *
(p[2:, 1:-1] - p[0:-2, 1:-1]) + nu *
(dt / dx**2 *
(vn[1:-1, 2:] - 2 * vn[1:-1, 1:-1] + vn[1:-1, 0:-2]) +
dt / dy**2 *
(vn[2:, 1:-1] - 2 * vn[1:-1, 1:-1] + vn[0:-2, 1:-1]))
)
u[0, :] = 0
u[:, 0] = 0
u[:, -1] = 0
u[-1, :] = 1 # set velocity on cavity lid equal to 1
v[0, :] = 0
v[-1, :] = 0
v[:, 0] = 0
v[:, -1] = 0
import dpnp as np

def build_up_b(b, rho, dt, u, v, dx, dy):
b[1:-1, 1:-1] = (
rho * (
(1 / dt * ((u[1:-1, 2:] - u[1:-1, 0:-2]) / (2 * dx) +
(v[2:, 1:-1] - v[0:-2, 1:-1]) / (2 * dy))) -
((u[1:-1, 2:] - u[1:-1, 0:-2]) / (2 * dx))**2 -
2 * ((u[2:, 1:-1] - u[0:-2, 1:-1]) / (2 * dy) *
(v[1:-1, 2:] - v[1:-1, 0:-2]) / (2 * dx)) -
((v[2:, 1:-1] - v[0:-2, 1:-1]) / (2 * dy))**2
)
)

def pressure_poisson(nit, p, dx, dy, b):
pn = np.zeros_like(p)
for q in range(nit):
pn[:] = p.copy()
p[1:-1, 1:-1] = (
((pn[1:-1, 2:] + pn[1:-1, 0:-2]) * dy**2 +
(pn[2:, 1:-1] + pn[0:-2, 1:-1]) * dx**2) /
(2 * (dx**2 + dy**2)) - dx**2 * dy**2 /
(2 * (dx**2 + dy**2)) * b[1:-1, 1:-1]
)

p[:, -1] = p[:, -2] # dp/dx = 0 at x = 2
p[0, :] = p[1, :] # dp/dy = 0 at y = 0
p[:, 0] = p[:, 1] # dp/dx = 0 at x = 0
p[-1, :] = 0 # p = 0 at y = 2

def cavity_flow(nx, ny, nt, nit, u, v, dt, dx, dy, p, rho, nu):
un = np.zeros_like(u)
vn = np.zeros_like(v)
b = np.zeros((ny, nx))

for n in range(nt):
un[:] = u.copy()
vn[:] = v.copy()

build_up_b(b, rho, dt, u, v, dx, dy)
pressure_poisson(nit, p, dx, dy, b)

u[1:-1, 1:-1] = (
un[1:-1, 1:-1] - un[1:-1, 1:-1] * dt / dx *
(un[1:-1, 1:-1] - un[1:-1, 0:-2]) -
vn[1:-1, 1:-1] * dt / dy *
(un[1:-1, 1:-1] - un[0:-2, 1:-1]) - dt / (2 * rho * dx) *
(p[1:-1, 2:] - p[1:-1, 0:-2]) + nu *
(dt / dx**2 *
(un[1:-1, 2:] - 2 * un[1:-1, 1:-1] + un[1:-1, 0:-2]) +
dt / dy**2 *
(un[2:, 1:-1] - 2 * un[1:-1, 1:-1] + un[0:-2, 1:-1]))
)

v[1:-1, 1:-1] = (
vn[1:-1, 1:-1] - un[1:-1, 1:-1] * dt / dx *
(vn[1:-1, 1:-1] - vn[1:-1, 0:-2]) -
vn[1:-1, 1:-1] * dt / dy *
(vn[1:-1, 1:-1] - vn[0:-2, 1:-1]) - dt / (2 * rho * dy) *
(p[2:, 1:-1] - p[0:-2, 1:-1]) + nu *
(dt / dx**2 *
(vn[1:-1, 2:] - 2 * vn[1:-1, 1:-1] + vn[1:-1, 0:-2]) +
dt / dy**2 *
(vn[2:, 1:-1] - 2 * vn[1:-1, 1:-1] + vn[0:-2, 1:-1]))
)

u[0, :] = 0
u[:, 0] = 0
u[:, -1] = 0
u[-1, :] = 1 # set velocity on cavity lid equal to 1
v[0, :] = 0
v[-1, :] = 0
v[:, 0] = 0
v[:, -1] = 0
6 changes: 3 additions & 3 deletions npbench/benchmarks/cavity_flow/cavity_flow_legate.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def build_up_b(b, rho, dt, u, v, dx, dy):


def pressure_poisson(nit, p, dx, dy, b):
pn = np.empty_like(p)
pn = np.zeros_like(p)
pn = p.copy()

for q in range(nit):
Expand All @@ -39,8 +39,8 @@ def pressure_poisson(nit, p, dx, dy, b):


def cavity_flow(nx, ny, nt, nit, u, v, dt, dx, dy, p, rho, nu):
un = np.empty_like(u)
vn = np.empty_like(v)
un = np.zeros_like(u)
vn = np.zeros_like(v)
b = np.zeros((ny, nx))

for n in range(nt):
Expand Down
6 changes: 3 additions & 3 deletions npbench/benchmarks/cavity_flow/cavity_flow_numba_n.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def build_up_b(b, rho, dt, u, v, dx, dy):

@nb.jit(nopython=True, parallel=False, fastmath=True)
def pressure_poisson(nit, p, dx, dy, b):
pn = np.empty_like(p)
pn = np.zeros_like(p)
pn = p.copy()

for q in range(nit):
Expand All @@ -34,8 +34,8 @@ def pressure_poisson(nit, p, dx, dy, b):

@nb.jit(nopython=True, parallel=False, fastmath=True)
def cavity_flow(nx, ny, nt, nit, u, v, dt, dx, dy, p, rho, nu):
un = np.empty_like(u)
vn = np.empty_like(v)
un = np.zeros_like(u)
vn = np.zeros_like(v)
b = np.zeros((ny, nx))

for n in range(nt):
Expand Down
8 changes: 4 additions & 4 deletions npbench/benchmarks/cavity_flow/cavity_flow_numba_np.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def build_up_b(b, rho, dt, u, v, dx, dy):

@nb.jit(nopython=True, parallel=True, fastmath=True)
def pressure_poisson(nit, p, dx, dy, b):
pn = np.empty_like(p)
pn = np.zeros_like(p)
pn = p.copy()

for q in range(nit):
Expand All @@ -33,9 +33,9 @@ def pressure_poisson(nit, p, dx, dy, b):


@nb.jit(nopython=True, parallel=True, fastmath=True)
def nopython_mode(nx, ny, nt, nit, u, v, dt, dx, dy, p, rho, nu):
un = np.empty_like(u)
vn = np.empty_like(v)
def cavity_flow(nx, ny, nt, nit, u, v, dt, dx, dy, p, rho, nu):
un = np.zeros_like(u)
vn = np.zeros_like(v)
b = np.zeros((ny, nx))

for n in range(nt):
Expand Down
6 changes: 3 additions & 3 deletions npbench/benchmarks/cavity_flow/cavity_flow_numpy.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def build_up_b(b, rho, dt, u, v, dx, dy):


def pressure_poisson(nit, p, dx, dy, b):
pn = np.empty_like(p)
pn = np.zeros_like(p)
pn = p.copy()

for q in range(nit):
Expand All @@ -39,8 +39,8 @@ def pressure_poisson(nit, p, dx, dy, b):


def cavity_flow(nx, ny, nt, nit, u, v, dt, dx, dy, p, rho, nu):
un = np.empty_like(u)
vn = np.empty_like(v)
un = np.zeros_like(u)
vn = np.zeros_like(v)
b = np.zeros((ny, nx))

for n in range(nt):
Expand Down
6 changes: 3 additions & 3 deletions npbench/benchmarks/cavity_flow/cavity_flow_pythran.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def build_up_b(b, rho, dt, u, v, dx, dy):
# pythran export pressure_poisson(int64, float64[:,:], float64, float64,
# float64[:,:])
def pressure_poisson(nit, p, dx, dy, b):
pn = np.empty_like(p)
pn = np.zeros_like(p)
pn = p.copy()

for q in range(nit):
Expand All @@ -46,8 +46,8 @@ def pressure_poisson(nit, p, dx, dy, b):
# float64[:,:], float64, float64, float64,
# float64[:,:], float64, float64)
def cavity_flow(nx, ny, nt, nit, u, v, dt, dx, dy, p, rho, nu):
un = np.empty_like(u)
vn = np.empty_like(v)
un = np.zeros_like(u)
vn = np.zeros_like(v)
b = np.zeros((ny, nx))

for n in range(nt):
Expand Down
2 changes: 1 addition & 1 deletion npbench/benchmarks/channel_flow/channel_flow_cupy.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def build_up_b(rho, dt, dx, dy, u, v):


def pressure_poisson_periodic(nit, p, dx, dy, b):
pn = np.empty_like(p)
pn = np.zeros_like(p)

for q in range(nit):
pn = p.copy()
Expand Down
2 changes: 1 addition & 1 deletion npbench/benchmarks/channel_flow/channel_flow_dace.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def build_up_b(rho: dc.float64, dt: dc.float64, dx: dc.float64, dy: dc.float64,
@dc.program
def pressure_poisson_periodic(p: dc.float64[ny, nx], dx: dc.float64,
dy: dc.float64, b: dc.float64[ny, nx]):
pn = np.empty_like(p)
pn = np.zeros_like(p)

for q in range(nit):
pn[:] = p.copy()
Expand Down
Loading
Loading