Относительно «Нет доступной информации»: эти другие столбцы заполняются после выполнения шага анализа структуры доступа к памяти. Вы можете сделать это с вашей последней аннотированной версией просто отлично
ользую Intel Advisor для анализа моего параллельного приложения. У меня есть этот код, который является основным циклом моей программы и где проводится большую часть времени:
for(size_t i=0; i<wrapperIndexes.size(); i++){
const int r = wrapperIndexes[i].r;
const int c = wrapperIndexes[i].c;
const float val = localWrappers[wrapperIndexes[i].i].cur.at<float>(wrapperIndexes[i].r,wrapperIndexes[i].c);
if ( (val > positiveThreshold && (isMax(val, localWrappers[wrapperIndexes[i].i].cur, r, c) && isMax(val, localWrappers[wrapperIndexes[i].i].low, r, c) && isMax(val, localWrappers[wrapperIndexes[i].i].high, r, c))) ||
(val < negativeThreshold && (isMin(val, localWrappers[wrapperIndexes[i].i].cur, r, c) && isMin(val, localWrappers[wrapperIndexes[i].i].low, r, c) && isMin(val, localWrappers[wrapperIndexes[i].i].high, r, c))) )
// either positive -> local max. or negative -> local min.
ANNOTATE_ITERATION_TASK(localizeKeypoint);
localizeKeypoint(r, c, localCurSigma[wrapperIndexes[i].i], localPixelDistances[wrapperIndexes[i].i], localWrappers[wrapperIndexes[i].i]);
}
Как вы видете,localizeKeypoint
где большую часть времени проводит цикл (если вы не учитываетеif
пункт). Я хочу сделать Отчет о пригодности, чтобы оценить выигрыш от распараллеливания цикла выше. Итак, я написал это:
ANNOTATE_SITE_BEGIN(solve);
for(size_t i=0; i<wrapperIndexes.size(); i++){
const int r = wrapperIndexes[i].r;
const int c = wrapperIndexes[i].c;
const float val = localWrappers[wrapperIndexes[i].i].cur.at<float>(wrapperIndexes[i].r,wrapperIndexes[i].c);
if ( (val > positiveThreshold && (isMax(val, localWrappers[wrapperIndexes[i].i].cur, r, c) && isMax(val, localWrappers[wrapperIndexes[i].i].low, r, c) && isMax(val, localWrappers[wrapperIndexes[i].i].high, r, c))) ||
(val < negativeThreshold && (isMin(val, localWrappers[wrapperIndexes[i].i].cur, r, c) && isMin(val, localWrappers[wrapperIndexes[i].i].low, r, c) && isMin(val, localWrappers[wrapperIndexes[i].i].high, r, c))) )
// either positive -> local max. or negative -> local min.
ANNOTATE_ITERATION_TASK(localizeKeypoint);
localizeKeypoint(r, c, localCurSigma[wrapperIndexes[i].i], localPixelDistances[wrapperIndexes[i].i], localWrappers[wrapperIndexes[i].i]);
}
ANNOTATE_SITE_END();
И отчет о пригодности показал превосходное увеличение в 6,69 раза, как вы можете видеть здесь:
Однако, запуская проверку зависимостей, я получил это сообщение о проблеме:
В частности, см. «Отсутствует стартовое задание».
Кроме того, если я размещуANNOTATE_ITERATION_TASK
в начале цикла, вот так:
ANNOTATE_SITE_BEGIN(solve);
for(size_t i=0; i<wrapperIndexes.size(); i++){
ANNOTATE_ITERATION_TASK(localizeKeypoint);
const int r = wrapperIndexes[i].r;
const int c = wrapperIndexes[i].c;
const float val = localWrappers[wrapperIndexes[i].i].cur.at<float>(wrapperIndexes[i].r,wrapperIndexes[i].c);
if ( (val > positiveThreshold && (isMax(val, localWrappers[wrapperIndexes[i].i].cur, r, c) && isMax(val, localWrappers[wrapperIndexes[i].i].low, r, c) && isMax(val, localWrappers[wrapperIndexes[i].i].high, r, c))) ||
(val < negativeThreshold && (isMin(val, localWrappers[wrapperIndexes[i].i].cur, r, c) && isMin(val, localWrappers[wrapperIndexes[i].i].low, r, c) && isMin(val, localWrappers[wrapperIndexes[i].i].high, r, c))) )
// either positive -> local max. or negative -> local min.
localizeKeypoint(r, c, localCurSigma[wrapperIndexes[i].i], localPixelDistances[wrapperIndexes[i].i], localWrappers[wrapperIndexes[i].i]);
}
ANNOTATE_SITE_END();
Выгода ужасна
Я делаю что-то неправильно?
INTEL_OPT=-O3 -simd -xCORE-AVX2 -parallel -qopenmp -fargument-noalias -ansi-alias -no-prec-div -fp-model fast=2
INTEL_PROFILE=-g -qopt-report=5 -Bdynamic -shared-intel -debug inline-debug-info -qopenmp-link dynamic -parallel-source-info=2 -ldl