What does "contains structure move" mean?


What does this mean?

“Loop not vectorized/parallelized: contains structure move

This is the output using the following
CFLAGS = -O2 -Minfo=all,intensity -Mframe -Mconcur

and I’m trying to use PGI 18.10 to parallelize a for loop with an array of structs.

Hi Leonard,

I’m under the impression this means that any data movement of the structure’s types in or out of the loop will prevent parallelization.

Can you post the body of the loop in question and the output of -Minfo?

Hi Aglobus,
Thanks for answering. Below is my response to your questions.

Output of -Minfo
Line XXX Loop not vectorized/parallelized: contains structure move

Below code summarizes what is happening in for loop

global array of structs declared else where
i.e. GA->MyStructs[1000];
//The structs have int, floats, no arrays

float tempA[1000];
float tempb[1000];

for( int i =0; i < 1000; i++) (Line XXX)
MyStructs at_i = GA->MyStructs_;
//get values from at_i
//do calculations
//assign values to tempA and tempB at i

//Update GA->MyStructs values
for( int i =0; i < 1000; i++) (Line XXX)
GA->MyStructs.tempA = tempA;
GA->MyStructs.tempB = tempB;

//Other for loops using GA->MyStructs;_

To help the next person figure out the meaning of structure move

MyStructs at_i = GA->MyStructs_;
MyStructs *at_i = &GA->MyStructs;

solved this message._

Glad that solved it. Would it be possible for you to post the real code so we can take a look at it? A simple example we tried here vectorizes ok but I’m curious to see how yours differs.