Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Windows build is not compiled with SimSIMD, f16 support for cosine distance #325

Closed
3 tasks done
monatis opened this issue Dec 26, 2023 · 4 comments
Closed
3 tasks done
Labels
enhancement New feature or request released

Comments

@monatis
Copy link

monatis commented Dec 26, 2023

Describe what you are looking for

The pip-installable package for Windows seems to be not compiled with SimSIMD (can be seen in index.specs), which makes it ~3-10x slower than the Linux build.

Additionally, It seems that cosine distance supports AVX512 with dtype='f32' , but it fallbacks to AVX2 with dtype='f16'. So we need to make a choice between optimization for speed or optimization for storage. It would be great to support AVX512 with float16 as well and of course, to have SimSIMD support in pip-installable package for Windows.
I can contribute to the implementation if there is no known limitation for these.

Can you contribute to the implementation?

  • I can contribute

Is your feature request specific to a certain interface?

It applies to everything

Contact Details

[email protected]

Is there an existing issue for this?

  • I have searched the existing issues

Code of Conduct

  • I agree to follow this project's Code of Conduct
@monatis monatis added the enhancement New feature or request label Dec 26, 2023
@ashvardanian
Copy link
Contributor

Hi, @monatis! Indeed, that issue exists. I use GCC attributes to annotate function-level compilation settings in SimSIMD. If you can find a way to make them work with MSVC - we will be able to accelerate the Windows build 🤗
Would you have time to work on that?

@monatis
Copy link
Author

monatis commented Dec 26, 2023

Hi @ashvardanian thanks for the quick response!

Yes, I can work on it this weekend.

My use case is semantic search on consumer-grade hardware, so every bit of optimization counts.

@ashvardanian
Copy link
Contributor

Hi @monatis! How is it going? Would be happy to merge if its ready 🤗

ashvardanian added a commit that referenced this issue Mar 20, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
Closes: #325
ashvardanian pushed a commit that referenced this issue Mar 31, 2024
# [2.10.0](v2.9.2...v2.10.0) (2024-03-31)

### Add

* `Index.__repr_pretty__` ([7087138](7087138))
* Introspect Rust builds ([16fa90f](16fa90f))
* Standalone SQLite binary ([227083b](227083b)), closes [#358](#358)

### Chore

* 120-char lines in Python ([92cf01e](92cf01e))

### Docs

* Cover cross-compilation ([de1a8e9](de1a8e9))
* Typo - "desnse" -> "dense" (#370) ([719cf7a](719cf7a)), closes [#370](#370)

### Fix

* `ascii` name collision in Py ([4ac3509](4ac3509))
* Allow missing metric state ([4b8e1a8](4b8e1a8))
* Avoid dynamic arrays for MSVC ([89d70cd](89d70cd))
* Exceptions for missing distances ([349c02d](349c02d))
* JIT compilation in Python ([a3287f1](a3287f1))
* JS compilation ([cea50ba](cea50ba))
* Missing `download_binary` arg ([64d211a](64d211a))
* Missing include ([6454aae](6454aae))
* mixed-precision tolerance in JS tests ([b72f658](b72f658))
* No `-Wno-vla` MSVC flag ([84e8e1e](84e8e1e))
* No extensions in some SQLite builds ([39264d0](39264d0))
* OpenMP max threads issue ([6fd4a2d](6fd4a2d)), closes [ClickHouse/ClickHouse#61780](ClickHouse/ClickHouse#61780)
* Silence false warnings ([ed3a23b](ed3a23b))

### Improve

* bit-casting for negative flaots ([1d03a9d](1d03a9d))
* Clean Python w. Ruff ([87e200b](87e200b))
* Concrete `scalar_kind_t` values ([27d911a](27d911a))
* Handle failing downloads ([8649815](8649815))
* Normalize Pearson as distance ([8a697f7](8a697f7))
* Pass `vectors` to `self_recall` ([565625e](565625e))
* Python evals for exact search ([36f6c5e](36f6c5e))
* Silence warnings ([3d229e0](3d229e0))

### Make

* `CMP0135` CMake policy ([d335df7](d335df7))
* `pypy` and `musl` wheels ([31665d5](31665d5))
* Add SimSIMD dynamic dispatch ([8b8d2f5](8b8d2f5))
* Avoid SimSIMD inner dispatch ([28b0850](28b0850))
* Build SQLite from source ([0dc59a8](0dc59a8))
* CMake pre 3.22 support ([145a4f4](145a4f4))
* Cross-compilation deps ([1de8d7a](1de8d7a))
* Cross-compile with Clang ([94f97cb](94f97cb)), closes [#322](#322)
* Disable SQLite extension for Windows ([c612cc2](c612cc2))
* Fetch local or remote SQLite builds ([f6b75e0](f6b75e0))
* Format Py lines to 120 columns ([5b5973c](5b5973c))
* Lantern build issues ([a400742](a400742)), closes [/github.com/unum-cloud/usearch/blob/4747ef42f4140a1fde16118f25f079f9af79649e/include/usearch/index_plugins.hpp#L43-L45](https://github.com//github.com/unum-cloud/usearch/blob/4747ef42f4140a1fde16118f25f079f9af79649e/include/usearch/index_plugins.hpp/issues/L43-L45) [/github.com/unum-cloud/usearch/blob/ce54b814a8a10f4c0c32fee7aad9451231b63f75/include/usearch/index_plugins.hpp#L50](https://github.com//github.com/unum-cloud/usearch/blob/ce54b814a8a10f4c0c32fee7aad9451231b63f75/include/usearch/index_plugins.hpp/issues/L50)
* Prebuild JS binaries (#342) ([267fbb5](267fbb5)), closes [#342](#342) [#336](#336)
* Pull submodules before cross-comp ([24b3529](24b3529))
* Read UTF8 README on Windows ([a49d17e](a49d17e))
* shared libs on MacOS are `.dylib` ([fd94aa8](fd94aa8))
* SimSIMD in Windows Python wheels ([ecb4948](ecb4948)), closes [#325](#325)
* SQlite as shared library ([3db3d33](3db3d33))
* Take SQLite source for cross-compilation ([95b260f](95b260f))
* Upgrade SimSIMD ([908df0d](908df0d))
* Upgrade SimSIMD to 4.2.2 ([9f53f15](9f53f15))
* Use AVX in Windows Python images ([c694880](c694880)), closes [#325](#325)
@ashvardanian
Copy link
Contributor

🎉 This issue has been resolved in version 2.10.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request released
Projects
None yet
Development

No branches or pull requests

2 participants