iOS 4'te kullanıma sunulan Accelerate çerçevesini inceliyorum. Özellikle Cblas rutinlerini C'deki lineer cebir kitaplığımda kullanmaya çalıştım. Şimdi yapabilirim. Çok temel rutinler üzerinde performans artışı sağlamak için bu işlevlerin kullanılmasını sağlayın. Özellikle, 4x4 matris çarpımı durumu.iOS 4 4x4 matrisli Cblas'ı hızlandırın
float *mat4SetMat4Mult(const float *m0, const float *m1, float *target) {
target[0] = m0[0] * m1[0] + m0[4] * m1[1] + m0[8] * m1[2] + m0[12] * m1[3];
target[1] = ...etc...
...
target[15] = m0[3] * m1[12] + m0[7] * m1[13] + m0[11] * m1[14] + m0[15] * m1[15];
return target;
}
Cblas eşdeğer fonksiyon çağrısıdır:
cblas_sgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
4, 4, 4, 1.f, m0, 4, m1, 4, 0.f, target, 4);
karşılaştırılması Ben afin veya bir matris homojen özelliklerinin kullanılmasını gelemedi gidersem gideyim, bu rutini (özet) kullanarak oldum Bu ikisi, rastgele sayılarla dolu çok sayıda önceden hesaplanmış matrisler üzerinden çalışarak (her fonksiyon her seferinde aynı girişi alır), Cblas rutini C clock() fonksiyonu ile zamanlandığında yaklaşık 4x daha yavaş çalışır.
Bu bana doğru görünmüyor ve bir yerlerde yanlış bir şey yaptığımı hissediyorum. Cihazın NEON birimini ve SIMD işlevini bir şekilde etkinleştirmek zorunda mıyım? Ya da böyle küçük matrislerle daha iyi performans elde etmeyi ummamalı mıyım? Çok çok takdir
,Bastiaan
Bunun için çok teşekkür ederim. Üç gün boyunca bunu takip ettim, matris işlemlerimin hiçbiri, basit döngülerde olduğu gibi vDSP ile neden hiç hızlı olmadığımı anlamaya çalışıyorum. Sadece bir boyutta büyük olan matrisler için bile geçerli gibi görünüyor (benim durumumda, 4x10.000 matris). –
@RobNapier: meraktan dolayı, bu matriste hangi işlemleri yapıyorsunuz? Ayrıca, hangi donanımı kullanıyorsunuz ve tek veya çift duyarlık mı kullanıyorsunuz? –
Özellikle matris çarpımı. Bézier eğri noktalarını ve normal değerlerini çok hızlı bir şekilde hesaplamak için farklı yollar deniyorum. Optimizasyon yaptığım belirli işlev için http://robnapier.net/blog/equations-matrices-accelerate-607 adresine bakın. Bu sadece akademik bir projedir, bu yüzden bu tür problemlerin etrafında yolumu öğrenebilirim. Blogda vDSP ile açıklanan matrisi seçmeyi denedim, ancak çalışmanın çoğunu el ile yapmak için çok daha hızlı buldum (t^2 ve t^3 hariç, vDSP_vsq/vDSP_vmul ile çok daha hızlı.). Kaynakları öğrenmek için işaretçiler bekliyoruz. –