1
\$\begingroup\$

The NVIDIA Direct Compute programming guide lists some best practices for memory management on the GPU. One tip they give on page 8 ("Structured Buffers") is to use a 'structure of arrays' (SOA) layout rather than the typical 'array of structures' (AOS) one:

struct Particle {     
    float4 position;    
    float4 velocity;
}; 
RWStructuredBuffer<Particle> particles;

vs

struct Particles {     
    RWStructuredBuffer<float4> position;    
    RWStructuredBuffer<float4> velocity;
}; 
Particles particles;

(At least, as far as I understand)

AOS layout seems to be the most popular (maybe even only) way to manage lists of stuff in the compute shader.

I haven't found a way to implement SOA from the CPU side, Unity's ComputeShader.cs doesn't have a set struct function or similar. Does Unity expose a way to set SOA structs from the CPU side at all?

\$\endgroup\$

0

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.