पर समन्वय परिवर्तन को ऑफ़लोड करना मेरे पास WinForms का उपयोग करके एक विरासत मानचित्र दर्शक एप्लिकेशन है। यह sloooooow है। (गति स्वीकार्य होती थी, लेकिन Google मानचित्र, Google धरती साथ आया और उपयोगकर्ता खराब हो गए। अब मुझे तेजी से बनाने की अनुमति है :)GPU
सभी स्पष्ट गति सुधार करने के बाद (कैशिंग, समांतर निष्पादन, ड्राइंग नहीं क्या तैयार करने की आवश्यकता नहीं है, आदि), मेरा प्रोफाइलर मुझे दिखाता है कि असली चोकिंग पॉइंट समन्वय परिवर्तन है जब मैप-स्पेस से स्क्रीन-स्पेस में अंक परिवर्तित करते हैं। आम तौर पर रूपांतरण कोड इस तरह दिखता है:
public Point MapToScreen(PointF input)
{
// Note that North is negative!
var result = new Point(
(int)((input.X - this.currentView.X) * this.Scale),
(int)((input.Y - this.currentView.Y) * this.Scale));
return result;
}
वास्तविक कार्यान्वयन जटिल काम है। अक्षांश/अक्षांश पूर्णांक के रूप में दर्शाए जाते हैं। सटीकता को खोने से बचने के लिए, उन्हें 2^20 (~ 1 मिलियन) से गुणा किया जाता है। इस तरह एक समन्वय का प्रतिनिधित्व किया जाता है।
public struct Position
{
public const int PrecisionCompensationPower = 20;
public const int PrecisionCompensationScale = 1048576; // 2^20
public readonly int LatitudeInt; // North is negative!
public readonly int LongitudeInt;
}
यह महत्वपूर्ण है कि संभव पैमाने कारकों को भी स्पष्ट रूप से 2. की शक्ति के लिए बाध्य कर रहे हैं यह एक bitshift साथ गुणन को बदलने के लिए अनुमति देता है। तो असली एल्गोरिथ्म इस तरह दिखता है:
public Point MapToScreen(Position input)
{
Point result = new Point();
result.X = (input.LongitudeInt - this.UpperLeftPosition.LongitudeInt) >>
(Position.PrecisionCompensationPower - this.ZoomLevel);
result.Y = (input.LatitudeInt - this.UpperLeftPosition.LatitudeInt) >>
(Position.PrecisionCompensationPower - this.ZoomLevel);
return result;
}
(UpperLeftPosition नक्शा अंतरिक्ष में स्क्रीन के ऊपरी-बाएं कोने representents।) मैं GPU को यह गणना उतारने का अब सोच रहा हूँ। क्या कोई मुझे एक उदाहरण दिखा सकता है कि यह कैसे करें?
हम .NET4.0 का उपयोग करते हैं, लेकिन कोड को प्राथमिक रूप से विंडोज एक्सपी पर भी चलाना चाहिए। इसके अलावा, जीपीएल के तहत पुस्तकालय हम उपयोग नहीं कर सकते हैं।
+1 सैद्धांतिक सीमाओं को दिखाने के लिए +1। – user256890
बस संख्याओं को परिप्रेक्ष्य में रखने के लिए, एफएलओपी में औसत 2 कोर सीपीयू की अनुमानित गति क्या है? – user256890
यह उस पर निर्भर करता है जिसे आप फ़्लॉप कहते हैं। मान लीजिए कि आपके 2 कोर सीपीयू में 2 गीगाहर्ट्ज की घड़ी की गति है, और एक एफएलओपी 4 घड़ी चक्र लेता है। आप 2 * 2/4 = 1 जीएफएलओपी कर सकते हैं। यह एक बहुत ही कच्चा अनुमान है। –