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

Non-random IFS kernels; Hutchinson Redesign #26

Open
2 of 7 tasks
Tracked by #29
leios opened this issue Nov 27, 2022 · 1 comment
Open
2 of 7 tasks
Tracked by #29

Non-random IFS kernels; Hutchinson Redesign #26

leios opened this issue Nov 27, 2022 · 1 comment
Labels
enhancement New feature or request

Comments

@leios
Copy link
Owner

leios commented Nov 27, 2022

I think the best approach for certain objects will actually be to do a counting-based solution as was described here: https://www.youtube.com/watch?v=OjTwzFzxR8M

So in the end, if we want to calculate a 1000 x 1000 square, we would need to calculate ~1,000,000 children. If we run with 256 threads, then we need to calculate ~10 generations (I think I did the math wrong here), which would mean we need to count through 0_000_000_000 in base4 space. Each element represents another possible function choice of the IFS and represents another operation of a specific function.

The idea would be to (using notation introduced in #24):

  1. Determine the number of generations we need to generate
    • This can be easily super-sampled by taking 1 generation more, which would mean smear frames on the new FractalLayer will still appear clean and not grainy
  2. Figure out where in counting space each thread is
  3. Give each thread that offset and then a number to count to and calculate the new point positions assigned to it
    • Note that this means some threads may have to do a lot more computation than other threads
    • Maybe offset this by somehow shuffling the counting array? That could cause undue warp divergence...

Here's the plan, so far, (#29):

  • Implement a redesign for the final / post Hutchinson operators via counting through fid. This sets the framework for counting
  • Implement a new struct for color output so we can output at any step in the process, ie:
struct ColorOutput{C, B}
    color::C
    output::B
@leios
Copy link
Owner Author

leios commented Nov 27, 2022

As discussed in #1, it would be a good idea to add another dispatch type on Hutchinson for this, simply called :non-random or something.

@leios leios mentioned this issue Dec 1, 2022
7 tasks
@leios leios added the enhancement New feature or request label Dec 3, 2022
@leios leios changed the title Non-random IFS kernels Non-random IFS kernels; Hutchinson Redesign Jan 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant