Le operazioni JSL di JMP Software possono utilizzare l'accelerazione GPU?Attualmente, è facile sfruttare l'accelerazione GPU per i calcoli in Python. È possibile farlo usando solo JSL?
Grazie Esperti!
64 bit win10
Automazione e scriptingFinestreR: Le operazioni JSL di JMP Software possono utilizzare l'accelerazione GPU?Ecco una risposta recente a un argomento di discussione di MZWald dello staff JMP sull'utilizzo di più core e GPU
Alcune piattaforme in JMP usano solo un singolo thread, quindi avere molti thread non aggiungerebbe molto valore, ma avere quel singolo thread in esecuzione a una frequenza più veloce aggiungerebbe valore. Alcune piattaforme in JMP sfruttano i thread multipli, quindi avere più thread/core aiuta.
Con il componente aggiuntivo Torch di JMP Pro 18, per la prima volta verrà utilizzata una GPU per la classificazione delle immagini e il deep learning, che esegue tali attività con una velocità di ordini di grandezza superiore a quella di una CPU.
R: Le operazioni JSL di JMP Software possono utilizzare l'accelerazione GPU?
R: Le operazioni JSL di JMP Software possono utilizzare l'accelerazione 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}")pitone
Come posso fare JSL?
R: Le operazioni JSL di JMP Software possono utilizzare l'accelerazione GPU?Al momento non è possibile.
Usare Python e PyCUDA o pyOpenCL è l'unico modo per accedere alle GPU tramite script in JMP. Come mostrato in uno dei miei post precedenti, puoi creare funzioni JSL definite dall'utente che implementano funzionalità in Python usando Python Execute(). In questo modo puoi scrivere il codice GPU in Python, ma presentare comunque un'interfaccia JSL per il resto del tuo scripting.