inducer / inducer/loopy

Loopy is slow in make_kernel, preprocess_kernel and codegen

Open
#247 5 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
636
Forks
81
Avg merge
1d 19h
Merged PRs (30d)
7

Description

Thanks to @kaushikcfd, scheduling is now super fast compared to other parts of loopy. Still, `make_kernel, preprocess_kernel, codegen` take so much time that some sumpy kernels are unusable.

Here's a small example with https://github.com/isuruf/sumpy/tree/derivtaker

```python
import numpy as np
import sys
import loopy as lp

import pyopencl as cl

from sumpy.expansion.multipole import LaplaceConformingVolumeTaylorMultipoleExpansion
from sumpy.expansion.local import LaplaceConformingVolumeTaylorLocalExpansion
from sumpy.kernel import LaplaceKernel
import sumpy.symbolic as sym

import logging

logger = logging.getLogger(__name__)

try:
import faulthandler
except ImportError:
pass
else:
faulthandler.enable()

knl = LaplaceKernel(3)
local_expn_class = LaplaceConformingVolumeTaylorLocalExpansion
mpole_expn_class = LaplaceConformingVolumeTaylorMultipoleExpansion
order = 12
ctx_factory = cl._csc

logging.basicConfig(level=logging.INFO)

from sympy.core.cache import clear_cache

clear_cache()

ctx = ctx_factory()
queue = cl.CommandQueue(ctx, properties=cl.command_queue_properties.PROFILING_ENABLE)

np.random.seed(17)

target_kernels = [knl]

m_expn = mpole_expn_class(knl, order=order)
l_expn = local_expn_class(knl, order=order)

from sumpy import P2EFromSingleBox, E2PFromSingleBox, P2P, E2EFromCSR

m2l = E2EFromCSR(ctx, m_expn, l_expn)

loopy_knl = m2l.get_optimized_kernel()
loopy_knl = lp.add_and_infer_dtypes(
loopy_knl,
dict(
tgt_ibox=np.int32,
centers=np.float64,
tgt_center=np.float64,
target_boxes=np.int32,
src_ibox=np.int32,
src_expansions=np.float64,
tgt_rscale=np.float64,
src_rscale=np.float64,
src_box_starts=np.int32,
src_box_lists=np.int32,
),
)
lp.generate_code_v2(loopy_knl)
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.