2012-02-04 11 views
6

मैं जीपीयू (अधिमानतः ओपनसीएल) के लिए एक प्रोग्राम लिखना चाहता हूं और गणना के एक बड़े हिस्से में थोड़ा सरणी (लंबे या int के रूप में पैक) में 1 की संख्या की गणना करना शामिल है।ओपनसीएल: जीपीयू पर 32-बिट और 64-बिट पॉपकंट निर्देश?

तो, आधुनिक सीपीयू पर मैं स्पष्ट रूप से देशी __popcnt निर्देश का उपयोग करता हूं। मैंने इंटरनेट पर कई स्थानों पर पढ़ा है कि आधुनिक जीपीयू, यह निर्देश हार्डवेयर में भी मौजूद है, जो मेरे लिए एक बड़ी गति होगी। (कम से कम 32-बिट के लिए, 64 के बारे में सुनिश्चित नहीं है)

हालांकि, मुझे यह निर्देश कहीं नहीं मिला है। तो:

1) मुझे यह पता लगाना चाहिए कि कौन से जीपीयू के पास यह निर्देश है? (मुझे अभी भी अपना जीपीयू खरीदने की ज़रूरत है, इसलिए यह एक आधुनिक उच्च अंत वाला होगा ... शायद राडेन एचडी 7000 श्रृंखला या एनवीडिया केप्लर)

2) ओपनसीएल (या इसी तरह की जीपीयू भाषा) से इस निर्देश को कैसे कॉल करें ?

उत्तर

5

यह एक्सटेंशन cl_amd_popcnt के रूप में उपलब्ध है। मेरे पास एक राडेन 6870 कार्ड और ऑप्टरन 6128 सीपीयू है, दोनों विस्तार का समर्थन करते हैं।

आपके लिए भी बेहतर समाचार यह है कि ओपनसीएल 1.2 के रूप में, यह अब विस्तार नहीं है। संदर्भ कार्ड पर और spec में निर्देश popcount देखें। एएमडी 7xxx श्रृंखला हार्डवेयर ओसीएल 1.2 संगत है, और मुझे लगता है कि नई एनवीडिया सामग्री भी है।

"टी प्रकार चार, charn, uchar, ucharn, लघु, shortn, ushort, ushortn, पूर्णांक, intn, uint, uintn, लंबे, longn, Ulong, या ulongn, जहां n 2 3 है, है, 4, 8, या 16 "

टी पॉपकाउंट (टी एक्स) एक्स में पॉप्युलेट (गैर-शून्य) बिट्स की संख्या देता है।

http://www.khronos.org/registry/cl/sdk/1.2/docs/OpenCL-1.2-refcard.pdf

http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf

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