lundi 3 octobre 2016

C++11 app that uses dispatch_apply not working under Mac OS Sierra

I had a completely functioning codebase written in C++11 that used Grand Central Dispatch parallel processing, specifically dispatch_apply to do the basic parallel for loop for some trivial game calculations.

Since upgrading to Sierra, this code still runs, but each block is run in serial -- the cout statement shows that they are being executed in serial order, and CPU usage graph shows no parallel working on.

Queue is defined as:

workQueue = dispatch_queue_create("workQueue", DISPATCH_QUEUE_CONCURRENT);

And the relevant program code is:

            case Concurrency::Parallel: {
                    dispatch_apply(stateMap.size(), workQueue, ^(size_t stateIndex) {
                        string thisCode = stateCodes[stateIndex];
                        long thisCount = stateCounts[stateIndex];

                        GameResult sliceResult = playStateOfCode(thisCode, thisCount);
                        results[stateIndex] = sliceResult;

                        if ((stateIndex + 1) % updatePeriod == 0) {
                            cout << stateIndex << endl;
                        }
                    });
                    break;
                }

I strongly suspect that this either a bug, but if this is GCD forcing me to use new C++ methods for this, I'm all ears.

Aucun commentaire:

Enregistrer un commentaire