2013-01-15 15 views
13

MArrays için sorting library üzerinde çalışıyorum. Hız önemlidir, bu yüzden mümkün olduğunca optimize etmek istiyorum.Hız için MArray işlevlerini doğru şekilde nasıl optimize edebilirim?

Şu anda, yalnızca INLINE sıralama işlevleri. Bu, optimize edilmemiş kodla karşılaştırıldığında kodu 10 kattan fazla hızlandırır. Ancak, işlevler birkaç yerde kullanılırsa kod boyutunu kolayca kullanabilir ve derlemeyi yavaşlatır.

Diğer tek alternatif, MArray'ın tüm mevcut örnekleri için işlevleri ÖZELLEŞTİRMEK görünüyor. Bu, sonuçta ortaya çıkan kodu da genişletir, ancak işlevlerin kaç kez kullanıldığına bağlı olmayan sabit bir faktördür. Soru şu, MArray'ın yeni örneklerinin ortaya çıkması mümkün mü? Ya da MArray çok özel ve Haskell'in içlerine bağlı, böylece başka bir modül tarafından yeni örneklerin tanımlanamayacağından emin olabilir miyim?

+0

INLINABLE pragma kullanmak istediğiniz gibi geliyor: http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/pragmas.html#inlinable-pragma –

+0

@JohnL Bunu düşündüm Ancak, korkarım ki, fonksiyonlar muhtemelen GHC'nin kararı ile belirtilemeyecek kadar büyük olduğundan, sadece ek SPECIALIZE pragmas'ları ile çalışacaktır. Ancak bu kombinasyon makul bir çözüm olabilir - tüm mevcut örnekler için uzmanlaşır ve kullanıcıları bildirdikleri yeni herhangi bir MArray örneğini uzmanlaşmaya yönlendirir. –

+0

Performans gerçekten kritikse, bunun yerine vektör veya repa kullanmayı düşünün. –

cevap

İlgili konular