içinde sabit boyutlu dizinin en uygun boyutlarını geçirme Giriş olarak matris alan bir işlev yazmak istiyorum. Bu, karmaşık bir projede sıkça görülen düşük seviyeli bir çağrıdır, bu nedenle bu işlevi olabildiğince hızlı hale getirmek, potansiyel olarak ciddi performans sonuçları doğurur. Hız benim için çok önemli olduğu için, bu tür bellek kullanımını kaydedeceğini bildiğim gibi FixedSizeArrays
türlerini kullanıyorum. Ancak çoğu zaman giriş matrisinin belirli özelliklerini bilirim ve bunun en iyi şekilde kullanıldığından emin değilim.Julia
İşte basit bir örnek. İstediğim fonksiyonu mümkün olduğunca hızlı aşağıdaki yapmak düşünün:
using FixedSizeArrays
function foo(input::Mat)
# NB: Mat is the FixedSizeArrays matrix type
return 2 * input
end
Açıkçası bu önemsiz bir örnektir, ama önemli olan bu değil. Önemli olan,
input
matrisinin boyutları hakkında bir şey bildiğim: her zaman yalnızca iki sütun var ve her zaman çalışma zamanında satır sayısını belirtebilirim. Bu, kodumu daha hızlı hale getirmek için derleyiciye iletilebilecek bilgiler gibi görünüyor. Bir şekilde
input
boyutunu tanımlayan bir argüman olarak geçebilir miyim? İşte işe yaramayan bir örnek, ama yapmaya çalıştığım şey hakkında bir fikir vermelisin.
function bar(int::N, thismat::Mat{N,2,Float64})
return 2 * thismat
end
Yapabileceğim bir şey var mı? Yapabilirsem, bu işe yarar mı? Belki FixedSizeArrays zaten yapılabilir her şeyi yapar. Düşüncelerin için teşekkürler!
@squipbar Örnekle ilgili bazı ikinci düşüncelerim vardı. Ekstra işaretçi yokluğu ve iyi olmayan bir şube var (hiç de iyi değil). Bu sıkıntıları önleyen yeni bir göz atın; Bunu bir kıyaslamadım. –
@squipbar Eğer görmediyseniz, Tim Holy'in bu video ve dizilerinden oluşan sunumuna bir göz atın: https://www.youtube.com/watch?v=fl0g9tHeghA –
Her zaman cevaplarınızdan çok şey öğreniyorum. Soruyu soran kişi ben değilim! –