2016-01-20 47 views
14

System.Numerics.Vector<T>'u kullanan bazı C# kodlarını çalıştırıyorum ancak SIMD intrinsics'in tam anlamıyla faydalanamayacağımı söyleyebilirim. Güncelleştirme 1 ile Visual Studio Topluluğu 2015 kullanıyorum ve clrjit.dll v4.6.1063.1 olduğunu.RyuJIT, SIMD intrinsics'ini tam olarak kullanmıyor

AVX komut seti uzantılarını uygulayan bir Intel Core i5-3337U Processor üzerinde çalışıyorum. Bu nedenle, bir SIM kartın çoğunu 256 bitlik bir kayıt üzerinde çalıştırabileceğimi düşünüyorum. Örneğin, sökme işlemi vmovups, vmovupd, vaddups, vb ... ve Vector<float>.Count 8, Vector<double>.Count 4 olmalıdır, vb. Gibi yönergeleri içermelidir ... Ama görmediğim şey bu değil.

WriteLine($"{Vector<byte>.Count} bytes per operation"); 
WriteLine($"{Vector<float>.Count} floats per operation"); 
WriteLine($"{Vector<int>.Count} ints per operation"); 
WriteLine($"{Vector<double>.Count} doubles per operation"); 

üretir:

yerine benim sökme movups, movupd, addups, vb ... ve şu kodu gibi talimatlar içeren

16 bytes per operation 
4 floats per operation 
4 ints per operation 
2 doubles per operation 

Nerede yanlış gidiyorum? Tüm proje ayarlarını vb. Görmek için proje here kullanılabilir.

+1

RyuJIT, GitHub'da açık kaynak koduna bakıp doğrudan geliştiricilerle tartışabilirsiniz. –

cevap

11

İşlemciniz biraz tarihli, mikro mimarisi Ivy Bridge'dir. Sandy Köprüsü'nün "tokası", bir özellik mimari değişiklikler olmadan daralıyor. Sizin düşmanı RyuJIT, located in ee_il_dll.cpp içinde bu kod biraz, CILJit :: getMaxIntrinsicSIMDVectorLength() işlevi:

if (((cpuCompileFlags & CORJIT_FLG_PREJIT) == 0) && 
    ((cpuCompileFlags & CORJIT_FLG_FEATURE_SIMD) != 0) && 
    ((cpuCompileFlags & CORJIT_FLG_USE_AVX2) != 0)) 
{ 
    static ConfigDWORD fEnableAVX; 
    if (fEnableAVX.val(CLRConfig::EXTERNAL_EnableAVX) != 0) 
    { 
     return 32; 
    } 
} 

Not CORJIT_FLG_USE_AVX2 kullanımı. İşlemciniz henüz AVX2'yi desteklemiyor, bu eklenti Haswell'de kullanıma sunuldu. Ivy Köprüsü'nden sonraki bir sonraki mikro mimari, bir "kene". Çok güzel işlemci btw, this one gibi keşifler büyük bir wow faktörü var.

Bununla ilgili hiçbir şey yapamazsınız, ancak alışverişe çıkabilirsiniz. İlham için, this post'da ürettiği kod türüne bakabilirsiniz.

+0

Aslında AVX desteğini uygulamaya çalışabilir ve bir yama gönderebilir. Bu gerçekçi bir seçenek değil. Veya orada bir bilet açabilirsiniz - belki de AVX2 kullanımı tamamen kasıtlı değildi? Ama genellikle - evet. Alışveriş en iyi seçenek. – TomTom