Skip to content

Commit

Permalink
Merge pull request #106 from ashvardanian/main-dev
Browse files Browse the repository at this point in the history
Compatibility Improvements
  • Loading branch information
ashvardanian authored Mar 31, 2024
2 parents b9f1629 + f5fe36d commit d2c4976
Show file tree
Hide file tree
Showing 11 changed files with 201 additions and 98 deletions.
42 changes: 39 additions & 3 deletions .github/workflows/prerelease.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ jobs:
python -c "import simsimd; print(simsimd.get_capabilities())"
pytest python/test.py -s -x -Wd -v
test_javascript:
name: Test JavaScript
test_nodejs:
name: Test Node.js
runs-on: ubuntu-22.04
env:
CC: gcc-12
Expand All @@ -87,6 +87,42 @@ jobs:
npm run build-js
npm test
test_deno:
name: Test Deno
runs-on: ubuntu-22.04
env:
CC: gcc-12
CXX: g++-12

steps:
- uses: actions/checkout@v4
- run: git submodule update --init --recursive

- name: Update compilers
run: |
sudo apt update
sudo apt install -y cmake build-essential libjemalloc-dev libomp-dev gcc-12 g++-12
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20

- name: Build and Test with Node
run: |
npm ci --ignore-scripts
npm run install
npm run build-js
npm test
- name: Set up Deno
uses: denoland/setup-deno@v1
with:
deno-version: vx.x.x

- name: Test with Deno
run: deno test --allow-read

test_rust:
name: Test Rust
runs-on: ubuntu-latest
Expand All @@ -104,7 +140,7 @@ jobs:
build_wheels:
name: Build Python ${{ matrix.python-version }} for ${{ matrix.os }}
runs-on: ${{ matrix.os }}
needs: [test_python, test_rust]
needs: [test_python]
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ package-ci/
prebuilds/
build/
javascript/dist
bun.lockb

# for Google Benchmark
compare.py
Expand Down
13 changes: 13 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,19 @@ npm test
npm run bench
```

Running with Deno:

```sh
deno test --allow-read
```

Running with Bun:

```sh
npm install -g bun
bun test
```

## GoLang

```sh
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions include/simsimd/dot.h
Original file line number Diff line number Diff line change
Expand Up @@ -524,16 +524,16 @@ SIMSIMD_PUBLIC void simsimd_dot_f16_sve(simsimd_f16_t const* a_enum, simsimd_f16
simsimd_distance_t* result) {
simsimd_size_t i = 0;
svfloat16_t ab_vec = svdupq_n_f16(0, 0, 0, 0, 0, 0, 0, 0);
simsimd_f16_t const* a = (simsimd_f16_t const*)(a_enum);
simsimd_f16_t const* b = (simsimd_f16_t const*)(b_enum);
simsimd_f16_for_arm_simd_t const* a = (simsimd_f16_for_arm_simd_t const*)(a_enum);
simsimd_f16_for_arm_simd_t const* b = (simsimd_f16_for_arm_simd_t const*)(b_enum);
do {
svbool_t pg_vec = svwhilelt_b16((unsigned int)i, (unsigned int)n);
svfloat16_t a_vec = svld1_f16(pg_vec, (simsimd_f16_for_arm_simd_t const*)a + i);
svfloat16_t b_vec = svld1_f16(pg_vec, (simsimd_f16_for_arm_simd_t const*)b + i);
svfloat16_t a_vec = svld1_f16(pg_vec, a + i);
svfloat16_t b_vec = svld1_f16(pg_vec, b + i);
ab_vec = svmla_f16_x(pg_vec, ab_vec, a_vec, b_vec);
i += svcnth();
} while (i < n);
simsimd_f16_t ab = svaddv_f16(svptrue_b16(), ab_vec);
simsimd_f16_for_arm_simd_t ab = svaddv_f16(svptrue_b16(), ab_vec);
*result = ab;
}

Expand Down
4 changes: 2 additions & 2 deletions include/simsimd/simsimd.h
Original file line number Diff line number Diff line change
Expand Up @@ -831,7 +831,7 @@ SIMSIMD_PUBLIC void simsimd_dot_f64(simsimd_f64_t const* a, simsimd_f64_t const*
SIMSIMD_PUBLIC void simsimd_dot_f16c(simsimd_f16_t const* a, simsimd_f16_t const* b, simsimd_size_t n,
simsimd_distance_t* d) {
#if SIMSIMD_TARGET_SVE
simsimd_dot_f16c_sve(a, b, n, d)
simsimd_dot_f16c_sve(a, b, n, d);
#elif SIMSIMD_TARGET_NEON
simsimd_dot_f16c_neon(a, b, n, d);
#elif SIMSIMD_TARGET_HASWELL
Expand Down Expand Up @@ -869,7 +869,7 @@ SIMSIMD_PUBLIC void simsimd_dot_f64c(simsimd_f64_t const* a, simsimd_f64_t const
SIMSIMD_PUBLIC void simsimd_vdot_f16c(simsimd_f16_t const* a, simsimd_f16_t const* b, simsimd_size_t n,
simsimd_distance_t* d) {
#if SIMSIMD_TARGET_SVE
simsimd_dot_f16c_sve(a, b, n, d)
simsimd_dot_f16c_sve(a, b, n, d);
#elif SIMSIMD_TARGET_NEON
simsimd_dot_f16c_neon(a, b, n, d);
#elif SIMSIMD_TARGET_HASWELL
Expand Down
24 changes: 12 additions & 12 deletions include/simsimd/spatial.h
Original file line number Diff line number Diff line change
Expand Up @@ -468,17 +468,17 @@ SIMSIMD_PUBLIC void simsimd_l2sq_f16_sve(simsimd_f16_t const* a_enum, simsimd_f1
simsimd_distance_t* result) {
simsimd_size_t i = 0;
svfloat16_t d2_vec = svdupq_n_f16(0, 0, 0, 0, 0, 0, 0, 0);
simsimd_f16_t const* a = (simsimd_f16_t const*)(a_enum);
simsimd_f16_t const* b = (simsimd_f16_t const*)(b_enum);
simsimd_f16_for_arm_simd_t const* a = (simsimd_f16_for_arm_simd_t const*)(a_enum);
simsimd_f16_for_arm_simd_t const* b = (simsimd_f16_for_arm_simd_t const*)(b_enum);
do {
svbool_t pg_vec = svwhilelt_b16((unsigned int)i, (unsigned int)n);
svfloat16_t a_vec = svld1_f16(pg_vec, (simsimd_f16_for_arm_simd_t const*)a + i);
svfloat16_t b_vec = svld1_f16(pg_vec, (simsimd_f16_for_arm_simd_t const*)b + i);
svfloat16_t a_vec = svld1_f16(pg_vec, a + i);
svfloat16_t b_vec = svld1_f16(pg_vec, b + i);
svfloat16_t a_minus_b_vec = svsub_f16_x(pg_vec, a_vec, b_vec);
d2_vec = svmla_f16_x(pg_vec, d2_vec, a_minus_b_vec, a_minus_b_vec);
i += svcnth();
} while (i < n);
float16_t d2_f16 = svaddv_f16(svptrue_b16(), d2_vec);
simsimd_f16_for_arm_simd_t d2_f16 = svaddv_f16(svptrue_b16(), d2_vec);
*result = d2_f16;
}

Expand All @@ -488,21 +488,21 @@ SIMSIMD_PUBLIC void simsimd_cos_f16_sve(simsimd_f16_t const* a_enum, simsimd_f16
svfloat16_t ab_vec = svdupq_n_f16(0, 0, 0, 0, 0, 0, 0, 0);
svfloat16_t a2_vec = svdupq_n_f16(0, 0, 0, 0, 0, 0, 0, 0);
svfloat16_t b2_vec = svdupq_n_f16(0, 0, 0, 0, 0, 0, 0, 0);
simsimd_f16_t const* a = (simsimd_f16_t const*)(a_enum);
simsimd_f16_t const* b = (simsimd_f16_t const*)(b_enum);
simsimd_f16_for_arm_simd_t const* a = (simsimd_f16_for_arm_simd_t const*)(a_enum);
simsimd_f16_for_arm_simd_t const* b = (simsimd_f16_for_arm_simd_t const*)(b_enum);
do {
svbool_t pg_vec = svwhilelt_b16((unsigned int)i, (unsigned int)n);
svfloat16_t a_vec = svld1_f16(pg_vec, (simsimd_f16_for_arm_simd_t const*)a + i);
svfloat16_t b_vec = svld1_f16(pg_vec, (simsimd_f16_for_arm_simd_t const*)b + i);
svfloat16_t a_vec = svld1_f16(pg_vec, a + i);
svfloat16_t b_vec = svld1_f16(pg_vec, b + i);
ab_vec = svmla_f16_x(pg_vec, ab_vec, a_vec, b_vec);
a2_vec = svmla_f16_x(pg_vec, a2_vec, a_vec, a_vec);
b2_vec = svmla_f16_x(pg_vec, b2_vec, b_vec, b_vec);
i += svcnth();
} while (i < n);

simsimd_f16_t ab = svaddv_f16(svptrue_b16(), ab_vec);
simsimd_f16_t a2 = svaddv_f16(svptrue_b16(), a2_vec);
simsimd_f16_t b2 = svaddv_f16(svptrue_b16(), b2_vec);
simsimd_f16_for_arm_simd_t ab = svaddv_f16(svptrue_b16(), ab_vec);
simsimd_f16_for_arm_simd_t a2 = svaddv_f16(svptrue_b16(), a2_vec);
simsimd_f16_for_arm_simd_t b2 = svaddv_f16(svptrue_b16(), b2_vec);

// Avoid `simsimd_approximate_inverse_square_root` on Arm NEON
simsimd_f32_t a2_b2_arr[2] = {a2, b2};
Expand Down
22 changes: 22 additions & 0 deletions javascript/test.mjs
Original file line number Diff line number Diff line change
@@ -1,3 +1,25 @@
// Currently the builds are expected to run only on Node.js,
// but Deno tests pass as well.
//
// Bun supports `node:assert`, but not `node:test`.
// Using `require` we can make the tests compatible with Bun.
//
// const isBun = typeof Bun !== "undefined";
// let assert, test;
// if (isBun) {
// assert = require('node:assert');
// test = require('bun:test');
// } else {
// assert = require('node:assert');
// test = require('node:test');
// }
//
// That, however, leads to other issues, like the following:
//
// require is not defined in ES module scope, you can use import instead
//
// https://bun.sh/docs/runtime/nodejs-apis
// https://bun.sh/guides/util/detect-bun
import test from "node:test";
import assert from "node:assert";

Expand Down
20 changes: 16 additions & 4 deletions javascript/tsconfig-base.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
{
"compileOnSave": false,
"exclude": ["node_modules", "dist"],
"include": ["node-gyp-build.d.ts", "simsimd.ts", "fallback.ts"],
"exclude": [
"node_modules",
"dist"
],
"include": [
"node-gyp-build.d.ts",
"simsimd.ts",
"fallback.ts"
],
"compilerOptions": {
"allowJs": true,
"allowSyntheticDefaultImports": true,
"baseUrl": ".",
"declaration": true,
"esModuleInterop": true,
"inlineSourceMap": false,
"lib": ["esnext"],
"lib": [
"esnext"
],
"listEmittedFiles": false,
"listFiles": false,
"moduleResolution": "node",
Expand All @@ -20,6 +29,9 @@
"skipLibCheck": true,
"strict": true,
"traceResolution": false,
"types": ["node","./node-gyp-build.d.ts"]
"types": [
"node",
"./node-gyp-build.d.ts"
]
}
}
Loading

0 comments on commit d2c4976

Please sign in to comment.