c - How does the gcc "parallelize" code? -


i'm writing simple system call function, , came across phenomenon couldn't understand. in code below, used variable "flag" replace long bothering "prptr->prhasmsgb" @ [1] , [2]. supposed won't cause difference, turned out first call function, prptr->prhasmsgb=0, skip if , enter switch(). error consistent, , suppose may have compiler (gcc)? also, how compiler (gcc) determine independent , parallelize? i've got no clue on compiler, advice appreciated. thanks!

ps: code below have in original code, except part.

prptr = &proctab[currpid];      /* prptr pointer, , below supposed   */                                 /* dealing different prptr->prhasmsgb.     */                                 /* prptr->prhasmsgb = (int){0,1,2,3}            */ //  int flag; //  flag = prptr->prhasmsgb;    /* used flag replace prptr->prhasmsgb      */ //                              /* if[1] & switch[2] "paralleled" somehow */  /* case 0 handled here */ if (prptr->prhasmsgb == 0) {    /* [1] once flag                            */     something;     resched();                  /* call reschedule */ }  switch (prptr->prhasmsgb) {     /* [2] once flag                            */     case 1:          something;         return value;     case 2:          something;         return value;     case 3:         something;         return value;     case 0:         /* should never enter case 0 */     default:         return error; }     

the compiler doesn't parallelize code in sense of multi-threading, "vectorize" code if can pack multiple operands vector register, isn't going on here.

my guess call resched() change contents of proctab[currpid], when returns program has different value. long access dereferencing prptr compiler safe thing, , makes no assumptions contents of memory @ location, generates load memory.

however, if use local variable, flag, "cache" contents of prptr->prhasmsgb, doesn't reload memory, , don't execute case 1, 2, or 3 in switch, execute case 0 falls thru default case , return error.


Comments

Popular posts from this blog

user interface - How to replace the Python logo in a Tkinter-based Python GUI app? -

objective c - Greedy NSProgressIndicator Allocation -

how to set an OCR language in Google Drive -