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

Is there a reason the samplers generate row instead of column matrices? Julia is column major #104

Open
jonathanfischer97 opened this issue Jan 26, 2024 · 1 comment

Comments

@jonathanfischer97
Copy link
Contributor

The AbstractSamplers generate matrices where data is organized by row instead of column.
So when a user writes a parallelized objective function for example, they must iterate by row:

function f_parallel(X)
     fitness = zeros(size(X,1))
     Threads.@threads for i in 1:size(X,1)
         fitness[i] = f(X[i,:])
     end
     fitness
 end

This is atypical in Julia, as most users and external packages organize data by column. Additionally, iterating by row is discouraged, as Julia is column major and thus the row values will not be stored contiguously, causing cache misses.

Was just wondering if this was by design or if their was a good reason for this? I'm adding the option in my fork for users to initialize methods with a pre-generated population, so I need to exchange a lot of the length calls for size in _complete_population!, and would like to abide by your original design in case of eventual PR/merge.

If not, I'll move my fork to completely column major and make my changes based on that.

@jmejia8
Copy link
Owner

jmejia8 commented Jan 26, 2024

Hi @jonathanfischer97

The row major implementation in the whole package comes from its genesis without any specific reason (my fault since that), and we need to move to the typical way in Julia (column major).

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants