के साथ आंशिक मूल्यांकन/विशेषज्ञता सी/सी ++ के लिए आंशिक) संकलन-समय मूल्यांकन (सी ++ में टेम्पलेट पैरामीटर के साथ नहीं) में दिलचस्पी है।एलएलवीएम-जीसीसी या जीसीसी
double mypower(double x, int n) {
int i;
double ret = x;
for (i = 1; i < n; i++) {
ret *= x;
}
return ret;
}
तो फिर तुम फोन इस समारोह कहीं कोड में साथ: निम्नलिखित मामले पर विचार करने देता है (से [1] ले जाया)
mypower(x,3); // y varies all the time,
फिर संकलक इस (जैसे पाश unrolling) का अनुकूलन कर सकते हैं। कुछ अक्सर उपयोग किए जाने वाले फ़ंक्शन का उपयोग उस ऑप्टिमाइज़ेशन से वास्तव में लाभ हो सकता है (मैन्युअल रूप से विशेष फ़ंक्शन बनाने के द्वारा परीक्षण किया जाता है)। प्रेजेंटेशन [1] एक प्रक्रिया को descibes जहां समारोह की खोज की जाती है और समारोह के एक विशेष संस्करण द्वारा प्रतिस्थापित किया जाता है। ऐसा लगता है कि काम करता है। लेकिन यह बहुत सार्वभौमिक प्रतीत नहीं होता है, कोड को उन कार्यों के लिए लिखा जाना चाहिए जिन्हें प्रतिस्थापित किया जाना चाहिए।
प्रस्तुति 2008 से प्रतीत होती है, मुझे इस स्रोत की तुलना में पर्याप्त जानकारी नहीं मिली। तब से कुछ भी सुधार हुआ है? मैं किसी प्रकार का automatism पसंद करूंगा, जो संभवत: विशेषता वाक्यविन्यास द्वारा नियंत्रित सभी कार्यों के लिए समान होता है (उदा। __attribute__(peval)
...)। इसके अलावा मैं ऑब्जेक्ट उन्मुख कोड के लिए काम करना चाहता हूं, विभिन्न वस्तुओं के लिए विशेष कक्षाएं बनाना ([2] ऐसा लगता है कि यह संभव नहीं है)।
इसके अतिरिक्त, मैं यह विशेषज्ञता न केवल कोड में पाए गए स्थिरांक के लिए काम करना चाहूंगा। मैं LLVM आईआर (बाईटकोड) को संकलित एक कार्यक्रम के बारे में सोच रहा हूँ निम्नलिखित कर सकता है:
, एक दुभाषिया में एक आरंभीकरण चरण के दौरान programm चल रहा है कि प्रारंभ चरण के दौरान कार्यक्रम के लिए फ़ाइल से कुछ विन्यास पढ़ सकते हैं। प्रारंभ करने के बाद दुभाषिया बंद कर दिया गया है।
कुछ चर (सदस्य चर सहित) उस बिंदु से तय किए गए हैं। इन चरों को निकालें (उदा। संकलन के दौरान विशेषता द्वारा चिह्नित)।
विशिष्ट कार्य और कक्षाएं बनाएं। इन्हें बाइटकोड में क्लोन करें।
देशी मशीन कोड बनाने के लिए जेआईटी चलाएं।
यह बहुत कुछ है जिसे मैं पूछता हूं और केवल कुछ गणना गहन कार्यक्रम इस तरह के अनुकूलन से लाभान्वित होंगे। लेकिन कुछ लोगों को उस पर काम करना चाहिए। मैं शायद Google को खिलाने के लिए सही खोज शब्द नहीं जानता हूं।
नोट: कृपया गैर-प्रकार के पैरामीटर या मैन्युअल विशेषज्ञता वाले टेम्पलेट वर्गों का सुझाव न दें, मैं पहले से ही ऐसा करता हूं। मैं बस मेरे लिए काम कर संकलक पसंद करेंगे।
लिंक:
[1] Presentation how to partial evaluate in LLVM
[2] Forum message about partial evaluation
कुछ हद तक संबंधित: http://stackoverflow.com/questions/2940367/what-is-more- कुशल-using-pow-to-square-or-just-multiply-it-with-itself/2940800#2940800 –