Я пытаюсь выяснить, может ли и какой конкретный существующий код быть распараллелен для использования в блоке ARON Cortex-A9 NEON SIMD. Это код:Возможно ли распараллелить фильтр для ARM NEON?
for(int i=0; i < 11; i++)
{
f4UF1 *= F[i];
A[i][2] = A[i][1];
A[i][1] = A[i][0];
A[i][0] = f4UF1;
B[i][2] = B[i][1];
B[i][1] = B[i][0];
C[i] = 0;
C[i] += D[i][0] * A[i][0];
C[i] += D[i][1] * A[i][1];
C[i] += D[i][2] * A[i][2];
C[i] -= E[i][1] * B[i][1];
C[i] -= E[i][2] * B[i][2];
B[i][0] = C[i]/E[i][0];
f4UF1 = B[i][0];
}
Я посмотрел на код для совсем немного, и я почти уверен, что она не может быть распараллеливание эффективно, но я думал, я мог бы дать ему попробовать задать здесь. Я не ожидаю готового кода, просто идеи о том, как это сделать. Спасибо :)
какие типы данных? вы должны вставить что-то, что может удовлетворить компилятор. – auselen
Компиляция и рассмотрение результатов могут дать некоторое представление. – marko
Вы можете сдвигать элементы с помощью инструкции vext. Вы также можете умножить/добавить. Похоже, вы можете улучшить ситуацию на несколько циклов, если вы напишете ее в NEON. Единственная проблема - это разрыв, который нужно будет размножить. – BitBank