diff --git a/build_tools/benchmarks/export_benchmark_config.py b/build_tools/benchmarks/export_benchmark_config.py
index 975f9f3..4fec45d 100755
--- a/build_tools/benchmarks/export_benchmark_config.py
+++ b/build_tools/benchmarks/export_benchmark_config.py
@@ -27,24 +27,64 @@
 import collections
 import dataclasses
 import json
+from typing import Callable, Dict, List
 
 from benchmark_suites.iree import benchmark_collections
+from e2e_test_framework.definitions import common_definitions, iree_definitions
 from e2e_test_framework import serialization
 from e2e_test_artifacts import iree_artifacts
 
+PresetMatcher = Callable[[iree_definitions.E2EModelRunConfig], bool]
+BENCHMARK_PRESET_MATCHERS: Dict[str, PresetMatcher] = {
+    "x86_64":
+        lambda config: config.target_device_spec.architecture.architecture ==
+        "x86_64",
+    "cuda":
+        lambda config: config.target_device_spec.architecture.architecture ==
+        "cuda",
+    "android-cpu":
+        lambda config:
+        (config.target_device_spec.architecture.type == common_definitions.
+         ArchitectureType.CPU and config.target_device_spec.host_environment.
+         platform == "android"),
+    "android-gpu":
+        lambda config:
+        (config.target_device_spec.architecture.type == common_definitions.
+         ArchitectureType.GPU and config.target_device_spec.host_environment.
+         platform == "android"),
+}
+
 
 def parse_arguments():
   """Parses command-line options."""
 
+  def parse_and_strip_list_argument(arg) -> List[str]:
+    return [part.strip() for part in arg.split(",")]
+
+  def parse_benchmark_presets(arg) -> List[PresetMatcher]:
+    matchers = []
+    for preset in parse_and_strip_list_argument(arg):
+      matcher = BENCHMARK_PRESET_MATCHERS.get(preset)
+      if matcher is None:
+        raise argparse.ArgumentTypeError(
+            f"Unrecognized benchmark preset: '{preset}'.")
+      matchers.append(matcher)
+    return matchers
+
   parser = argparse.ArgumentParser(
-      description="Exports JSON config for benchmarking.")
+      description="Exports JSON config for benchmarking. Filters can be "
+      "specified jointly to select a subset of benchmarks.")
   parser.add_argument(
-      "--target_device_name",
-      type=str,
-      action="append",
-      dest="target_device_names",
-      help=("Target device name, can be specified multiple times. "
-            "Not specified means including all devices."))
+      "--target_device_names",
+      type=parse_and_strip_list_argument,
+      help=("Target device names, separated by comma, not specified means "
+            "including all devices."))
+  parser.add_argument(
+      "--benchmark_presets",
+      type=parse_benchmark_presets,
+      help=("Presets that select a bundle of benchmarks, separated by comma, "
+            "multiple presets will be union. Available options: "
+            f"{','.join(BENCHMARK_PRESET_MATCHERS.keys())}"))
   parser.add_argument("--output",
                       type=pathlib.Path,
                       help="Path to write the JSON output.")
@@ -57,11 +97,18 @@
 
   target_device_names = (set(args.target_device_names)
                          if args.target_device_names is not None else None)
+  preset_matchers = args.benchmark_presets
+
   grouped_run_config_map = collections.defaultdict(list)
   for run_config in all_run_configs:
     device_name = run_config.target_device_spec.device_name
-    if target_device_names is None or device_name in target_device_names:
-      grouped_run_config_map[device_name].append(run_config)
+    if (target_device_names is not None and
+        device_name not in target_device_names):
+      continue
+    if (preset_matchers is not None and
+        not any(matcher(run_config) for matcher in preset_matchers)):
+      continue
+    grouped_run_config_map[device_name].append(run_config)
 
   output_map = {}
   for device_name, run_configs in grouped_run_config_map.items():
