diff --git a/benchmark/python/benchmarks/kernels_benchmark.py b/benchmark/python/benchmarks/kernels_benchmark.py
index 3ad9cce..4dee945 100644
--- a/benchmark/python/benchmarks/kernels_benchmark.py
+++ b/benchmark/python/benchmarks/kernels_benchmark.py
@@ -1,6 +1,7 @@
 import torch
 import argparse
 import numpy as np
+from mpact.models.kernels import *
 from mpact_benchmark.utils.benchmark_utils import benchmark, Backends
 
 
@@ -23,15 +24,7 @@
 )
 def matmul() -> torch.nn.Module:
     """Matrix multiplication."""
-
-    class Net(torch.nn.Module):
-        def __init__(self):
-            super().__init__()
-
-        def forward(self, x, y):
-            return torch.matmul(x, y)
-
-    return Net()
+    return MMNet()
 
 
 @benchmark(
@@ -53,15 +46,7 @@
 )
 def matvec() -> torch.nn.Module:
     """Matrix-vector multiplication."""
-
-    class Net(torch.nn.Module):
-        def __init__(self):
-            super().__init__()
-
-        def forward(self, x, y):
-            return torch.mv(x, y)
-
-    return Net()
+    return MVNet()
 
 
 @benchmark(
@@ -85,15 +70,7 @@
 )
 def add() -> torch.nn.Module:
     """Element-wise addition."""
-
-    class Net(torch.nn.Module):
-        def __init__(self):
-            super().__init__()
-
-        def forward(self, x, y):
-            return torch.add(x, y)
-
-    return Net()
+    return AddNet()
 
 
 @benchmark(
@@ -115,15 +92,7 @@
 )
 def elt_mul() -> torch.nn.Module:
     """Element-wise addition."""
-
-    class Net(torch.nn.Module):
-        def __init__(self):
-            super().__init__()
-
-        def forward(self, x, y):
-            return torch.mul(x, y)
-
-    return Net()
+    return MulNet()
 
 
 @benchmark(
@@ -144,15 +113,7 @@
 )
 def nop() -> torch.nn.Module:
     """Returns matrix unmodified (speed of light)."""
-
-    class Net(torch.nn.Module):
-        def __init__(self):
-            super().__init__()
-
-        def forward(self, x):
-            return x
-
-    return Net()
+    return SelfNet()
 
 
 @benchmark(
@@ -175,15 +136,67 @@
 )
 def sddmm() -> torch.nn.Module:
     """SDDMM: C = S ○ (A X B) Sampled dense-dense matrix-matrix multiplication."""
+    return SDDMMNet()
 
-    class Net(torch.nn.Module):
-        def __init__(self):
-            super().__init__()
 
-        def forward(self, x, y, z):
-            return torch.mul(x, torch.matmul(y, z))
+@benchmark(
+    [
+        {
+            "name": f"{fmt}_{shape}_{dtype.__name__}",
+            "shape": shape,
+            "formats": (fmt,),
+            "dtype": dtype,
+            # TODO: add mpact and torch inductor once they work.
+            "backends": [
+                b
+                for b in Backends
+                if b.value
+                in (
+                    Backends.TORCH_SPARSE_EAGER.value,
+                    Backends.TORCH_DENSE_EAGER.value,
+                )
+            ],
+            "drange": (1, 100),
+            "sparsity": [0, 0.5, 0.9, 0.99],
+        }
+        for shape in [([2**i, 2**i],) for i in range(5, 8)]
+        for fmt in ["dense"]
+        for dtype in [np.float64]
+    ]
+)
+def feature_scale() -> torch.nn.Module:
+    """Scales feature matrix in GNN."""
+    return FeatureScale()
 
-    return Net()
+
+@benchmark(
+    [
+        {
+            "name": f"{fmt}_{shape}_{dtype.__name__}",
+            "shape": shape,
+            "formats": (fmt,),
+            "dtype": dtype,
+            # TODO: add mpact and torch inductor once they work.
+            "backends": [
+                b
+                for b in Backends
+                if b.value
+                in (
+                    Backends.TORCH_SPARSE_EAGER.value,
+                    Backends.TORCH_DENSE_EAGER.value,
+                )
+            ],
+            "drange": (1, 100),
+            "sparsity": [0, 0.5, 0.9, 0.99],
+        }
+        for shape in [([2**i, 2**i],) for i in range(5, 8)]
+        for fmt in ["dense"]
+        for dtype in [np.float64]
+    ]
+)
+def normalization() -> torch.nn.Module:
+    """Normalizes adjacency matrix in GNN."""
+    return Normalization()
 
 
 if __name__ == "__main__":
@@ -201,6 +214,8 @@
         "matvec",
         "elt_mul",
         "sddmm",
+        "feature_scale",
+        "normalization",
     ]
     if arguments.benchmark_filter:
         benchmark_list = arguments.benchmark_filter.split(",")
