Parallelizer - A Lightweight Buffer-Based Parallelism Solution

Looks like I can’t age verify with my ID, gotta wait for support. In the meantime I’ll work on the new docs i guess…

v0.1.3

Finally! After 4 days of blood and sweat, It’s finally here!

See the changelog here

1 Like

v0.1.4

Many bug fixes and performance optimizations, please update to the newest version.

v0.1.5

Optimized the buffer serialization to not alloc at all when possible

v0.1.6

Added

  • Color3u8 DataType that uses only 3 bytes instead of the usual 24 bytes for Color3
  • TaskCoordinator:Destroy

v0.1.7

Fixed

  • Buffer size calculation when merging

v0.2.1

Added

  • Color3b16 data type that compresses the Color3 to just 2 bytes

Fixed

  • Connections not inserted to the connections pool

v0.2.3

Fixed

  • Color3b16 not in the DataType
  • Vector3i16 occupying 8 bytes while it should be 6 bytes

Also added a DataTypes section in the API Reference Docs

v0.2.4

Fixed

  • TaskCoordinator:Destroy not clearing the actors and connections table

Updated the docs to have f32 and f64 (since I forgor), along with some other typo fixes

Also added a tips section on how to improve performance further

2 Likes

v0.3.3

Fixed

  • Buffer cursor when merging

v1.0.2

Changed

  • Color3 data type to use u8 by default instead of f64

Removed

  • Color3u8 data type

Fixed

  • Recursively calling itself when deserializing buffer data type (for some reason my tests didn’t catch this)
1 Like

v1.0.3

Fixed

  • String serialization parameter mismatch

v1.0.4

Fixed

  • Cursor not aligning properly with the batches when deserializing
1 Like

v1.0.5

Performance Improvements

  • Use bindable events instead of PreSimulation polling (150% increase in Immediate Signal Behavior)
  • Send threadCount and batchSize directly instead of storing them in a buffer, minimal impact

Changed

  • useMergedBuffer parameter to returnMergedBuffer for clarity

v1.1.0-rc.1

Added

  • cframef32 and cframe18 for 24 bytes and 18 bytes datatype alternatives to cframe respectively

I forgot to send this earlier

v2.0.0

This is a major version bump from the previous one due to the bug that was affecting existing behavior after 1.0.2 (API remains the same)
This version fixes a bug that was effectively breaking non-primitives (vector3, cframe, etc)

Fixed

  • cursor and writeValue parameter mismatch internally
  • Bindable not getting destroyed upon :Destroy
3 Likes

Transitioning to Maintenance

Parallel Luau was a solid addition for boosting native computation through multi-threading. However, Roblox’s philosophy as a “simulation engine” prioritizes determinism and consistency; whereas, parallelism opposes that by introducing complexities such as nondeterminism, race conditions, and/or replication issues. The limitations and overhead in Parallel Luau effectively often outweigh the benefits for most use cases.

With that being said, Parallelizer is now moving into the Maintenance Phase. It will remain supported with bug fixes, but will no longer be receiving further feature additions until further notice regarding parallelism in Roblox.

2 Likes

I’m not quite sure what you’re trying to say. If it’s about doing parallel luau for networking, I don’t see why would you do that? It’s not an intense workload and the overhead would easily topple the performance