- Fork cudarc locally (vendor/cudarc): add CudaContext::load_cubin() that calls cuModuleLoadData directly — zero nvrtc dependency - Remove "nvrtc" feature from ml-core, ml-dqn, ml-ppo Cargo.toml - Replace all 89 Ptx::from_binary + load_module calls with load_cubin - ml-core cuda_autograd: wire 9 stub constructors to precompiled cubins (activation, elementwise, linear, loss, reduction, dropout, layer_norm, optimizer) - ml-core build.rs: compile 8 BF16-native CUDA kernels via nvcc - cubin_loader.rs: thin wrapper around CudaContext::load_cubin() - Fix size_of::<f32> in gpu_tensor.rs, stream_ops.rs, layer_norm.rs - Fix test data: Vec<f32> → Vec<half::bf16> for memcpy_htod - Stub ml-ppo/ml-dqn runtime compile_ptx calls (dead code) - backtest_metrics_kernel.cu: full native BF16 rewrite (no float) - backtest_env_kernel.cu: shared memory → __nv_bfloat16 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
20 lines
612 B
Plaintext
20 lines
612 B
Plaintext
// Constant memory - faster than global memory for read-only data
|
|
// accessed by all threads
|
|
__constant__ float coefficients[4];
|
|
|
|
extern "C" __global__ void polynomial_kernel(
|
|
float *out,
|
|
const float *inp,
|
|
int numel
|
|
) {
|
|
int i = blockIdx.x * blockDim.x + threadIdx.x;
|
|
if (i < numel) {
|
|
float x = inp[i];
|
|
// Compute polynomial: coefficients[0] + coefficients[1]*x + coefficients[2]*x^2 + coefficients[3]*x^3
|
|
out[i] = coefficients[0] +
|
|
coefficients[1] * x +
|
|
coefficients[2] * x * x +
|
|
coefficients[3] * x * x * x;
|
|
}
|
|
}
|