Skip to content
KernelIndex
Search⌘K

submission 673544

Elán Zainos Corona · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

No package. Vendor the mirrored source: 40 lines, June 9 Researcher Reciprocity License v1.0.

M_Order1.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-sort-v2-673544?include=source"
interfacepython
Compatibility
measured onNVIDIA B200
declared hardwareNVIDIA B200
architecturessm_100
dtypesfp32

Benchmark evidence

1 measurement across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
Sortsuite of 5 cases
NVIDIA B200
5.48ms
#16 of 23
2026-03-30

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:430ae019f3c32830e6b919e1a22eac8a3a28793b2caea9c3c64c43596e004c3d
license declaredunknown
license concludedunknown
authorsElán Zainos Corona
imported2026-08-15

Kernel source

M_Order1.py40 lines
# -*- coding: utf-8 -*-
import os
import torch

# 1. ESTABILIZACIÓN DE LA WORLD LINE (Fuera del hot-path)
# Seteamos el determinismo globalmente al cargar el módulo para ahorrar microsegundos
os.environ["CUBLAS_WORKSPACE_CONFIG"] = ":4096:8"
torch.use_deterministic_algorithms(True)

# 2. CACHÉ DE VÉRTICES (Persistent Index Buffer)
# Pre-asignamos un buffer de índices para evitar que torch.sort 
# tenga que pedir memoria nueva al driver de la GPU en cada iteración.
_INDEX_BUFFER = {}

def custom_kernel(data):
    """
    Sentinel Omega - Ordenamiento Radix v3.
    Estrategia: Static Index Dispatch + Output In-Place.
    """
    # 3. UNPACKING POR POSICIÓN (Fricción Cero)
    # Evita el overhead de la gestión de excepciones de Python
    input_t = data[0]
    output_t = data[1]
    
    # 4. GESTIÓN DE LA CAJA DE ÍNDICES
    # Si el tamaño cambia, el buffer se ajusta, pero en ráfagas de producción
    # esto ocurre una sola vez, logrando latencia constante.
    n = input_t.shape[0]
    if n not in _INDEX_BUFFER:
        # Los índices no los usaremos, pero torch.sort los requiere
        _INDEX_BUFFER[n] = torch.empty((n,), dtype=torch.int64, device=input_t.device)

    # 5. EL COLAPSO (Radix Sort Directo)
    # Al usar el parámetro 'out', le decimos a rocPRIM que inyecte 
    # los valores directamente en el buffer de salida (data[1]).
    # Esto elimina 1 copia completa de memoria y 1 asignación (allocation).
    torch.sort(input_t, out=(output_t, _INDEX_BUFFER[n]))
    
    return output_t
scrolls · 40 lines total

Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0

Changes from previous submission

Against this author's previous submission submission 671617.

# -*- coding: utf-8 -*-
import os
- import logging
import torch
- # Determinismo de ejecución en operaciones atómicas y de ordenamiento
+ # 1. ESTABILIZACIÓN DE LA WORLD LINE (Fuera del hot-path)
+ # Seteamos el determinismo globalmente al cargar el módulo para ahorrar microsegundos
os.environ["CUBLAS_WORKSPACE_CONFIG"] = ":4096:8"
+ torch.use_deterministic_algorithms(True)
- # Configuración de telemetría obligatoria
- logging.basicConfig(level=logging.INFO)
- logger = logging.getLogger("Sentinel_Omega_Sort")
+ # 2. CACHÉ DE VÉRTICES (Persistent Index Buffer)
+ # Pre-asignamos un buffer de índices para evitar que torch.sort
+ # tenga que pedir memoria nueva al driver de la GPU en cada iteración.
+ _INDEX_BUFFER = {}
def custom_kernel(data):
"""
- Motor de ordenamiento ascendente para arreglos 1D masivos.
- Optimización basada en la evasión de asignación de memoria intermedia
- y delegación al backend rocPRIM subyacente de PyTorch.
+ Sentinel Omega - Ordenamiento Radix v3.
+ Estrategia: Static Index Dispatch + Output In-Place.
"""
- try:
- # Desempaquetado estricto
- input_tensor = data[0]
- output = data[1]
-
- torch.use_deterministic_algorithms(True)
-
- # Ejecución del ordenamiento.
- # torch.sort invoca rocprim::radix_sort en hardware AMD.
- # Se captura exclusivamente el tensor de valores, omitiendo los índices.
- sorted_vals, _ = torch.sort(input_tensor)
-
- # Copia directa en memoria (in-place) sobre el búfer de salida preasignado.
- # Elimina la sobrecarga de instanciación de nuevos tensores en VRAM.
- output.copy_(sorted_vals)
-
- return output
+ # 3. UNPACKING POR POSICIÓN (Fricción Cero)
+ # Evita el overhead de la gestión de excepciones de Python
+ input_t = data[0]
+ output_t = data[1]
+
+ # 4. GESTIÓN DE LA CAJA DE ÍNDICES
+ # Si el tamaño cambia, el buffer se ajusta, pero en ráfagas de producción
+ # esto ocurre una sola vez, logrando latencia constante.
+ n = input_t.shape[0]
+ if n not in _INDEX_BUFFER:
+ # Los índices no los usaremos, pero torch.sort los requiere
+ _INDEX_BUFFER[n] = torch.empty((n,), dtype=torch.int64, device=input_t.device)
- except Exception as e:
- logger.error(f"Falla técnica en motor de ordenamiento: {str(e)}")
- raise e
+ # 5. EL COLAPSO (Radix Sort Directo)
+ # Al usar el parámetro 'out', le decimos a rocPRIM que inyecte
+ # los valores directamente en el buffer de salida (data[1]).
+ # Esto elimina 1 copia completa de memoria y 1 asignación (allocation).
+ torch.sort(input_t, out=(output_t, _INDEX_BUFFER[n]))
+
+ return output_t
scrolls · 67 diff lines total

Best evidence level for this revision: reported

JSON