¿Pueden las operaciones JSL de JMP Software utilizar la aceleración de GPU?Actualmente, es fácil aprovechar la aceleración de GPU para realizar cálculos en Python. ¿Es posible lograrlo utilizando solo JSL?
¡Gracias expertos!
Windows 10 de 64 bits
Automatización y scriptingVentanasRe: ¿Pueden las operaciones JSL de JMP Software utilizar la aceleración de GPU?Aquí hay una respuesta reciente a un tema de discusión de MZWald del personal de JMP sobre el uso de múltiples núcleos y GPU.
Algunas plataformas en JMP solo usan un único subproceso, por lo que tener muchos subprocesos no agregaría mucho valor, pero tener ese único subproceso ejecutándose a una frecuencia más rápida sí agregaría valor. Algunas plataformas en JMP aprovechan múltiples subprocesos, por lo que tener más subprocesos/núcleos ayuda.
Con el complemento Torch en JMP Pro 18, ahora por primera vez se utilizará una GPU para la clasificación de imágenes y el aprendizaje profundo, que realiza esas tareas órdenes de magnitud más rápido que una CPU.
Re: ¿Pueden las operaciones JSL de JMP Software utilizar la aceleración de GPU?
Re: ¿Pueden las operaciones JSL de JMP Software utilizar la aceleración de GPU?import pyopencl as cl
import pyopencl.array as cl_array
import numpy as np
import csv
import os
import time
# Select OpenCL platform and GPU device
platform = cl.get_platforms()[0] # Select the first platform (e.g., AMD)
device = platform.get_devices()[0] # Select the first GPU device (e.g., gfx804)
context = cl.Context([device])
queue = cl.CommandQueue(context)
# Define the GPU computation kernel (squares array elements)
kernel_code = """
__kernel void square(__global float *arr) {
int gid = get_global_id(0);
arr[gid] = arr[gid] * arr[gid];
}
"""
program = cl.Program(context, kernel_code).build()
# Create the CSV file path
csv_path = r"C:\0\results.csv" # Changed to a more common name
# Ensure the directory exists
os.makedirs(os.path.dirname(csv_path), exist_ok=True)
# Run 10,000 computation tasks
n = 10**6 # 1 million data points per computation
num_iterations = 10_000
# Pre-allocate arrays
host_array = np.empty(n, dtype=np.float32)
gpu_array = cl_array.empty(queue, host_array.shape, dtype=host_array.dtype)
# Store results
results = []
# Random number generator
rng = np.random.default_rng()
# Start timing
start_time = time.time()
for i in range(num_iterations):
# Generate random data and fill host_array
host_array[:] = rng.random(n, dtype=np.float32)
# Upload data to GPU
cl.enqueue_copy(queue, gpu_array.data, host_array)
# Compute on the GPU
program.square(queue, gpu_array.shape, None, gpu_array.data)
# Retrieve data from GPU
cl.enqueue_copy(queue, host_array, gpu_array.data)
# Record the first 5 results
results.append([i + 1] + host_array[:5].tolist())
# Progress display
if (i + 1) % 100 == 0:
print(f"Completed {i + 1}/{num_iterations} iterations...")
# Total time statistics
end_time = time.time()
total_time = end_time - start_time
print(f"Total time: {total_time:.2f} seconds")
print(f"Average time per iteration: {total_time / num_iterations:.6f} seconds")
# Write results to CSV in a single operation
with open(csv_path, "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["Iteration", "Result 1", "Result 2", "Result 3", "Result 4", "Result 5"]) # CSV header
writer.writerows(results)
print(f":white_heavy_check_mark:</img> Computation complete, results saved to {csv_path}")pitón
¿Cómo puedo usar JSL?
Re: ¿Pueden las operaciones JSL de JMP Software utilizar la aceleración de GPU?Por el momento no puedes.
El uso de Python y PyCUDA o pyOpenCL es prácticamente la única forma de acceder a las GPU desde scripts en JMP. Como se muestra en una de mis publicaciones anteriores, puedes crear funciones JSL definidas por el usuario que implementen funciones en Python mediante Python Execute(). De esta manera, puedes escribir el código de la GPU en Python y, aun así, presentar una interfaz JSL para el resto de tus scripts.