-
Notifications
You must be signed in to change notification settings - Fork 24
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
Enumerating 3d and 4d rotations at the same time #52
Comments
I did some testing on my FX-8350 (mostly "y" revision, but the "z" seems similar) and got the following timing results (with updated numbers from mine for comparison): Indeed it seems your methods are faster, and it seems the scaling is better as N increases. I also find it interesting this was possible while checking reflections at the same time. I do wonder how much of the speedup was due to improvement of the removal check versus other factors. I did notice revision "v" is 13.6s vs "p" at 23.29s (N=12), so perhaps that might indicate part of the speed difference - though I'm sure there's some other optimizations you're doing somewhere in there. I'm not sure if I'm interpreting what you're doing correctly, but are you only propagating the "4D-rotation" unique polycubes and then checking for symmetry to back-calculate the "3D-rotation" unique polycubes? I could see why that would scale better to larger N values if that's the case, and I would expect it to be the main difference in speed. I was also thinking it might be interesting to do something similar with the "translation" unique polycubes, though I'm not sure how that could be done efficiently. From what I can see, the big thing missing is the ability to read / write some sort of output file, or otherwise some way to feed a known set of starting polycubes to generate segments for distributed jobs. With that in place, I would expect N=19 or N=20 could be quite feasible. |
@snowmanam2 Thank you for your feedback. Your interpretation is correct. I've written the distributed system now and used it to run n = 17 in 8h37m, and it agrees with the 3d rotation count of @hidny seems interested in this version of the problem as well. I think there's a high probability my count is correct since the one derived from it agrees with the other implementations, but it would be good for someone else to confirm as well. |
Unfortunately, I won't be able to confirm your number anytime soon. My java implementation is pretty slow compared to the Rust version of it and it would take me around 2 weeks of CPU time to get the number. I also have no experience with Rust. I might eventually experiment with the Rust code and get it that way, but that won't be any time soon. |
Hi all I have been doing some work on the processing side, not the coding or algorithms and wanted to know what is best to feedback/upload. I have migrated the RUST implementation to Windows as I have access to a few machines with that OS. So wonder if you can get back to me @pbj4 to see if what I am working on can help? Thanks Tony Some results... Fresh compile on Intel server - Windows 11 VM Hyper-V on Server 2022 c:\Scripts\polycubes-single>%CD%\target\x86_64-pc-windows-msvc\release\polycubes 12 c:\Scripts\polycubes-single>%CD%\target\x86_64-pc-windows-msvc\release\polycubes 13 c:\Scripts\polycubes-single>%CD%\target\x86_64-pc-windows-msvc\release\polycubes 14 c:\Scripts\polycubes-single>%CD%\target\x86_64-pc-windows-msvc\release\polycubes 15 |
Update - heres my AMD - not on a VM - compiled exe: And heres the "server" - compiled exe - not a VM - C:\Scripts\Polycubes>polycubes 14 |
Updated the Linux optimisation - and also implemented another tweak - that definitely has a positive impact enumerating up to n = 12... enumerating up to n = 13... enumerating up to n = 14... enumerating up to n = 15... |
a small improvement on the linux compile again. But the 16 calculation had an error earlier when I tried. Probably the overclocked memory or CPU at constant 100% skipped a cycle. enumerating up to n = 15... |
Added my suggestions, optimisations and tutorials to @pbj4 update - pbj4/polycubes#1 Let me know your thoughts please Thanks Tony |
It's possible to count the 3d rotation polycubes when generating the 4d rotation polycubes using the following relationship:
I have a repo that implements this idea, #11, #49, and a streaming articulation point algorithm. The performance seems competitive, but I would appreciate if someone else could benchmark it as well. For n = 12 my laptop takes 5.6s to run mine, 7s to run #49 with ./polycube_generator 12 -a, 11.2s to run #27, and 39.6s to run the current rust version with cargo run -r -- enumerate -m hashless 12 and a n = 11 cache file.
The text was updated successfully, but these errors were encountered: