|
5 | 5 | [-orange?style=flat-square)](https://central.sonatype.com/artifact/com.github.gbenroscience/parser-ng) |
6 | 6 | [](https://www.oracle.com/java/) |
7 | 7 |
|
8 | | -> **The fastest pure-Java math runtime, now with GPU (CUDA and OpenCL) bulk evaluators and a fully open-sourced Vector API (SIMD) kernel. Zero JNI. Zero native binaries. Zero bytecode-safety risk.** |
| 8 | +> **The fastest pure-Java math runtime, now with GPU (CUDA, Metal and OpenCL) bulk evaluators and a fully open-sourced Vector API (SIMD) kernel. Zero JNI. Zero native binaries. Zero bytecode-safety risk.** |
9 | 9 |
|
10 | 10 | [**ParserNG 3.0.7 is live**](LATEST.md) |
11 | 11 | - In this version, `parser-ng-sql`, a new extension has been introduced to help Apache Arrow users of ParserNG(parser-ng-arrow) maximize its use, using SQL as a query language |
@@ -105,7 +105,7 @@ One kernel, three backends, your choice of double or genuinely native float32 (n |
105 | 105 | MathExpression me = new MathExpression("3*cos(x-2)+ln(3*x^3-5*x-4*tan(x))"); |
106 | 106 | VectorTurboEvaluator vte = new VectorTurboEvaluator(me); |
107 | 107 |
|
108 | | -try (GpuCompositeExpression gpu = GpuExpressionBridge.from(vte)) { // auto-picks CUDA, falls back to OpenCL |
| 108 | +try (GpuCompositeExpression gpu = GpuExpressionBridge.from(vte)) { // auto-picks CUDA, falls back to OpenCL/Metal |
109 | 109 | double[] flat = /* your sample buffer, column-major per variable slot */; |
110 | 110 | double[] out = new double[flat.length]; |
111 | 111 | gpu.applyBulk(flat, out); // full double precision |
@@ -277,7 +277,7 @@ evaluator.applyBulk(inputs, out); |
277 | 277 | | **< 1.0.0** | `MathExpression`, the interpreter. ParserNG Standard. | |
278 | 278 | | **1.0.0 – 1.x** | Turbo tier arrives: `ScalarTurboEvaluator1` (variable args as an array), `ScalarTurboEvaluator2` (variable args as widened primitives internally), and `MatrixTurboEvaluator`, all built on `MethodHandles`. | |
279 | 279 | | **2.0.0 – 2.x** | Bulk evaluation, via mechanical sympathy *and* SIMD. `VectorTurboEvaluator` coerces auto-vectorization through code shape alone; `SIMDVectorTurboEvaluator` forces it via the explicit Vector API. Both support `applyBulkParallel(in, out)`, but JDK 21 has no CPU pinning, capping the parallel win. | |
280 | | -| **3.0.7** | `SIMDEngineEvaluator` and `SIMDCommandTurboEvaluator` add CPU pinning (best on Linux): 2 workers on 2 cores ≈ 1.8×–2.0× the work of 1 worker on 1 core. `SIMDEngineEvaluator` edges out `SIMDCommandTurboEvaluator` by a few ns/op. Both live in **`parser-ng-gpu-simd`** (JDK 22+), the module that also houses the star of this release: native **GPU bulk evaluators for CUDA and OpenCL**. | |
| 280 | +| **3.0.7** | `SIMDEngineEvaluator` and `SIMDCommandTurboEvaluator` add CPU pinning (best on Linux): 2 workers on 2 cores ≈ 1.8×–2.0× the work of 1 worker on 1 core. `SIMDEngineEvaluator` edges out `SIMDCommandTurboEvaluator` by a few ns/op. Both live in **`parser-ng-gpu-simd`** (JDK 22+), the module that also houses the star of this release: native **GPU bulk evaluators for CUDA and OpenCL and Metal**. | |
281 | 281 |
|
282 | 282 | Same `MathExpression` syntax at every tier. You scale up by choosing a different evaluator, never by rewriting the expression. |
283 | 283 |
|
@@ -391,7 +391,7 @@ double[] out = new double[totalElements]; |
391 | 391 | evaluator.applyBulk(inputs, out); // tail elements auto-masked if totalElements isn't lane-aligned |
392 | 392 | ``` |
393 | 393 |
|
394 | | -### 5. GPU: OpenCL / CUDA (`parser-ng-gpu-simd`, JDK 22+) |
| 394 | +### 5. GPU: OpenCL / CUDA / Metal(`parser-ng-gpu-simd`, JDK 22+) |
395 | 395 |
|
396 | 396 | ```java |
397 | 397 | MathExpression me = new MathExpression("2*x^2-3*x+1"); |
@@ -451,7 +451,7 @@ Adds `VectorTurboEvaluator` and `SIMDVectorTurboEvaluator`: |
451 | 451 |
|
452 | 452 | ### For Modern JDK 22+ GPU and/or CPU-Pinned SIMD Environments |
453 | 453 |
|
454 | | -Adds `SIMDEngineEvaluator`, `SIMDCommandTurboEvaluator`, and the GPU bulk evaluators (CUDA + OpenCL): |
| 454 | +Adds `SIMDEngineEvaluator`, `SIMDCommandTurboEvaluator`, and the GPU bulk evaluators (CUDA + OpenCL + Metal): |
455 | 455 |
|
456 | 456 | ```xml |
457 | 457 | <dependency> |
|
0 commit comments