#pragma omp parallel for reduction(+:similarity)
for (int y = 5; y < 1920; y++)
{
int local_sim = 0;
for (int x = 5; x < 1080; x++)
{
local_sim += check(x, y);
}
similarity += local_sim;
}
#pragma omp parallel for reduction(+:similarity)
for (int y = 5; y < 1920; y++)
{
for (int x = 5; x < 1080; x++)
{
similarity += check(x, y);
}
}
Использование функций - это простое решение, но не идеальное. Если требуется сократить всего несколько инструкций, дешевле будет дублировать, чем делать вызов подпрограммы.
каким образом тело функции понимает, по какому адресу находится вершина стека?
но если попытаться делать прыжок на один участок кода из разных функций
общий код не будет понимать, с каким контекстом ему работать в данный момент
Но что, если мы имеем дело с многопоточностью
Почему считается, что вызов подпрограммы дороже, чем например использование цикла?
...
mr r3, r31 //адрес начала
mr r4, r30 //значение
mr r5, r29 //размер
loop:
cmp r5, 0
beq exit_loop
stb r4, 0(r3)
addi r3, r3, 1
addi r5, r5, -1
b loop
exit_loop:
...
//наш кусок в виде отдельной функции
memset:
cmp r5, 0
beq exit_loop
stb r4, 0(r3)
addi r3, r3, 1
addi r5, r5, -1
b memset
exit_loop:
blr //прыгнуть на запомненное место возврата
...
//в основном коде осталась лишь передача параметров и прыжок
mr r3, r31
mr r4, r30
mr r5, r29
bl memset //прыгнуть и сохранить место возврата
... //сюда вернется процессор после исполнения функции
насколько я понял, вы оцениваете схожесть кадров видео. Но попиксельная разница - идея не самая оптимальная. Небольшое движение в кадре и усё, огроменная разница.
В своём проекте я использовал фильтрованную разницу гистограмм яркости. Принцип около такого:
- делим кадр на 64*64 блока (это позволит сравнивать даже кадры разного разрешения)
- переводим RGB в яркость (гуглите YUV color space, нужен только Y)
- считаем среднее значение яркости для каждого из блоков (среднее арифметическое годится)
- уря, получили нечто типа гистограммы для конкретного кадра
и теперь находим SAD (сумму абсолютных разниц) для гистограм двух кадров. тупо суммируем модули разниц всех ячеек