सारांश:
NVIDIA ग्राफिक्स कार्ड पर JPEG छवियों को संपीड़ित करने के लिए एक फास्ट FVJPEG एनकोडर बनाया गया। एल्गोरिथ्म को समानांतर करके, इसके कार्यान्वयन और अनुकूलन को CUDA तकनीक का उपयोग करके महत्वपूर्ण त्वरण प्राप्त किया गया था। संपीड़न गति के संदर्भ में, FVJPEG एनकोडर बेसलाइन JPEG एल्गोरिथ्म का उपयोग करके छवि संपीड़न के लिए वर्तमान में मौजूद सभी सॉफ़्टवेयर और हार्डवेयर समाधानों से बेहतर है।हानिपूर्ण छवि संपीड़न एल्गोरिदम की तुलना करते समय, संपीड़न की डिग्री और परिणामस्वरूप छवि की गुणवत्ता पर लगभग हमेशा चर्चा की जाती है, लेकिन संपीड़न का समय किसी कारण के लिए एक माध्यमिक संकेतक माना जाता है। जाहिरा तौर पर, अधिकांश अनुप्रयोगों के लिए यह दृष्टिकोण मान्य है, लेकिन ऐसी परिस्थितियां हैं जहां संपीड़न समय बहुत महत्वपूर्ण हो सकता है। उदाहरण के लिए, छवियों के बड़े सरणियों को संपीड़ित करते समय या जब भारी मात्रा में डेटा बनाने में सक्षम उपकरण के साथ काम करना होता है जिसमें वास्तविक समय संपीड़न की आवश्यकता होती है। उच्च गति वाले कैमरों से छवियों की एक श्रृंखला को संपीड़ित करते समय यह स्थिति है। एक सामान्य फास्ट कैमरा से डेटा स्ट्रीम 625 एमबी प्रति सेकंड (रिज़ॉल्यूशन 1280 x 1024, 8 बिट्स, 500 फ्रेम प्रति सेकंड) और उच्चतर तक पहुंच सकता है। हाई-स्पीड वीडियो कैमरे हैं जो पीसीआई-एक्सप्रेस 2.0 एक्स 8 फ्रेम हड़पने वाले के माध्यम से डेटा को कंप्यूटर पर रैम को 2.4 जीबी प्रति सेकंड की गति से ऑनलाइन लिखते हैं। ऐसे प्रवाह के साथ काम करने के लिए, डेटा प्रोसेसिंग एल्गोरिदम को समानांतर करने की आवश्यकता पर भी चर्चा करने की आवश्यकता नहीं है - यह परिभाषा के अनुसार होना चाहिए। इसलिए, एक तेज़ संपीड़न एल्गोरिथ्म का चयन करने के लिए, निम्न मापदंड तैयार किए गए थे:
- एन्कोडिंग और डिकोडिंग दोनों के लिए एल्गोरिथ्म को समानांतर करने की क्षमता
- स्वीकार्य गुणवत्ता के साथ नुकसान के साथ छवियों को 10-20 बार संपीड़ित करने की क्षमता
- एल्गोरिथ्म की कम्प्यूटेशनल जटिलता यथासंभव छोटी होनी चाहिए
- उप-कार्य की अधिकतम संभव संख्या में कार्य को विभाजित करना
- एकल डेटा प्रोसेसिंग स्ट्रीम के लिए फास्ट मेमोरी साइज की न्यूनतम आवश्यकताएं
JPEG एल्गोरिथ्म पूरी तरह से इन आवश्यकताओं का अनुपालन करता है। यह संभव है कि अन्य हानिरहित संपीड़न एल्गोरिदम हैं जो इन स्थितियों को संतुष्ट करते हैं, लेकिन यहां हम केवल जेपीईजी विकल्प पर विचार करेंगे।
पहले, आइए बेसलाइन जेपीईजी एल्गोरिदम का उपयोग करते हुए हानिरहित छवि संपीड़न की गति (प्रदर्शन) के लिए मानदंड की जांच करें, बशर्ते कि छवि पहले से ही रैम में भरी हुई है और आपको केवल संपीड़न करने की आवश्यकता है। जब वे स्पष्ट रूप से कमजोर प्रतियोगियों के साथ प्राप्त समाधान की तुलना करते हैं, तो हम व्यापक पद्धति का पालन नहीं करेंगे, इसलिए, प्रतिद्वंद्वियों के रूप में हम आज मल्टी-कोर सीपीयू के लिए सबसे तेज़ वाणिज्यिक समाधान मानते हैं:
Accusoft Pegasus PICTools फोटो JPEG एनकोडर (प्रति सेकंड 150-250 एमबी के प्रदर्शन के साथ संपीड़न, 8 बिट, संपीड़न अनुपात ~ 50%)
Intel JPEG एनकोडर IPP-7.0 : uic_transcoder_con.exe, संस्करण 7.0 बिल्ड 205.85, [7.7.1058.205], नाम ippjy8-7.0.dll +, दिनांक 27 नवंबर 2011, 64-बिट, कोई आधिकारिक संपीड़न दर डेटा, परीक्षण के परिणाम नहीं नीचे दिए गए हैं)
उच्च गति वाले वीडियो कैमरों के साथ काम करने के लिए
नॉरपिक्स जेपीईजी एनकोडर (200-250 एमबी प्रति सेकंड के प्रदर्शन के साथ संपीड़न, 8 बिट्स, अज्ञात संपीड़न अनुपात)
दुर्भाग्य से, इस डेटा को सत्यापित करने का कोई तरीका नहीं है, केवल आईपीपी -7 एनकोडर को छोड़कर, जो खुद एन्कोडिंग समय की रिपोर्ट करता है, इसलिए हम बस विश्वास करते हैं कि क्या लिखा है। अधिक विस्तृत विश्लेषण के लिए, प्रसंस्करण एल्गोरिथ्म के प्रत्येक चरण के प्रदर्शन पर भी कोई डेटा नहीं है, इसलिए आपको केवल एक ही संपीड़न मापदंडों के साथ तुलना को सामान्य प्रदर्शन संकेतकों तक सीमित करना होगा। काकाडू JPEG कोडेक नहीं मिल सका, क्योंकि अब यह कंपनी केवल JPEG2000 कोडेक जारी करती है, और libjpeg_simd-6b और libjpeg-Turbo की संपीड़न गति बहुत कम थी।
चूंकि हम निश्चित मात्रा में ठहराव और हफ़मैन तालिकाओं के साथ बेसलाइन जेपीईजी मानक को लागू करने के बारे में बात कर रहे हैं, संपीड़ित छवि की गुणवत्ता और संपीड़न अनुपात विशिष्ट रूप से संपीड़न मापदंडों द्वारा निर्धारित किए जाते हैं, इसलिए पीएसएनआर माप और दृश्य गुणवत्ता मूल्यांकन की कोई आवश्यकता नहीं है। हालांकि, PSNR माप और दृश्य गुणवत्ता मूल्यांकन सभी परीक्षणों के लिए किए गए थे।
मल्टी-कोर सीपीयू पर सर्वश्रेष्ठ वाणिज्यिक समाधान के परिणाम प्रभावशाली हैं, इसलिए उन्हें पार करने की कोशिश करना बहुत दिलचस्प है। ऐसा करने के लिए, NVIDIA CUDA तकनीक का उपयोग करके बेसलाइन JPEG एल्गोरिथम का उपयोग करके वीडियो कार्ड पर छवियों को संपीड़ित करने के विकल्प पर विचार करें। चूंकि कार्य अधिकतम प्रदर्शन प्राप्त करना है, तो हार्डवेयर उपयुक्त होना चाहिए। NVIDIA GeForce GTX 580 एक अच्छा फिट है।
अनुसंधान के इस क्षेत्र में, कई परियोजनाओं और वैज्ञानिक पत्रों की खोज की गई है जिसमें कहा गया है कि एनपीईजी एल्गोरिथ्म को एंट्रॉपी कोडिंग के चरण के कारण पूरी तरह से समानांतर नहीं किया जा सकता है। इसलिए, हाइब्रिड समाधान विदेशों में बनाए गए थे, जब असतत कोसाइन रूपांतरण वीडियो कार्ड पर किया गया था, और शेष गणना सीपीयू पर की गई थी। इस प्रकार, केवल एक चरण त्वरित किया गया था, जाहिर है कि GPU के लिए उपयुक्त है। नतीजतन, हमने कोडिंग गति में थोड़ी वृद्धि हासिल की, लेकिन परिणाम सीपीयू पर सर्वश्रेष्ठ बहु-थ्रेडेड समाधान के साथ संपीड़न दर में प्रतिस्पर्धा नहीं कर सके। दुर्भाग्य से, हम NVIDIA या एटीआई वीडियो कार्ड के आधार पर उत्पादक जेपीईजी एनकोडर के बारे में जानकारी प्राप्त करने में विफल रहे।
उस समस्या पर विचार करें जिसमें मूल असम्पीडित डेटा डेटा कंप्यूटर की रैम में स्थित है और जेपीईजी में संपीड़ित होना चाहिए। वीडियो कार्ड पर बेसलाइन जेपीईजी एल्गोरिथ्म के कार्यान्वयन में निम्नलिखित चरण शामिल हैं:
- RAM से वीडियो कार्ड में डेटा डाउनलोड करना (होस्ट-टू-डिवाइस ट्रांसफर)
- RGB-> YCbCr रूपांतरण (8-बिट छवियों के लिए आवश्यक नहीं)
- 8x8 ब्लॉक में एक छवि को विभाजित करना
- प्रत्येक पिक्सेल के लिए ऑफसेट (128 घटाना)
- प्रत्येक ब्लॉक के लिए असतत कोसाइन ट्रांस्फ़ॉर्म (DCT)
- प्रत्येक ब्लॉक के लिए परिमाणीकरण
- प्रत्येक ब्लॉक के लिए पुनर्व्यवस्थापन (जिग-ज़ैग)
- प्रत्येक ब्लॉक से डीसी के लिए डेल्टा कोडिंग (डीपीसीएम)
- प्रत्येक इकाई से एसी के लिए श्रृंखला एन्कोडिंग (आरएलई)
- Huffman प्रत्येक ब्लॉक से AC के लिए कोडिंग
- ब्लॉक समूहों के लिए RSTn पुनरारंभ मार्कर सेट करना
- एक आउटपुट फ़ाइल बनाना: संपीड़ित ब्लॉकों से डेटा gluing, एक JFIF हेडर जोड़ना
- RAM में वीडियो कार्ड से JPEG फ़ाइलों को लोड करना (डिवाइस-टू-होस्ट ट्रांसफर)
यह पूरी योजना CUDA पर लागू की गई थी। मानक जेपीईजी एल्गोरिथ्म के मुख्य विचारों में से एक छवि को असतत कोसाइन रूपांतरण का उपयोग करके बाद के स्वतंत्र डेटा प्रसंस्करण के साथ 8x8 ब्लॉकों में विभाजित करना है, जो अनिवार्य रूप से एक समानांतर एल्गोरिथ्म योजना है। असतत कोसाइन ट्रांसफ़ॉर्मेशन का समानांतरकरण पहले से ही ज्ञात था और प्रदर्शन के संदर्भ में प्राप्त परिणाम सीपीयू के साथ सीपीयू के साथ बहुत बेहतर थे। डीसी गुणांक के डेल्टा कोडिंग चरण (DPCM) को भी समानांतर किया जा सकता है। सीरीज कोडिंग (RLE) और हफमैन कोडिंग को प्रत्येक 8x8 ब्लॉक के डेटा के लिए स्वतंत्र रूप से किया जाता है, इसलिए वे समानांतर भी होते हैं। अंत में, आपको प्रत्येक ब्लॉक से आउटपुट फाइल तक संपीड़ित डेटा लिखना होगा, उससे एक जेपीईजी इमेज बनानी होगी और फाइल को कंप्यूटर की रैम में भेजना होगा। तो यह तर्क दिया जा सकता है कि लगभग पूरी जेपीईजी एन्कोडिंग योजना सफलतापूर्वक समानांतर है और यह एल्गोरिथ्म पूरी तरह से GPU पर लागू किया जा सकता है।
प्रश्न डिकोडिंग के कार्यान्वयन का रहता है। इसके लिए, जेपीईजी मानक में मार्करों को शुरू में प्रदान किया गया था, जो संपीड़ित छवि में एक मनमाना जगह से डिकोड करना संभव बनाता है, और न केवल क्रमिक रूप से। दुर्भाग्य से, सीपीयू पर अधिकांश कार्यान्वयन में जेपीईजी संपीड़न एल्गोरिथ्म में ये मार्कर नहीं होते हैं, इसलिए, ऐसी स्थितियों में, डिकोडिंग का पहला चरण क्रमिक रूप से किया जाता है और "एलियन" छवियों को अपेक्षाकृत धीरे-धीरे डिकोड किया जाएगा (एन्कोडिंग करते समय फोटोशॉप इन मार्करों को डालता है)। यदि एन्कोडिंग, मार्करों को सेट किया गया था, तो डिकोडिंग शुरू होने से पहले, सभी स्थापित मार्करों की त्वरित खोज की जाती है और उसके बाद समानांतर में डिकोडिंग प्रदर्शन करना संभव हो जाता है। ऊपर वर्णित संपीड़न योजना में, मार्करों को 8x8 ब्लॉकों की एक निश्चित संख्या के बाद स्थापित किया जाता है, और परिणामस्वरूप, डिकोडिंग प्रक्रिया भी समानांतर हो जाती है। हालाँकि, डिकोडिंग मुद्दे इस लेख के दायरे से परे हैं।
कार्यक्रम के परीक्षण के लिए निम्नलिखित मानक शर्तों का चयन किया गया था:
- 8-बिट परीक्षण छवियों
- संपीड़न अनुपात 50-100%
- क्षैतिज और ऊर्ध्वाधर छवि आकार 8 के एक से अधिक होना चाहिए
- स्रोत फ़ाइल का आकार 64 एमबी से अधिक नहीं है
परीक्षण के लिए, निम्नलिखित कंप्यूटर कॉन्फ़िगरेशन का उपयोग किया गया था:
- ASUS P6T डिलक्स V2 LGA1366, X58, ATX कोर i7 920, 2.67 GHz, DDR-III 6 जीबी।
- गणना के लिए वीडियो कार्ड: GeForce GT 240 (cc = 1.2, 96 कोर) या GeForce GTX 580 (cc = 2.0, 512 कोर)।
- ऑपरेटिंग सिस्टम विंडोज -7, 64-बिट, सीयूडीए 4.1, ड्राइवर 286.19
IPP (uic_test_image.bmp), और कैथेड्रल .bmp और big_building.bmp से टेस्ट 8-बिट छवियों को आम तौर पर स्वीकार किया गया (lenna.bmp, नावों। Bmp), और कैथेड्रल .bmp और big_building.bmp लिया जाता है ।
प्रत्येक छवि के लिए तालिका की निचली रेखा परिमाणीकरण और हफमैन तालिकाओं के साथ संपीड़न के दौरान संपीड़न अनुपात और संपीड़न अनुपात (कितनी बार फ़ाइल आकार कम हो जाती है) के बीच पत्राचार को दर्शाती है, जिसे बेसलाइन जेपीईजी में डिफ़ॉल्ट रूप से स्वीकार किया जाता है।

विंडोज पर कुल FVJPEG कोडेक रनटाइम को QueryPerformanceCounter () फ़ंक्शन का उपयोग करके मापा गया था। वीडियो कार्ड पर व्यक्तिगत कार्यों का निष्पादन समय NVIDIA के प्रोफाइलर का उपयोग करके मापा गया था। एल्गोरिदम के प्रत्येक चरण की संपीड़न गति के विस्तृत विश्लेषण के लिए प्रोइलर परिणाम आवश्यक हैं, जो मुख्य रूप से डेवलपर्स के लिए रुचि का है। सभी परीक्षणों में दोहराव की संख्या (समय मापने की सटीकता बढ़ाने के लिए कई कार्यक्रमों का एक विकल्प) एकता के बराबर है, क्योंकि एक ही डेटा पर गणना को दोहराने से कोई व्यावहारिक अर्थ नहीं बनता है। इस प्रकार, मुख्य कार्य एन्कोडर के वास्तविक ऑपरेटिंग मोड और संपीड़न प्रदर्शन के सीमित मूल्यों का अध्ययन करना था। छोटी छवियों के लिए, कोडिंग गति में 10-20% का प्रसार होता है, इसलिए परीक्षणों की एक श्रृंखला में उच्चतम परिणाम लिया गया था। परीक्षणों में NVIDIA GeForce GT 240 और GeForce GTX 580 ग्राफिक्स कार्ड के साथ FVJPEG एनकोडर शामिल था, साथ ही कोर i7 920 पर IPP-7.0 से JPEG एनकोडर भी था।
तालिका 2 में मेगाबाइट्स में NVIDIA GeForce GT 240 वीडियो कार्ड के लिए JPEG संपीड़न दर के लिए माप परिणाम दिखाता है, जो संपीड़न अनुपात के आधार पर विभिन्न 8-बिट छवियों के लिए है:

तालिका 3 प्रति सेकंड मेगाबाइट में NVIDIA GeForce GTX 580 ग्राफिक्स कार्ड के लिए JPEG में संपीड़न गति को मापने के परिणाम दिखाता है:

यह बहुत महत्वपूर्ण है कि संपीड़न गति को मापते समय, वीडियो कार्ड और इसके विपरीत डेटा को कॉपी करने के लिए समय लिया गया था। तथ्य यह है कि एक वीडियो कार्ड की मेमोरी में डेटा को कॉपी करने में लगने वाला समय आमतौर पर एक GPU पर JPEG में कम्प्रेशन एल्गोरिथ्म को लागू करते समय सबसे लंबे ऑपरेशन में से एक होता है। यदि हम वीडियो कार्ड की मेमोरी में डेटा को लोड किए बिना कोडिंग प्रदर्शन का मूल्यांकन करते हैं, अर्थात। यदि हम नुकसान के साथ छवियों को संपीड़ित करते समय गणनाओं के प्रदर्शन को मापना चाहते हैं, तो पर्याप्त रूप से बड़ी छवियों के लिए और 50% के संपीड़न अनुपात में, हम GeForce GT9 580 के लिए लगभग 10 GB प्रति सेकंड या उससे अधिक की JPEG में एक संपीड़न गति प्राप्त करते हैं। यह परिणाम समानांतर कंप्यूटिंग की उच्चतम दक्षता का एक उत्कृष्ट चित्रण है। शक्तिशाली ग्राफिक्स कार्ड पर।
Intel IPP-7.0 (अद्यतन 6) से एनकोडर की तुलना के लिए, छवियों का एक ही सेट और उसी संपीड़न दरों का उपयोग NVIDIA वीडियो कार्ड के लिए परीक्षणों में किया गया था। कमांड लाइन इस तरह दिखती है: uic_transcoder_con.exe -otest.jpg -ilenna.bmp -t1 -q50 -n8, जिसका अर्थ है कि छवि lenna.bmp को संपीड़ित करना, एक नया परीक्षण test.jpg बनाना, समयरेखा मापने जेपीईजी एल्गोरिथ्म (-jb) का उपयोग करना। जब 8 थ्रेड्स (-N8) के लिए समानांतर में (सटीकता -t1), 50% (-q50) के संपीड़न अनुपात के साथ कार्यक्रम निष्पादन। संपीड़न प्रक्रिया को दोहराने के लिए -m ऑपरेटिंग मोड का उपयोग नहीं किया गया था, क्योंकि एक ही छवि के पुन: संपीड़न के लिए कोई व्यावहारिक कार्य नहीं हैं।
तालिका 4 IPP-7.0 (मिलीसेकंड में प्रति सेकंड संपीड़न दर / छवि संपीड़न समय) से JPEG एनकोडर के प्रदर्शन के लिए परिणाम दिखाता है:

IPP-7.0 से परीक्षण छवि का उपयोग करते समय और समान संपीड़न मापदंडों के साथ (uic_test_image.bmp, 1280 x 960, 8 बिट्स, संपीड़न अनुपात 50% है, जो 8.1 संपीड़न से मेल खाती है), 2.25 प्रदर्शन GeForce GTX 580 पर प्राप्त होता है GB प्रति सेकंड, जो कि एक बेहतर है (3 गुना MB से बेहतर 6.7 गुना) प्रति सेकंड एक कोर i7 920 CPU पर जब IPP-7.0 से JPEG एनकोडर के लिए 8 थ्रेड्स समानताएं। IPP-7.0 एनकोडर का परिणामी प्रदर्शन इसके बजाय कमजोर GeForce GT 240 ग्राफिक्स कार्ड की तुलना में दो गुना कम है, जो समान मापदंडों के साथ 680 एमबी प्रति सेकंड की संपीड़न गति देता है।
चित्र 1 में अलग-अलग मानों के लिए GeForce GT 240, GeForce GTX 580 (FVJPEG एनकोडर) और CPU Core i841 (JPEG एनकोडर से JPF एनकोडर) पर टेस्ट इमेज कैथेड्रल.bmp (2000 x 3008, 8 बिट) की संपीड़न दर के परिणाम दिखाए गए हैं। बेसलाइन जेपीईजी संपीड़न अनुपात:

NVIDIA प्रोफाइलर का उपयोग करके, एन्कोडिंग एल्गोरिथ्म के प्रत्येक चरण की अवधि के माप किए गए थे। तालिका 5, एनवीआईडीआईए GeForce GTX 580 ग्राफिक्स कार्ड के लिए विभिन्न संपीड़न अनुपातों के लिए डिफ़ॉल्ट मात्रा और हफ़मैन तालिकाओं के साथ बेसलाइन जेपीईजी एल्गोरिथ्म का उपयोग करते हुए संपीड़न समय के लिए बेंचमार्क दिखाता है। छवि कैथेड्रल.bmp, रिज़ॉल्यूशन x 3008, 8 बिट्स, डिग्री के बाद कोष्ठक में। संपीड़न इंगित करता है कि यह छवि कितनी बार संकुचित है:

इस प्रकार, हम देखते हैं कि JPEG कम्प्रेशन अल्गोरिद्म का प्रत्येक चरण कितनी जल्दी वीडियो कार्ड पर प्रदर्शित किया जा सकता है: सोर्स डेटा लोड करना, असतत कोसाइन ट्रांसफ़ॉर्म, सीरीज़ कोडिंग, हफ़मैन कोडिंग और कंप्रेस्ड इमेज को अपलोड करना। एंट्रॉपी कोडिंग की दर का मूल्यांकन करते समय, हफ़मैन द्वारा श्रृंखला के कोडिंग और कोडिंग से योगदान को अलग करना आवश्यक है। तथ्य यह है कि जेपीईजी एल्गोरिथ्म के विभिन्न चरणों में, डेटा का आकार अलग है, और प्रदर्शन की गणना करते समय यह महत्वपूर्ण है। हफ़मैन कोडिंग के लिए, कोडिंग गति के लिए कम अनुमान के रूप में, आप संपीड़ित फ़ाइल के आकार को रनटाइम द्वारा विभाजित कर सकते हैं। संपीड़न के प्रत्येक चरण की गति के सटीक मूल्य की गणना करने के लिए, न केवल समय को मापना आवश्यक है, बल्कि गणना के प्रत्येक चरण में स्रोत डेटा का आकार भी है।
इस प्रकार, जेपीईजी एल्गोरिथ्म का उपयोग करके एक वीडियो कार्ड पर छवियों के बहुत तेज संपीड़न की मौलिक संभावना दिखाई देती है, और बजट और यहां तक कि मोबाइल सहित NVIDIA ग्राफिक्स कार्ड की काफी व्यापक श्रेणी के लिए। इसके अलावा, परिणाम JPEG एन्कोडिंग गति में उन बेंचमार्क से काफी बेहतर हैं, जिन्हें हमने मल्टी-कोर सीपीयू पर सबसे तेज समाधान के लिए देखा था।
वीडियो कार्ड पर जेपीईजी एल्गोरिथ्म के प्रत्येक चरण के निष्पादन समय का विश्लेषण निम्नलिखित चित्र देता है: सबसे धीमे संचालन में से एक कंप्यूटर की रैम से वीडियो कार्ड में डेटा लोड हो रहा है। बड़ी छवियों के लिए, डाउनलोड और अपलोड गति दोनों 6 जीबी / एस के आदेश पर हैं। यह सीमा पीसीआई-एक्सप्रेस 2.0 बस की बैंडविड्थ के कारण है, और सिद्धांत में महत्वपूर्ण त्वरण केवल पीसीआई-एक्सप्रेस की अगली पीढ़ी (Gen2 से Gen3) के लिए आगे बढ़ने पर ही संभव हो सकता है। छवि लोडिंग समय और असतत कोसाइन ट्रांसफॉर्म निष्पादन समय केवल छवि आकार पर निर्भर करता है। जबकि श्रृंखला कोडिंग और हफ़मैन कोडिंग छवि के विशिष्ट डेटा पर ही निर्भर करती है, संपीड़न अनुपात और संपीड़न के इस स्तर पर डेटा का आकार।
उत्पादकता बढ़ाने के लिए एक महत्वपूर्ण बिंदु छवि का आकार है। छवि का आकार जितना बड़ा होगा, वीडियो कार्ड पर संपीड़न दर उतनी ही अधिक होगी। जाहिर है, यह इस तथ्य के कारण है कि छोटी छवि में डेटा पूरी तरह से वीडियो कार्ड को लोड करने के लिए पर्याप्त नहीं है और कुछ कंप्यूटिंग शक्ति बेकार है। यदि आप अपेक्षाकृत बड़े फ़्रेम (4 मेगाबाइट या अधिक) का उपयोग करते हैं, तो हमें पूरा लोड मिलता है और वीडियो कार्ड पर संपीड़न प्रदर्शन बढ़ जाता है। फिर भी, छोटी छवियों के लिए एक त्वरण विकल्प है: आप एक साथ कई फ्रेम लोड कर सकते हैं और उन्हें समानांतर में एनकोड कर सकते हैं। इस प्रकार, आप वीडियो कार्ड को पूरी तरह से डाउनलोड कर सकते हैं और छोटी छवियों के लिए भी अधिकतम प्रदर्शन प्राप्त कर सकते हैं। इसलिए, छोटे फ़्रेमों की एक श्रृंखला के लिए संपीड़न दर बड़ी एकल छवियों के लिए प्राप्त परिणामों के करीब होगी। एक साथ कई छवियों के डाउनलोड और संपीड़न के लिए ऑपरेशन का यह तरीका पहले से ही परीक्षण किया गया है और FVJPEG कोडेक के अंतिम संस्करण में शामिल किया जाएगा।
मैं यह भी नोट करना चाहूंगा कि हानिपूर्ण जेपीईजी छवि संपीड़न गति के लिए GeForce GTX 580 ग्राफिक्स कार्ड पर प्राप्त परिणाम समान एल्गोरिथ्म के लिए सभी ज्ञात हार्डवेयर FPGA छवि संपीड़न समाधान के प्रदर्शन में श्रेष्ठ हैं। निम्नलिखित कंपनियां कुछ सबसे तेज़ JPEG FPGA छवि संपीड़न सिस्टम प्रदान करती हैं:
बारको BA116 JPEG एनकोडर (हाई स्पीड बेसलाइन DCT- आधारित JPEG कलर एनकोडर) - FPGA के लिए JPEG हार्डवेयर एन्कोडिंग फ़ंक्शन, 140 MB / s तक का प्रदर्शन।
कास्ट इंक (JPEG-C बेसलाइन JPEG कम्प्रेशन कोडेक कोर) - FPGA के लिए जीप में हार्डवेयर कम्प्रेशन फंक्शन, Xilinx Virtex-6 के लिए 275 MB / s तक का प्रदर्शन, Altera FPGA Stratix IV के लिए 280 MB / s तक।
विसेन्गी (जेपीईजी / एमजेपीईजी हार्डवेयर कंप्रेसर आईपी कोर) - वीरटेक्स -5 एफपीजीए के लिए जीपेज हार्डवेयर एन्कोडिंग फ़ंक्शन, 405 एमबी / एस तक का प्रदर्शन।
अल्मा-टेक (SVE-JPEG-E, SpeedView सक्षम JPEG एनकोडर मेगाफंक्शन) - Altera / Xilinx FPGAs के लिए बेसलाइन JPEG हार्डवेयर कम्प्रेशन फ़ंक्शन, 500 MB / s तक का प्रदर्शन।
JPEG 680 ( , 170 ), .
GPU JPEG , , GPU, Verilog/VHDL, CUDA , . , , .
. -, , , , CPU. CUDA NVIDIA, ( Fermi) . , OpenCL, , NVIDIA , . , , , ( ) GDDR5 6 , CPU . , , . GPU , . «».
8- JPEG . , NVIDIA , . GeForce GTX 590 . . , NVIDIA . , - . , (MJPEG), .
, , . FVJPEG SDK GPU NVIDIA Baseline JPEG Windows/Linux .