2010-07-26 18 views
5

ARM Cortex-A8 tabanlı bir işlemci kullanıyorum ve 3x3 Matris ters işlemlerini hesapladığım birçok yer var.3x3 Matrix tersi SIMD talimatlarını kullanarak mümkün mü?

Cortex-a8 işlemci bir NEON SIMD işlemciye sahip olduğundan, 3x3 matris tersi için bu birlikte işlemciyi kullanmayı düşünürdüm, birkaç adet 4 x 4 uygulama (Intel SSE ve freevec) gördüm ancak hiçbiri 3x3 matrisini görmedim ters işlem SIMD komutlarını kullanarak gerçekleştirildi. Freevec tarafından kullanılan yöntem, 4x4 matrisini 4, 2x2 matrislere bölerek, daha sonra her birinde minik işlemleri gerçekleştirerek 4x4 matrisinin tersini elde etmek için sonuçları yeniden birleştirir. 3x3 matrislerle böyle bir fırsat görmüyorum.

SIMD yönergelerini kullanarak 3x3 matris inversiyonunu nasıl gerçekleştireceğine dair bir fikriniz varsa, bana çok yardımcı olacak mı?

Selamlar Vikram

+3

İlgi alanı belki de: "Matrisin tersine çevrilmesi için neredeyse hiç iyi bir neden yok." http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/ – AakashM

+0

Yorumunuzu ciddiye alın ve algoritmamdan matris inversiyonundan nasıl kurtulabileceğimi görün. – HaggarTheHorrible

+3

@AakashM Bu makale alakalı değil. John D. Cook'un matrislerle ilgili makalesi, bilimsel hesaplamada kullanılan büyük matrislerle ilgilidir. Bu soru, bilgisayar grafikleri ve fizik simülasyonlarında yaygın olarak kullanılan küçük matrislerle ilgilidir. Küçük matrisleri tersine çevirmek çok faydalı (ve oldukça hızlı). – exDM69

cevap

5

bir 4 satır ve 4. sütun ekleyerek, hem (0 0 0 1) bulunması ile 4x4 matris 3x3 matris genişletebilir. Tersine çevirmeden sonra, sol üst 3x3 alt matrisinin gerekli tersi olacaktır.

+0

Bu iyi bir fikir. Bir deneyin, teşekkürler – HaggarTheHorrible

1

wikipedia'da açıklanan 3x3 matrisler için analitik standart sürümünü vectorize edebilirsiniz. Bu zor olmamalı.

+0

Bu versiyonda, determinantta kullanılan 3 farklılığın diğer 9 kısımda da yeniden kullanıldığına dikkat edin. – phkahler