2011-11-21 10 views
7

क्या सिमड फैशन में सरणी के तत्वों को जोड़ने के लिए वैसे भी "vectorize" है? की तरह कुछ मेंसी # वेक्टरिज्ड ऐरे एडिशन

var a = new[] { 1, 2, 3, 4 }; 
var b = new[] { 1, 2, 3, 4 }; 
var c = new[] { 1, 2, 3, 4 }; 
var d = new[] { 1, 2, 3, 4 }; 

var e = new int[4]; 

for (int i = 0; i < a.Length; i++) 
{ 
    e[i] = a[i] + b[i] + c[i] + d[i]; 
} 

// e should equal { 4, 8, 12, 16 } 

:

उदाहरण के लिए, मैं बारी चाहते हैं

var e = VectorAdd(a,b,c,d); 

मैं कुछ सी ++/XNA पुस्तकालयों में मौजूद हो सकता है पता है, लेकिन मैं अगर पता नहीं था हमारे पास मानक नेट नेट पुस्तकालयों में है।

धन्यवाद!

+0

मुझे लगता है कि आपके द्वारा लिखे गए जैसे साधारण लूप एक अनुकूलन कंपाइलर द्वारा वेक्टरकृत हैं। – Tudor

उत्तर

13

आप Mono.Simd को देखने के लिए चाहते हैं:

http://tirania.org/blog/archive/2008/Nov-03.html

यह सी # में SIMD का समर्थन करता है

using Mono.Simd; 


//... 
var a = new Vector4f(1, 2, 3, 4); 
var b = new Vector4f(1, 2, 3, 4); 
var c = new Vector4f(1, 2, 3, 4); 
var d = new Vector4f(1, 2, 3, 4); 

var e = a+b+c+d; 
+0

एफवाईआई आप असेंबली का उपयोग कर सकते हैं लेकिन यह केवल सिम निर्देशों का उपयोग करेगा यदि यह मोनो सीएलआर के भीतर चल रहा है जहां उनके लिए समर्थन है। – redcalx

2

मुझे लगता है कि यह सब क्या कर रहे हो पर निर्भर करता है, लेकिन अगर आप कर रहे हैं वेक्टरिंग वेक्टर रकम के बारे में चिंतित, आप Math.NET जैसे लाइब्रेरी को देखना चाहते हैं जो अनुकूलित संख्यात्मक गणना प्रदान करता है।

अपनी वेबसाइट से:

यह माइक्रोसॉफ्ट नेट 4.0 लक्षित करता है, मोनो और सिल्वरलाइट 4, और एक विशुद्ध रूप से प्रबंधित कार्यान्वयन के अलावा भी देशी हार्डवेयर अनुकूलन (MKL, एटलस) का समर्थन करेंगे।

5

मोनो अपेक्षाकृत सभ्य सिम एपीआई (जैसा कि उल्लेख है) प्रदान करता है लेकिन यदि मोनो कोई विकल्प नहीं है तो मैं शायद भारी उठाने के लिए सी ++/सीएलआई इंटरफ़ेस लाइब्रेरी लिखूंगा। सी # अधिकांश समस्या सेटों के लिए बहुत अच्छी तरह से काम करता है लेकिन यदि आप उच्च प्रदर्शन कोड में शामिल होना शुरू करते हैं तो ऐसी भाषा में जाना सर्वोत्तम होता है जो आपको वास्तव में प्रदर्शन के साथ गंदे होने का नियंत्रण देता है।

यहां काम पर हम सी #+ से सी ++ में लिखे गए छवि प्रसंस्करण दिनचर्या को कॉल करने के लिए पी/इनवॉक का उपयोग करते हैं। पी/Invoke कुछ ओवरहेड है, लेकिन यदि आप बहुत कम कॉल करते हैं और देशी पक्ष पर बहुत अधिक प्रसंस्करण करते हैं तो यह इसके लायक हो सकता है।

+0

दूसरा सर्वश्रेष्ठ, +1 – sehe

संबंधित मुद्दे