Skip to content

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

@jonathanfischer97

Description

@jonathanfischer97

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions