Accelerating access of struct members
Mostrar comentarios más antiguos
Dear all,
I noticed that accessing data within a struct seems to be very slow compared to an array. To illustrate this, I put together a small script that randomly accesses data within an array and a struct respectively:
M = 20;
N = 1e8;
data = rand(M, 1);
data_struct = struct('a', num2cell(data));
for n = 1:N
i = round(M * rand() + 1 / 2);
c = data_struct(i).a;
e = data(i);
end
Profiling this script reveals that the assignment of c consumes about 20x the time of assigning e. Is there any way to accelerate the access of the struct, i.e. by somehow specifying the type of data it contains?
Respuesta aceptada
Más respuestas (1)
Jan
el 9 de Mzo. de 2018
2 votos
Matlab's JIT acceleration can improve te execution speed of e.g. loops massively. During debugging and profiling the JIT is disabled, because it can reorder the commands to increase the speed, but this would confuse the examination of the code. Therefore the power of the profiler is limited, unfortunately.
Of course accessing a field of a struct takes time, because there is a substantial work to do in each iteration. Storing data in structs help to write clear code, but it reduces the execution speed compared to arrays.
1 comentario
Torsten Knüppel
el 12 de Mzo. de 2018
Categorías
Más información sobre Structures en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!