Görüntü işleme algoritmaları geliştiriyorum (GCC kullanarak, ARMv7'yi hedefleme (Raspberry Pi 2B)).Hızlı arama/8 bitlik bir dizide eşleşen tek baytların yerine, ARM
void ChangeIndex(uint8_t * mask, size_t size, uint8_t oldIndex, uint8_t newIndex)
{
for(size_t i = 0; i < size; ++i)
{
if(mask[i] == oldIndex)
mask[i] = newIndex;
}
}
Ne yazık ki, hedef platformu için düşük performans göstermesi:
Özellikle ben maskeli endeksi değiştirir basit bir algoritma kullanır.Optimize etmenin herhangi bir yolu var mı?
değil daha hızlı olduğunu nasıl hemen açık - Eğer veriler hakkında daha fazla bilgi edinmek eğer hile olabilir - örneğin, içeren hücrelerin bir listesini olabilir 'X' değeri - ancak "isabet" sayısı oldukça düşük olduğunda bu gerçekten yararlıdır - eğer 'mask' eşleşen 'oldIndex'de çoğu girdiye isabet ediyorsanız, o zaman hızlanma olasılığı yoktur. Boyut nedir ve tablonun yüzde kaçının 'oldIndex 'değeri ortalamadadır? –
Hangi derleyici seçeneklerini kullanıyorsunuz? NEON komutlarını ('-mfpu = neon-vfpv4', sanırım) kullanmak için talimat verdiğinizden emin olun, aksi halde NEON olmayan eski CPU'larla uyumlu kod üretiyor olabilirsiniz. – Gilles
Ayrıca, üçlü operatör kullanılarak bir miktar hızlanma yapmalısınız: 'mask [i] = ([i] == oldIndex maskesi)? newIndex: mask [i]; ' – Miki