ROP - Render Output Unit چیست ؟


"واحد خروجی رندرینگ" یا Render Output Unit که به اختصار ROP و همچنین "کانال عملیات های رستر" (Raster Output Pipeline) نامیده می شود یکی از مراحل پایانی در پروسه رندرینگ بورد های گرافیکی سه بعدی امروزی است. کانال پردازش پیکسل، اطلاعات پیکسل و تکسل (واحد های تشکیل دهنده تکسچر) را دریافت می کند و آن را به وسیله عملیات های ماتریسی و وکتوری خاص به یک پیکسل نهایی یا متغیر عمق پردازش می کند. ROP ها، تراکنس های بین بافر های مرتبط در حافظه محلی شامل خواندن و نوشتن و ترکیب مقادیر را انجام می دهند. پس ROP وظیفه ترکیب و قرار دادن پیکسل ها در محل مخصوص خود در صفحه نمایش (در اصل حافظه) را بر عهده دارد.
در گذشته تعداد ROP ها، TMU ها (واحد نگاشت تکسچر) و سایه زن های پیکسل، برابر بودند. هرچند از سال 2004 چندین GPU این واحد ها را از یکدیگر جدا کردند تا اختصاص ترانزیستور برای عملکرد حجم کار برنامه و حافظ در دسترس به صورت بهینه انجام شود. همینطور که این رویه ادامه پیدا می کند، اینگونه انتظار می رود تا پردازنده های گرافیکی واحد های مختلف خود را از یکدیگر جدا کنند تا سازگاری خود را با برنامه های گرافیکی آینده افزایش دهند. این طراحی باعث می شود تا سازندگان تراشه رویه ای ماژول وار ایجاد کنند که در آن GPU های رده بالا در اساس، از منطق یکسانی در مقابل GPU های رده پایین استفاده کنند.


تفاوت حافظه های DDR3 و GDDR5

 
در زیر برخی از تفاوت های عمده حافظه های DDR3 که به عنوان حافظه اصلی سیستم به کار می روند با حافظه های GDDR5 که عمدتا به عنوان حافظه کارت گرافیک های رده بالا به کار می روند، عنوان شده است.

- مصرف بالاتر و تولید گرمای بیشتر DDR3 نسبت به GDDR5 .  (مصرف 1.2 تا 1.65 ولت DDR3 نسبت به حدود 1 ولت GDDR5)

- DDR3 از کنترلر حافظه 64 بیتی برای هر کانال استفاده می کند (128 برای دو کانال، 256 برای چهار کانال و ...) در حالی که GDDR5 از کنترلر های 32 بیتی (16 بیت برای ورودی/ 16 بیت خروجی) استفاده می کند. البته GPU میتواند از هر تعداد ورودی/خروجی 32 بیتی استفاده کند. (2 عدد برای 64 بیت، 4 برای 128 بیت، 6 برای 192 بیت و ...)

- فرکانس و پهنای باند بالاتر GDDR5 نسبت به DDR3.

- تاخیر (latency) بیشتر GDDR5 نسبت به DDR3.

به علت تفاوت ذاتی CPU و GPU در پردازش و توانایی بالای GPU در موازی کاری، تاخیر حافظه های GDDR5 اهمیتی برای GPU ندارد و در عوض توانایی حافظه GDDR5 در انتقال سریع حجم عظیم اطلاعات باعث می شود که برای GPU ها از این حافظه استفاده شود؛ در طرف مقابل نیاز CPU به انجام سریع پردازشات خطی، تاخیر کم حافظه های DDR3 و انتقال سریع حجم کم اطلاعات، یک مزیت برای DDR3 به حساب می آید.  



Open AL چیست ؟


Open AL مخفف عبارت Open Audio Library به معنی "کتابخانه ی صوتی باز" به مجموعه ای از رابط های برنامه ی نویسی صوتی مولتی پلتفرم گفته میشود که برای رندرینگ موثر صدا در محیط سه بعدی طراحی شده است. سبک رابط های برنامه نویسی Open AL مشابه رابط های Open GL است که به احتمال زیاد بیشتر نامش را شنیده اید. نسخه های اولیه این نرم افزار متن باز بودند ولی نسخه های اخیر اختصاصی هستند و به وسیله ی شرکت Creative Technology توسعه داده می شوند. استفاده از Open AL باعث طبیعی شدن صدا در محیط های سع بعدی مانند بازی های رایانه ای میشود، برای مثال کاربر در حین حرکت در فضای سه بعدی (مجازی) می تواند رفتار طبیعی صوت را احساس کند. 
  

رقابت بر سر دست یافتن به قدرت پردازش بیشتر


امروزه نیاز روزافزون به قدرت محاسبه بالاتر باعث شده است تا عنوان "سریعترین ابر کامپیوتر جهان" مدت زیادی در اختیار یک کشور یا کمپانی قرار نداشته باشد و معمولا هر ابرکامپیوتر جدید نمیتواند بیش از چند ماه این عنوان را یدک بکشد.
حدود دو سال پیش بود که چین با ساخت ابرکامپیوتر Tianhe-1 توانست مقام اول در جدول سریعترین ابرکامپیوتر ها را به دست آورد؛ پس از آن شرکت فوجیتسو برای کشور ژاپن ابرکامپیوتر K را ساخت که با قدرت بیش از 10 پتافلاپ (هر پتافلاپ معادل 1000 تریلیون محاسبه در ثانیه است) مقام اول را به دست آورد و حالا شرکت IBM دوباره توانسته است با ساخت ابرکامپیوتر Sequoia با قدرت محاسبه بیش از 16 پتافلاپ برای "اداره ی ملی امنیت هسته ای" ایالات متحده (NNSA) به صدر این جدول برگردد. همچنین ابرکامپیوتر Sequoia با مصرف 7.9 مگاوات در مقایسه با ابرکامپیوتر K که 12.6 مگاوات انرژی مصرف می کند، بسیار کم مصرف تر نیز هست. 


برای مشاهده ی جدول 500 ابرکامپیوتر جهان میتوانید سری به سایت Top500 بزنید و اطلاعات کامل را در انجا مشاهده کنید. به هر حال باید دید که محصول جدید IBM تا چه مدت می تواند عنوان نخست خود را حفظ کند.

Lucid Virtu MVP


شاید با فناوری Virtu از شرکت Lucid آشنا باشید، فناوری که وظیفه ی سوئیچ بین کارت گرافیک مجزا و گرافیک یکپارچه نسبت به حجم بار پردازش گرافیکی را برعهده دارد. این فناوری باعث شده بود از طرفی مصرف انرژی تا حد زیادی کاهش یابد و از طرف دیگر در هنگام اجرای بازی های سنگین مشکلی برای کاربر پیش نیاید. چند وقتی است شرکت Lucid نسل جدید این فناوری به نام Virtu MVP را روانه بازار کرده تا سرعت های فریم بالاتری را برای علاقه مندان به کیفیت های بالا رقم بزند.(!)


Virtu MVP پا را از Virtu فراتر گذاشته است و در هنگام نیاز به قدرت پردازش گرافیکی بالا هر دو گرافیک (مجتمع و مجزا) را به کار میگیرد تا قدرت پردازش بالایی و در نتیجه نرخ فریم بالایی را برای شما فراهم کند؛ در این حالت، برخلاف فناوری Virtu که در هنگام نیاز به قدرت پردازش بالا گرافیک مجتمع غیر فعال شده و گرافیک مجزا عمل پردازش را انجام می دهد، هر دو پردازنده در عمل پردازش شریک می شوند تا سرعت پردازش بسیار فراتر از قبل شود. Virtu MVP همان صرفه جویی در مصرف انرژی را به ارمغان می آورد و همچنین در هنگام کارهای گرافیکی سنگین مانند بازی های رایانه ای به طور قابل ملاحظه ای سرعت پردازش اطلاعات بیشتر می کند. 
Virtu MVP برای نسل آینده ی تراشه های Z68 ، H67 و H61 و برخی دیگر از گرافیک های مجتمع اینتل، همچنین برای برخی از نوت بوک ها با پردازنده های AMD طراحی شده است. این فناوری با ویژگی جدیدی به نام HyperFormance همراه است که باعث می شود تا پاسخدهی کلی در بازی های سه بعدی بهبود یابد که این به معنی کاهش لگ (lag) در بازی است.

الگوریتم Lempel-Ziv


Lempel-Ziv یکی از الگوریتم های بی اتلاف و "دیکشنری پایه" فشرده سازی است که در سال 1977 توسط دو دانشمند کامپیوتر اسرائیلی به نام های Abraham Lempel و Jacob Ziv ارائه شد و تا به حال مشتقات بسیاری از آن ایجاد شده است. منظور از "دیکشنری پایه" این است که این الگوریتم برای رمزکردن اطلاعات از یک دیکشنری یا پایگاه اطلاعات استفاده می کند؛ این دیکشنری در طول اجرای الگوریتم ایجاد و تکمیل می شود؛ یا به عبارت دیگر به صورت On-the-Fly ایجاد می شود.
در این الگوریتم، قسمت های مختلفی از ورودی (با توجه به قسمت های قبلی) توسط کد های خاص و متمایزی جایگزین می شوند. در آخر ورودی به صورت سلسله ای از این کد ها در خواهد امد. کد های جایگزین شده از روی منبع داده ای که به آن "دیکشنری" (Dictionary) گفته می شود انتخاب خواهند شد و دیکشنری نیز بر اساس ورودی ایجاد و تکمیل می شود. تصویر متحرک زیر چگونگی کارکرد این الگوریتم برای یک ورودی مشخص را نشان می دهد.




همان گونه که در تصویر مشخص است، در ابتدا ورودی یک واحد یک واحد (در این جا کاراکتر به کاراکتر) انتخاب شده و اگر در دکشنری وجود نداشتند، در دیکشنری قرار داده می شوند و کد مشخصی برایشان اختصاص داده می شود. سپس یک بار دیگر از ابتدا ورودی کاراکتر به کاراکتر انتخاب می شود، اگر این کاراکتر در دیکشنری وجود داشت کاراکتر بعدی به آن اضافه خواهد شد و یک بار دیگر برای بررسی وجود آن در دیکشنری جست و جو انجام میشود، اگر دوباره این دو کاراکتر نیز در دیکشنری موجود بودند کاراکتر بعدی نیز به انها اضافه می شود و دوباره این روال برای سه کاراکتر انجام می شود ولی اگر این دو کاراکتر در دیکشنری وجود نداشتند، آنگاه این مجموعه به دیکشنری اضافه خواهد شد و کد کارکتر (ها) قبلی به خروجی اضافه خواهد شد. برای درک بهتر این مراحل به فلوچارت زیر توجه کنید :

Actions & Batch processing


تصور کنید می خواهید ویرایش یا ویرایشات خاصی را بر روی تعداد زیادی تصویر اعمال کنید. مسلما اگر بخواهید آنها را تک تک در فتوشاپ باز کرده و ویرایش کنید و سپس به سراغ تصویر بعدی بروید، کاری بسیار دشوار و وقت گیر خواهد بود. چاره کار در این مواقع استفاده از سیستم پردازش دسته ای یا Batch processing فتوشاپ است. اما چگونه این کار را انجام دهیم ؟ برای استفاده از این قابلیت ابتدا باید با "اکشن" ها در فتوشاپ آشنا شوید. 
Actions ها در واقع ضبط کننده ی کارهایی هستند که بر روی یک عکس انجام می دهید. بعد از ضبط مراحل ویرایش، می توانید انها را با یک کلیک به هر عکس دیگری اعمال کنید و از دوباره کاری خودداری کنید. قبل از هر چیز اگر پنجره ی Actions را در میزکار ندارید به منوی Window بروید و گزینه ی Actions را تیک بزنید. با این کار پنجره ی اکشن در میز کار فعال می شود و می توانید در آن لیستی از اکشن های از قبل تهیه شده که هر کدام ویرایش یا مجموعه ای از ویرایش های خاصی را بر روی یک عکس اعمال می کنند، مشاهده کنید. برای آزمایش آنها میتوانید یک عکس دلخواه را باز کنید و با انتخاب یک اکشن و کلیک بر روی آیکون Play نتیجه آن را مشاهده کنید.
شما هم می توانید اکشن موردنظر خود را بسازید. برای این کار بر روی گزینه ی Create New Action در قسمت پایین پنجره کلیک کنید و نام و میانبر اکشن خود را به دلخواه وارد کنید و گزینه ی Record را کلیک کنید. حالا فتوشاپ در حال ضبط اعمال شما در برنامه است و میتوانید نشانه ی ضبط را در پایین پنجره ی Actions ببینید. خب حالا هر ویرایشی که می خواهید بر روی عکس اعمال کنید را انجام دهید و هنگامی که کارتان با عکس تمام شد گزینه ی Stop را در پنجره ی Actions کلیک کنید تا ضبط پایان یابد. حالا اکشن شما کامل شده است و می توانید با انتخاب و زدن کلید Play آن را به عکس های دیگر اعمال کنید. مراحل اکشن خود را می توانید با زدن آیکون مثلثی کنار آن مشاهده کنید و در صورت تمایل تغییر دهید.
- با دبل کلیک بر روی هر مرحله یاز اکشن می توانید آن را اصلاح کنید بدون اینکه مجبور باشید دوباره تمام مراحل دیگر را انجام دهید.
- با انتخاب گزینه ی Create New set مجموعه ای از اکشن های دلخواه ایجاد کنید.
- با استفاده از گزینه ی Save Action میتوانید مجموعه ی اکشن های خود را در محل دلخواه در هارد دیسک خود ذخیره کنید.
- با استفاده از گزینه ی Insert Stop میتوانید توضیحاتی بین مراحل اکشن خود وارد کنید که در هنگام اجرای اکشن نمایش داده شوند.
حالا که اکشن خود را ایجاد کرده اید میتوانید برای اعمال آن به تعداد زیادی از تصاویر به صورت خودکار به منوی File رفته و از بخش Automate قابلیت Batch را انتخاب کنید. در این پنجره اکشن خود را که با نام دلخواه ساخته اید انتخاب کنید و در قسمت Source می توانید عکس های دلخواه خود را انتخاب کنید (برای مثال انتخاب یک پوشه از هارددیسک یا فایل های باز شده در فتوشاپ) و پس از انتخاب محل ذخیره فایل ها گزینه ی Ok را کلیک کنید. دقت کنید که اگر در اکشنی که ایجاد کرده اید دستورات Open و Save as را قرار داده اید، دو گزینه ای Override Action "Open" Command و Override Action "Save as" Commad را تیک بزنید چون به طور خودکار این کار انجام خواهد شد.

AES - (بخش دوم)

ریاضیات پایه و کاربردی در AES :

برای فهم الگوریتم Rijndeal که الگوریتم به کار رفته در "استاندارد رمز نگاری پیشرفته" است بایستی ابتدا با برخی از مفاهیم ریاضی به کار رفته در آن آشنا شویم. مطالب این پست ترجمه از کتاب "AES proposal: Rijndeal" است.
The Field GF(2^8) :
عناصر یک میدان محدود یا "میدان گلوس" (GF - Galois Field) (منظور، ساختار یا مجموعه ای متناهی ازعناصر که برای آنها چهار عمل اصلی حسابی تعریف شده باشد) را می توان به چندین شیوه نمایش داد. یکی از روش های برای نشان دادن میدان GF(2^8) روش چندجمله ای کلاسیک است.
(برای مثال) یک بایت به نام b از هشت بیت تشکیل شده است که می توانیم آنها را با b0,b1,b2,b3,b4,b5,b6,b7 نشان دهیم. این بایت را می توانیم به صورت چند جمله ای زیر (برای مثال به نام b(x) ) تصور کنیم. (دقت کنید : x^k یعنی : x به توان k )

b7 x^7 + b6 x^6 + b5 x^5 + b4 x^4 + b3 x^3 + b2 x^2 + b1 x + b0

عدد '57' (مبنای 16) را تصور کنید. این عدد به صورت باینری برابر با "01010111" است و طبق فرض بالا، متناظر با چند جمله ای زیر است :

x^6 + x^4 + x^2 + x + 1
جمع (Addition) :
محاسبات در حوزه میدان با محاسبات جبری اعداد صحیح یا اعداد واقعی تفاوت دارد. در نمایش چندجمله ای ، جمع دو عنصر عملیات شبیه به عملیات منطقی XOR است. یعنی برای مثال 1 + 1 = 0 و 1 + 0 = 1 .
پس برای دو عدد دلخواه '57' و '83' داریم :

'57' = x^6 + x^4 + x^2 + x + 1 = "01010111"
'83' = x^7 + x + 1 = "10000011"
'57' + '83' = 'D4'
(x^6 + x^4 + x^2 + x + 1) + (x^7 + x + 1) = x^7 + x^6 + x^4 + x^2
"01010111" + "10000011" = "11010100"

ضرب (Multiplication) :

در نمایش چندجمله ای، ضرب در GF(2^8) متناظر "ضرب چندجمله ای ها بر پیمانه ی یک چندجمله ای باینری غیر قابل تقسیم" است. (یک چندجمله ای هنگامی غیر قابل تقسیم است که تنها بر 1 و خودش قابل تقسیم باشد). برای الگوریتم رجیندل این چندجمله ای m(x) نام دارد و برابر است با :

m(x) = x^8 + x^4 + +x^3 + x + 1

و در مینای 16 برابر با '11B' است. مثال : ( modulo = به پیمانه ی )

'57' * '83' = 'C1'
(x^6 + x^4 + x^2 + x + 1) (x^7 + x + 1) = x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1

(x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1) modulo (x^8 + x^4 + +x^3 + x + 1) = x^7 + x^6 + 1

نتیجه همیشه یک چندجمله ای باینری از درجه ای پایین تر از 8 خواهد بود. این عملیات ضرب شرکت پذیر خواهد بود و عنصر '01' "عنصر خنثی" آن به حساب می آید.

ادامه دارد.

Control Unit


"واحد کنترل" (به انگلیسی: Control Unit ) به طور کلی به بخشی از یک سیستم گفته می شود که عملکرد سیستم را کنترل می کند. در مدار های مجتمع (IC) نیز عموما این بخش (یا بخش های مشابه) وجود دارند. در "واحد پردازش مرکزی" یا همان CPU ، واحد کنترل مجموعه ای مدار ها است که جریان اطلاعات در درون پردازنده و فعالیت بخش های دیگر را کنترل می کند. در حقیقت واحد کنترل، کنترل واحد پردازش مرکزی و به صورت کلی تر کنترل کامپیوتر را بر عهده دارد.
عملکرد واحد کنترل نسبت به معماری داخلی پردازنده متغییر است. از این رو که واحد کنترل عموما این معماری را در پردازنده ی CISC که کد های x86 (که دستورعمل های 32 بیتی هستند) را اجرا می کند، عملیات هایی مانند، Fetching (دریافت و بارگذاری دستورعمل ها)، decoding (رمز گشایی) ، مدیریت عملیات ها و ذخیره کردن نتایج بر عهده واحد کنترل هستند. در یک پردازنده با معماری RISC ، پردازنده علاوه بر این بایستی ترجمه ی دستورعمل های x86 به ریز دستورعمل های RISC ، زمان بندی این ریز دستورعمل ها بین واحد های پردازشی مختلف و هدایت خروجی های آنها به مکان صحیح را مدیریت کند. در این پردازنده ها ممکن است واحد کنترل به علت پیچیدگی وظایف و نحوه ی معماری داخلی، در بخش های دیگر (مانند "واحد زمان بندی" ) اذغام شود.

{ RISC مخفف عبارت Reduced Instruction Set Computer نام معماری پایه ریزپردازنده هایی است که برای اجرای عملیات های خاص و محدود بهینه سازی شده اند و در نتیجه سرعت بالایی در اجرای این عملیات های خاص دارند. پردازنده های بر پایه معماری ARM مثالی از این معماری پایه هستند.

CISC مخفف عبارت Complex Instruction Set Compuer نام معماری پایه پردازنده هایی است که در آنها یک دستورعمل می تواند چندین دستورعمل سطح پایین (مانند بارگذاری از حافظه یا یک عملیات حسابی) را اجرا کند و/یا قابلیت اجرای عملیات ها چند مرحله ای را داشته باشد. پردازنده های x86 مثالی از این نوع معماری پایه هستند. }  

pcguide.com

Hyper-Threading Technology


هایپر تردینگ (به انگلیسی : Hyper Threading یا به اختصار HT یا HTT ) نام فناوری "مولتی تردینگ همزمان" پیاده سازی شده در پردازنده های Atom ، core i3/i5/i7 ، Itanium ، Pentium 4 ، Xeon کمپانی اینتل است.
{مولتی تردینگ (MultiThreading) به معنی توانایی تقسیم یک پروسه به بخش های کوچک تر (که به "ترد" یا رشته معروف هستند) و انجام آنها به صورت همزمان است. در این صورت سرعت اجرای یک پروسه افزایش می یابد.
مولتی تردینگ همزمان (Simultaneous multithreading -SMT) تکنیکی برای افزایش بازدهی کلی پردازنده هایی که بیش از یک دستورعمل را همزمان اجرا می کنند (که به superscalar معروف هستند) همراه با "مولتی تردینگ سخت افزاری" است. این فناوری به ترد های مستقل اجازه می دهد که از منابعی که در طراحی پردازنده در اختیار آنها قرار داده شده است، بهتر استفاده کنند.}
هایپرتردینگ یک فناوری اختصاصی کمپانی اینتل است که برای بهبود "موازی کاری پردازشات" (انجام چند دستورعمل به طور همزمان) در پردازنده به کار رفته است. با این فناوری، برای هر هسته پردازشی (هسته های واقعی) سیستم عامل به دو هسته ی مجازی ادرس دهی می کند و در هنگامی که امکان داشته باشد حجم کار را بین آنها تقسیم می کند. برای این فناوری نه تنها لازم است که سیستم عامل از چند پردازنده پشتیبانی کند بلکه باید برای آن بهینه سازی شده باشد؛ و شرکت اینتل توصیه می کند که در صورتی که از سیستم عاملی استفاده می کنید که هایپرتردینگ را پشتیبانی نمی کند، این فناوری را غیر فعال کنید.
هایپرتردینگ به وسیله ی دوبل کردن قسمت های از پردازنده (قسمت هایی حالت یک پروسه را ذخیره می کنند) عمل می کند. به این ترتیب یک پردازنده با این فناوری می تواند به صورت دو پردازنده منطقی به سیستم عامل میزبان شناسانده شود و سیستم عامل به طور همزمان دو رشته عملیاتی را برای آنها زمان بندی کند. هنگامی که منابع پردازشی توسط یک پردازنده استفاده نمی شود و مخصوصا هنگامی که پردزنده (به دلایل مختلف) معلق شده است، یک پردازنده مجهز به این فناوری قادر است از این منابع پردازشی برای اجرای پروسه های زمان بندی شده ی دیگر استفاده کند. برای استفاده از مزایای هایپرتردینگ بایستی سیستم عامل از "چند پردازشی متقارن" یا "مولتی پراسسینگ متقارن" (Symmetric MultiPricessing - SMP) پشتیبانی کند.
{مولتی پراسسینگ به معنی سیستمی با بیش از یک پردازنده (حال پردازنده ها یا هسته هایی متقارن یا نامتقارن) است که مشترکا به یک حافظه اصلی ارتباط دارند و توسط یک سیستم عامل کنترل می شوند. اکثرا سیستم های چند پردازنده ای یا چند هسته ای امروزی دارای یک معماری مولتی پراسسینگ متقارن هستند.} 
wikipedia.org

Firmware


"فرمویر" (لخت افزار - سفت افزار - فریمویر - Firmware ) به برنامه یا/و ساختار داده ای گفته می شود که به صورت داخلی یک سخت افزار را کنترل می کند و اغلب "ثابت" و "کم حجم" است و بر روی حافظه ی ROM (حافظه ی فقط-خواندنی) ذخیره شده است. دو نمونه دیگر از حافظه هایی که عموما مورد استفاده قرار می گیرند، PROM ها (حافظه های فقط-خواندنی قابل برنامه ریزی) و EPROM ها (حافظه های فقط-خواندنی قابل برنامه ریزی پاک کردنی) هستند. فرمویر هایی که در این دو نوع حافظه به کار می روند به گونه ای طراحی شده اند که در صورت نیاز توانایی به روز رسانی را داشته باشند. فرمویر ها طیف وسیعی از وسایل را در بر می گیرند، از ماشین حساب ها و کنترلر ها گرفته تا قطعات کامپیوتر مانند هارد دیسک و کیبورد تا ابزار های علمی و صنعتی. 
مرز مشخصی بین "فرمویر" و "نرم افزار" (یا به نوعی "سیستم عامل") وجود ندارد و در تعریف و هدف آنها همپوشانی هایی وجود دارد؛ هرچند فرمویر ها بیشتر برای عملیات های سطح پایین و پایه ای (که بدون آنها شاید سیستم به کلی کارکرد خود را از دست بدهد) و نرم افزار ها بیشتر برای عملیات های سطح بالا و نهایی (که برای بسیار آزاد تر در برابر تغییر هستند) به کار می روند. در بعضی موارد فرمویرنقش سیستم عامل و رابط کاربرای را نیز ایفا می کند و عملیات مختلف از سطح پایین (سخت افزار) گرفته تا سطح بالا (رابط کاربری) را کنترل می کند. در واقع "فرمویر" یک واژه ی نسبی است چنانکه اکثر "دستگاه های تعبیه شده" (وسایلی که قابلیت تغییر و ارتقا سخت افزاری ندارند - "embedded devices" ) در چند سطح دارای فرمویر هستند. زیر سیستم هایی مانند پردازشگر ، تراشه های فلش و "کنترلر های ارتباطات" و .. ممکن است هر کدام دارای کد ها یا ریزکد های (عمدتا غیر قابل تغییر) مخصوص خود باشند و به عنوان "اجزای سخت افزار" توسط فرمویر سطح بالاتر نگریسته شوند. (گاهی ریزکد یا "میکروکد" نیز به جای واژه ی فرمویر به کار می رود. میکروکد دستورات و/یا ساختار های داده در سطح سخت افزاری هستند که در اجرای دستورعمل های کد های ماشین در سطوح بالاتر به کار می روند).
فرمویر های سطح پایین عموما در ساختار های با قابلیت برنامه ریزی در حافظه های فقط-خواندنی (یا مشتقات آن) و فرمویر های سطح بالا (نزدیک به مرز نرم افزار) در حافظه های فلش مستقر می شوند تا امکان تغییر و به روز رسانی داشته باشند. دلایل عمده برای به روز رسانی، برطرف کردن مشکلات و باگ ها و اضافه کردن قابلیت های جدید به سیستم است. حال این به روز رسانی میتواند به وسیله ی کاربر نهایی یا خود سازنده انجام شود. امروزه رفته رفته معمول می شود که فرمویر توسط "درایور" در همگام نصب به دستگاه بارگذاری شود. در رایانه ها اجزایی مانند کارت گرافیک، کارت صدا، مودم و ... به فرمویرهایی وابسته اند که به وسیله ی درایور بارگذاری می شوند و به این صورت ممکن است به طور غیر مستقیم توسط مکانیزم های به روز رسانی سیستم عامل، به روز رسانی شوند. فرمویر های اجزایی مانند هارد دیسک، دیسک خوان و حافظه های فلش ممکن است به ندرت به آپدیت شوند. این ها همه به طراحی و عملکرد یک سخت افزار، طریقه ی ذخیره فرمویر و نیاز تغییر در آینده بستگی دارد. به روز رسانی فرمویر قطعات مختلف در بهبود عملکرد و کاهش مشکلات آنها نقس موثری دارد. برای مثال به روز رسانی فرمویر یک "دیسک رایتر" میتواند در شناسایی و درک فرمت های مختلف فایل توسط رایتر و سرعت رایت بالاتر که در مرور زمان تغییر می کنند، بسیار کمک کند.
انستیتوی مهندسان برق و الکترونیک (IEEE) فرمویر را به صورت زیر تعریف می کند:
"ترکیبی از یک وسیله ی سخت افزاری و دستورعمل های کامپیوتری و اطلاعاتی که به صورت فقط-خواندنی در آن وسیله جای گرفته است." هر سازمان و شرکتی ممکن است تعاریف و ویژگی های خاص خود برای فرمویر را داشته باشد که در برخی نقاط با یکدیگر یکسان و در برخی دیگر با یکدیگر متفاوت باشند. به هر حال شاید تعریف ساده و پایه ای تر آن "دستورعمل های ثابت یا نیمه ثابت که یک سخت افزار را کنترل می کنند" باشد.
سیستم هایی کنترل و زمان سنجی در وسایل خانگی، کنترل نسبت صدا و تصویر و کانال ها در تلویزیون ها، بایوس، کد پلتفرم و EFI در کامپیوتر ها، OpenBoot یا OpenFirmware در کامیپوتر های سان میکروسیستمز و اپل نمونه هایی از فرمویر به حساب می آیند. فرمویر ها می توانند به صورت باز متن و آزاد، یا تجاری باشند. گاهی اوقات یک فرمویر توسط یک توسعه دهنده (یک شخص ثالث) ساخته یا اصلاح می شود تا قابلیت های جدیدی (که توسط سازنده غیر قابل استفاده شده بودند یا قابلیت های بالقوه) به سخت افزار اضافه شود. از این موارد می توان به فرمویر های شخصی سازی شده برای دوربین های عکاسی، مسیریاب ها، کنسول های بازی، تلوزیون ها و .. اشاره کرد.

PCMark


به احتمال زیاد با نرم افزار PCMark آشنا هستید؛ اگر اینطور نیست... این نرم افزار به همراه "3DMark" ، دو نرم افزار تست و ارزیابی کامپیوتر هستند که هر دو به وسیله ی شرکت "Futuremark" ساخته شده اند و از معروف ترین های این زمینه و البته رایگان/تجاری هستند. هدف این نرم افزاز ارزیابی عملکرد اجزای کامپیوتر با قرار دادن آنها در فعالیت ها و تست های مختلف است. هنگامی که ارزیابی سیستم با PCMark را شروع میکنید این برنامه چندین و چند تست مختلف برای ارزیابی اجزای مختلف سیستم انجام می دهد و عملکرد کلی سیستم را با یک عدد به شما نشان می دهد. البته در صورت نیاز میتوانید نتیجه ارزیابی را به صورت مجزا و با جزئیات نیز مشاهده کنید. باز البته، تست ها و نتایج این نرم افزار با توجه به نسخه ای که استفاده می کنید می تواند متفاوت باشد. برای مثال "از چه نسخه ای از برنامه استفاده می کنید" یا "کدام ویرایش از یک نسخه را استفاده می کنید" و غیره. عددی که به عنوان عملکرد کلی کامپیوتر دریافت می کنید به خودی خود سودمند نیست و هنگامی کارایی و مفهوم دارد که آن را با عملکرد یک سیستم دیگر یا همین سیستم بعد از تغییرات سخت افزاری یا اورکلاک مقایسه کنید. (برای مثال رتبه ی عملکرد کلی کامپیوتر قدیمی من حدود 2350 و برای کامپیوتر جدید تر حدود 8300 بود). البته برای مقایسه دو کامپیوتر باید دو کامپیوتر را در شرایط نرم افزاری یکسان مقایسه کنید.
آزمون های این برنامه شامل قطعات مختلف کامپیوتر مانند پردازنده، حافظه، کارت گرافیک یا در کل پردازنده گرافیکی و هارد دیسک می شود و تست هایی از قبیل، تست سایه زنی و پردازش فیزیک، رمزنگاری فایل، رندرینگ صفحات وب، فشرده سازی صوت و کدینگ ویدئو، ویرایش متن، اکسترکت تصاویر، اسکن ویروس، سرعت خواندن و نوشتن و تاخیرهای هارد و حافظه (رم) و... را شامل می شود. که البته می توانید به صورت دستی و دلخواه نیز این تست ها را انتخاب کنید. فراموش نکنید برخی نسخه های این نرم افزار برای اجرای کامل تست های خود نیاز به نصب پیشنیازهایی مانند DirectX و Media Encoder دارند.

نسخه های مختلفی از برنامه هم در حال حاضر موجود است که هر کدام ویژگی های مختلفی دارند و نیازمند سیستم عامل های مختلفی نیز هستند. برای مثال PCMark2002 و PCMark04 از ویندوز XP و 2000 پشتیبانی میکنند (نسخه 2002 از ویندوز 98 نیز پشتیبانی می کند) و تقریبا از رده خارج شده اند. نسخه PCMark05 به سیستم عامل ویندوز XP و Vista و نسخه PCMark Vantage به سیستم عامل ویندوز Vista و 7 نیاز دارد و نسخه ی PCMark 7 برنامه که جدیدترین آنها است تنها از ویندوز 7 پشتیبانی می کند و برای برخی تست های خود به DirectX 11 نیاز دارد. این نسخه بیش از 25 تست مختلف بر روی اجزای سیستم در هفت حالت مجزا انجام می دهد. این نسخه در سه ویرایش Basic ، Advanced و Professional موجود است که ویرایش Basic رایگان است و طبیعتا کمترین قابلیت را دارد و از هفت حالت تست، تنها "حالت کلی" را انجام می دهد و ویرایش Professional قویترین ویرایش است و البته 995 دلار نیز هزینه دارد!

http://www.futuremark.com

خواندن و نوشتن فایل ها در زبان برنامه نویسی C++


در این پست با نحوه ی کار کردن با فایل ها به صورت ابتدایی در زبان برنامه نویسی C++ آشنا می شویم. فایل ها نقش بسیار مهمی در ذخیره و مدیریت اطلاعات در کامپیوتر دارند و به همین دلیل زبان های برنامه نویسی هم برای کار با فایل امکانات مختلفی در اختیار برنامه نویسیان قرار می دهند. بدون استفاده از فایل ها نمیتوان برنامه های مفید و کاربردی ایجاد کرد و در حقیقت فایل ها باعث شده اند که برنامه ها و در کل کامپیوتر ها امروزه این چنین توسعه و کاربرد پیدا کنند.

ابتدا پیش از هر کاری برای کار با فایل ها باید سرفایل   را به برنامه خود اضافه کنید تا زبان برنامه نویسی به توابع لازم در هنگام نیاز دسترسی داشته باشد. دو جریان برای نوشتن و خواند در/از فایل ها وجود دارد : جریان ofstream برای نوشتن در فایل ها و جریان ifstream برای خواندن اطلاعات از آنها استفاده می شود. این دو جریان باید در متن برنامه اصلی یا تابع وارد شوند و یک عنصر (یا یک عملگر) از نوع آنها تعریف شود. برای مثال دو خط زیر یک جریان به نام "writefile" از نوع ofstream ایجاد می کند که میتواند در فایل متنی "file1.txt" که در آدرس "C:/" قرار دارد اطلاعات را ذخیره کند. خط اول جریان "write" را تعریف و خط دوم فایل موردنظر را برای انجام عملیات باز میکند.

ofstream writefile;

wrtite.open ("c:/file1.txt");


حالا می توانید برای مثال اطلاعات خود را در فایل file1.txt ذخیره کنید. برای مثال :

write << "this is a text file";

بعد از اجرای خط بالا عبارت this is a text file در فایل متنی شما ذخیره می شود.
به دو نکته توجه داشته باشید، یکی اینکه نام عنصر (در اینجا writefile ) اختیاری و دلخواه است و یکی اینکه اگر آدرس فایل موردنظر را وارد نکنید فایل به طور پیشفرض در پوشه ای که برنامه ها را ذخیره کرده اید ایجاد می شود. حالا با نوشتن این خط یک عنصر به نام writefile دارید که میتواند اطلاعات شما را در فایل تعریف شده، بنویسد. با تعریف بالا، هربار که برنامه اجرا شود اطلاعات از ابتدای فایل متنی شروع به نوشته شدن می کنند و اطلاعات قبلی را پاک می کنند. برای تغییر در حالت باید المان هایی را به تابع open اضافه کنیم :

ios::in باز کردن برای عملیات ورودی.
ios::out باز کردن برای عملیات خروجی.
ios::binary باز کردن در حالت باینری.
ios::ate قرار دادن نقطه ی شروع عملیات از انتهای فایل.
ios::app تمام عملیات جروجی در انتهای فایل انجام می شود. محتوای فعلی به محتوای قبلی اضافه می شود.
ios::trunc اگر فایل باز شده برای عملیات خروجی قبلا وجود داشته باشد محتوای قبلی پاک شده و با محتوای جدید جایگزین می شود.
نحوه ی استفاده از دستور های بالا به صورت زیر است. می توان چند دستور را نیز به صورت همزمان به کارببریم.

ofstream write;
write.open ("c:/file1.txt" , ios::ate);


نحوه بستن فایل نیز به صورت زیر است و برای آن از تابع close() استفاده می شود. هنگامی که فایل را می بندیم دیگر نمی توانیم به محتوای آن دسترسی داشته باشیم. مگر انکه دوباره آن را باز کنیم.

write.close();

جریان ifstream نیز برای خواندن از فایل ها به کار می رود. خط زیر جریانی به نام "read" از نوع ifstream ایجاد می کند که می تواند از فایل مورد نظر اطلاعات را دریافت کند.

ifstream read;
read.open ("c:/file1.txt");

 جریان fstream نیز می تواند به جای ofstream و ifstream به کار رود و نقش هر دو را ایفا کند ولی برای به کار بردن آن باید نوع ورودی یا خروجی آن را در هنگام تعریف در قسمت آرگومان ها ذکر کنید. برای مثال :

fstream write ("c:/file1.txt" , ios::out);

ادامه دارد ...
 

Intel Turbo Boost & AMD Turbo Core


هر دو کمپانی اینتل و AMD فناوری های تقریبا مشابه ای را توسعه داده اند که می تواند در هنگام نیاز کارایی پردازنده هایشان را نسبت به حالت عادی افزایش دهد. در ادامه به طور مختصر با این دو فناوری آشنا می شویم.
Turbo Boost فناوری است که اینتل در برخی از پردازنده های جدید خود یعنی پردازنده های با معماری Nehalem و sandy bridge افزوده است و به پردازنده اجازه می دهد تا در هنگام نیاز به صورت پویا (یا دینامیک) از فرکانس کاری عادی خود فراتر رود و در فرکانس بالاتری فعالیت کند و در نتیجه کارایی کل پردازنده در محاسبات افزایش پیدا کند. این فناوری به نوعی Overclocking خودکار پردازنده است و به صورت پویا و خودکار انجام می شود و خارج از کنترل کاربر است. (تنها کاری که کاربر می تواند بکند فعال کردن / غیر فعال کردن این فناوری است). Turbo Boost در مواقعی فعال می شود (و بیشترین تاثیر را دارد) که پردازنده در حال اجرای پروسه های تک رشته ای باشد. یعنی پروسه هایی که نمی توانند از تمام هسته های پردازشی (در کل از تمام توان پردازشی) پردازنده استفاده کنند. در این هنگام به صورت خودکار هسته هایی موردنیاز نیستند غیرفعال شده و فرکانس هسته ای که بار پردازشی را برعهده دارد افزایش می یابد تا پروسه تک رشته ای زودتر انجام شود. البته این افزایش فرکانس نیز به توان ، گرما و هسته های پردازشی فعال پردازنده محدود می شود. در حالت کلی هر چه قدر که هسته های پردازشی فعال کمتری وجود داشته باشد ، امکان افزایش فرکانس هسته های پردازشی فعال، بیشتر می شود. 
فناوری Turbo Core شرکت ای ام دی نیز در کل کارایی مشابه ای دارد و مانند فناوری Turbo Boost هدفش افزایش توان پردازشی پردازنده در هنگام نیاز سیستم عامل است. برای مثال سوئیچ کردن خودکار از حالت یک پردازنده شش هسته ای با فرکانس های کاری عادی به یک پردازنده سه هسته ای با سه هسته Overclock شده در پروسه هایی که فرکانس کاریی برایشان مهمتر از تعداد هسته های پردازشی است. برای مثال سوئیچ از شش هسته با فرکانس های 3200 مگاهرتز به سه هسته با فرکانس های 3600 مگاهرتز که حالت دوم در بعضی مواقع میتواند کارایی بالاتری نسبت به حالت اول داشته باشد. فناوری Turbo Core نیز در بعضی از پردازنده های رده بالای ای ام دی مانند سری Phenom 2 به کار رفته است.باز هم ذکر می شود که عملکرد این دو فناوری کاملا پویا و خودکار است و به نیاز سیستم عامل و پروسه های در حال اجرا بستگی دارد.

QuickSort


مرتب سازی سریع یا QuickSort الگوریتمی برای مرتب سازی است که در سال 1960 توسط C.A.R Hoare دانشمند کامپپوتر انگلیسی ابداع شد. این روش به علت سرعت مناسب در لیست های بزرگ و پیاده سازی آسان بسیار مورد استفاده قرار می گیرد. در ادامه نگاهی به شیوه مرتب سازی و نحوه ی پیاده سازی این لگوریتم می اندازیم.
این الگوریتم برای مرتب سازی از متدی به نام "تقسیم و حل" استفاده می کند. به زبان ساده "تقسیم و حل" به معنی خرد کردن یک مسئله به اجزای کوچکتر (و ساده تر) و حل اجزای ساده است و در نهایت به وسیله حل تمام اجزای ساده به حل کل مسئله می رسیم. در مرتب سازی سریع نیز لیست یا آرایه عناصر مورد نظر را در هر مرحله به قطعات کوچکتر تقسیم می کنیم و سپس عملیات مورد نظر را روی آنها انجام می دهیم.

در اولین قدم، یک عنصر دلخواه از لیست را انتخاب می کنیم (بهتر است این عنصر از خانه های وسط لیست باشد)؛ به این عنصر به "عنصر محوری" یا "Pivot element" معروف است. در قدم بعدی تمام عناصر کوچکتر از Pivot را به طرف چپ آن منتقل می کنیم. به این ترتیب تمام عناصر بزرگتر از Pivot نیز به طرف راست آن منتقل خواهند شد. تمام عملیات مرتب سازی سریع از تکرار این دو مرحله تا پایان حاصل می شود. خب گفیتم که تمام عناصر کوچکتر را به طرف چپ و تمام بزرگتر ها را به طرف راست Pivot آوردیم. با این کار لیست اولیه ما به دو لیست کوچکتر تقسیم خواهد شد. می توانیم آنها را لیست چپ و لیست راست بنامیم. برای مرتب سازی کامل لیست کافی است دو باره دو مرحله بالا را برای لیست چپ و لیست راست تکرار کنید . یعنی از هر دو لیست به ترتیب یک عنصر به عنوان عنصر Pivot انتخب کنید و دو باره عناصر کوچکتر را به چپ و عناصر بزرگتر را به سمت راست Pivot منتقل کنید. هر بار که این کار را تکرار کنید لیست های چپ و راست هر کدام به دو لیست کوچکتر تقسیم می شوند که دو باره می توانید آنها را چپ و راست بنامیم.

در هر مرحله عنصر Pivot در مکان صحیح و نهایی خود قرار می گیرد و باید مراحل بالا را تا زمانی که لیست چپ و راست بیش از یک خانه (یا عنصر) دارند ادامه دهید. هنگامی که دیگر لیست های چپ و راست مرحله آخر هر کدام یک خانه دارند دیگر کل لیست مرتب شده است و نیازی نیست عملیات مرتب سازی ادامه پیدا کند.

پس به طور خلاصه سه کار را در هر مرحله انجام می دهیم، ابتدا یک عنصری دلخواه از لیست را انتخاب می کنیم که به آن عنصر محوری یا Pivot گفته می شود. سپس عناصر کوچکتر از Pivot را به طرف چپ آن منتقل می کنیم. لیست به دو بخش از (ابتدا تا Pivot-1 ) و از ( Pivot+1 تا انتها) ( عنصر Pivot دیگر تغییر نخواهد کرد) تقسیم شده است. در مرحله بعد، دو مرحله ی قبل را برای هر دو بخش جدید تکرار می کنیم.
برای اینکه عناصر کوچکتر از Pivot را به سمت چپ آن منتقل کنید از روش های مختلفی می توانید استفاده کنید ولی یکی از بهترین ها روش زیر است :
عنصر Pivot را به انتهای لیست منتقل کنید. ( جای Pivot و خانه ی آخر لیست را عوض کنید)
یک متغیر به نام دلخواه ( برای مثال position ) برای نگه داری مکان فعلی بررسی تعریف کنید و مقدار اولیه آن را ایندکس خانه ابتدای لیست قرار دهید.
از ابتدا تا انتهای لیست اگر هر عنصر کوچکتر از Pivot بود ، آنگاه جای آن را با عنصر خانه ی position عوض کنید و یک واحد به position اضافه کنید.
به زبان برنامه نویسی ( a[ ] لیست مورد نظر است) : if (a[i] < Pivot) swap (a[position++] , a[i])
در آخر جای Pivot (که همان خانه ی آخر لیست است) را با خانه ی position عوض کنید. (دقت کنید که position ایندکس خانه است نه مقدار آن)
با انجام این مراحل تمام عناصر کوچکتر از Pivot به سمت چپ و تمام بزرگتر ها به سمت راست آن منتثل می شوند.
wikipedia.org

Advanced Encryption Standard


"استاندارد رمزنگاری پیشرفته" که به اختصار AES نامیده می شود یک استاندارد و معیار برای رمزنگاری اطلاعات دیجیتال است. الگوریتم رمزنگاری AES (که ابتدا ریجیندل یا Rijndeal نامیده می شد) به وسیله ی دو دانشمند بلژیکی به نام های Vincent Rijmen و Joan Daemen طراحی شده است و به وسیله ی سازمان های دولتی برخی از کشور ها از جمله سازمان امنیت ملی آمریکا (NSA) تصدیق و استاندارد شده است و اکنون به صورت گسترده در نرم افزار های کاربردی استفاده می شود.
AES بر پایه ی یک قاعده ی طراحی که "شبکه جایگزینی-جایگشت" (Substitution-permutation network) نامیده می شود طراحی شده است. AES هم در نرم افزار و هم در سخت افزار سریع عمل می کند و برخلاف استاندارد پیشین خود یعنی DES از "شبکه فیستل" (Feistel network) استفاده نمی کند. حال این دو قاعده طراحی چیستند؟ برای ادامه دادن بحث استاندارد AES بایستی مقدمات علم رمز شناسی را بدانیم پس ابتدا به سراغ مفاهیم پایه آن میرویم. پس فعلا AES را فراموش کنید.

از دیرباز بشر به دنبال راهی بود تا اطلاعات سری و محرمانه خود را از دید نامحرمان به دور نگه دارد. بحث رمز نگاری قدمتی بسیار طولانی تر از عصر رایانه دارد و روش های این کار نیز از شروع تا به حال بسیار دچار تغییر و تحول شده اند. شاید بتوان گفت جنگ های تاریخ بشر از بزرگ ترین محرکه های پیشرفت علم رمز شناسی بوده اند. اکنون که ما در عصر رایانه به سر می بریم صد ها روش برای رمزنگاری وجود دارد و هر روز به دنبال راهی هستیم تا اطمینان خود را از اینکه اطلاعات در امنیت هستند، بیشتر کنیم. در بحش رمز شناسی یا کریپتوگرافی (cryptography) دو واژه ی معمول و کلی وجود دارد. رمز نگاری (encryption) و رمزگشایی (decryption) که همانگونه که از نامشان بر می آید "رمزنگاری" پروسه ای برای کد کردن و غیر قابل درک کردن اطلاعات برای افراد بیگانه و "رمز گشایی" پروسه ای برای تبدیل اطلاعات کد شد به اطلاعات قابل درک و فهم است. برای اطلاعات بیشتر میتونید مقاله کریپتوگرافی در سایت ویکیپدیا را مطالعه کنید.

Plaintext و Ciphertext :
منظور از plaintext همان محتوای اولیه یا ورودی برای رمزنگاری است که به صورت قابل درک و فهم برای انسان است و منظور از ciphertext محتوای رمزنگاری (امن) شده است که باید برای قابل فهم و استفاده بودن رمزگشایی شود.

کلید (key) :
"کلید" در رمز شناسی اطلاعاتی است خروجی تابعی یک الگوریتم رمز گذاری را مشخص می کند. بدون کلید الگوریتم ممکن است نتیجه مفید را ایجاد نکند در حقیقت کلید همان تبدیلات و عملیات هایی است که باید بر روی محتوا اولیه (ورودی) اعمال شوند تا ورودی رمزنگاری شود و از طرف دیگر عملیاتی که باید بر روی محتوای رمزنگاری شده اعمال شود تا از حالت رمز نگاری شده به حالت اولیه (قابل فهم) در آید.

الگوریتم های کلید متقارن - Symmetric-Key algorithm :
الگوریتم های کلید متقارن، کلاسی از الگوریتم ها در کریپتوگرافی هستند که از کلید های رمز یکسان (یا مرتبط) برای رمزگذاری و رمزگشایی استفاده می کنند.

الگوریتم های کلید نامتقارن - Asymmetric-Key algorithm :
برخلاف الگوریتم های متقارن اینگونه الگوریتم ها از دو کلید یکی برای رمز گذاری و یکی برای رمزگشایی محتوا استفاده می کنند و به کلید های "عمومی" (public) و "خصوصی" (private) معروف هستند.

Cipher :
Cipher یا Cypher الگوریتمی است که برای رمزنگاری یا رمزگشایی به کار می رود. پس اگر الگوریتم است باید شامل مراحل و قدم هایی تعریف شده و منظم باشد تا بتوان مانند یک رویه آن را دنبال کرد. دقت کنید که برخی از مفاهیم رمز شناسی تقریبا معانی مشابه دارند ولی ممکن است در برخی مواقع معانی تفاوت های کوچکی با هم داشته باشند. برای مثال code ، cipher و encipherment ممکن است به جای یکدیگر به کار روند.

سایفر می تواند به دو بخش block cipher و stream cipher تقسیم شود.
Block cipher :
block cipher یک الگوریتم کلید متقارن است که روی گروهی با طول ثابت از بیت ها که "بلوک" نامیده می شود، به صورت تبدیلات یکنواخت عمل می کند. یک اگلوریتم رمزگذاری بلاک سایفر برای مثال ممکن است یک بلوک 128 بیتی متن را به عنوان ورودی دریافت کند و یک خروجی متناظر 128 بیتی را تحویل دهد. تغییر روی ورودی به وسیله ی یک ورودی دوم که یک کلید مخفی است کنترل می شود. رمز گشایی نیز به صورت مشابه خواهد بود.
Affine Transformation تبدیلی که شامل ضرب در یک ماتریس همراه با جمع با یک بردار است.

Array مجموعه قابل شمارش از چیزهای مشابه ( مثلا آرایه ای از بیت ها).

Bit عددی باینری که دارای یکی از مقادیر 0 یا 1 است.

Block ترتیبی از بیت های باینری که شامل ورودی، خروجی ،حالت ،و کلید راند استپ طول ترتیب ، تعداد بیت هاییست که شامل می شود. به بلاک آرایه ای از بایت ها نیز گفته می شود.


Byte گروهی از هشت بیت که به هر دو صورت 1- آرایه ای از هشت بیت منفرد یا 2- یک واحد تک، رفتار می کند.


Cipher Key کلید سری و رمزنگارانه که به وسیله "جریان توسعه کلید" برای تولید مجموعه ای از کلید راند ها بکار می رود.

Ciphertext داده خروجی از Cipher یا ورودی Inverse Cipher.

Inverse Cipher سری هایی از تبدیلات که با استفاده از کلید رمز، متن رمزی را به متن اصلی تبدیل می کنند.
Key Expansion جریانی که برای تولید یک سری از کلید راند ها از کلید رمز بکار می رود.

Plaintext داده ورودی به Cipher یا خروجی Inverse Cipher .

Rijndael الگوریتم رمزنگاری که در استاندارد رمزگذاری پیشرفته (Advanced Encription Standard (AES)) بکار رفته است.

Round Key کلید راندها مقادیری هستند که از کلید رمز و با جریان توسعه کلید بوجود می آیند. در Cipher و Inverse Cipher آن ها به حالت (State) اعمال می شوند.

State متوسط ​​نتیجه رمزنگاری که می تواند مانند آرایه ای مستطیلی از بایت ها نمایش داده شود که دارای 4 سطر و Nb ستون است.( در ادامه به بیان Nb خواهیم پرداخت).

S-box جدول تعویض غیر خطی که در چندین تبدیل تعویض بایتی و در روال توسعه کلید برای ایجاد یک جانشینی یک به یک برای مقدار یک بایت بکار می رود.

Word گروهی از 32 بیت که می توانند به صورت یک آرایه چهار بیتی یا بصورت منفرد عمل کنند.

ادامه در قسمت دوم ...

ثبات در مرتب سازی (الگوریتم های پایدار)


ثبات در مرتب سازی یا مرتب سازی با ثبات، به الگوریتم هایی گفته می شود که نظم نسبی بین رکورد ها را با کلید های (ارزش) یکسان حفظ می کنند. اگر تمام کلید ها متفاوت هستند ، پس تمایز ضروری نیست ولی اگر کلید های یکسانی وجود دارند، پس یک الگوریتم مرتب سازی زمانی با ثبات یا پایدار است که هروقت که دو رکورد با یک کلید وجود داشت (به عنوان مثال R و S ) و R در لیست اصلی قبل از S آمده بود، آنگاه R در لیست مرتب شده هم قبل از S بیاید. هنگامی که عناصر یکسان، غیر قابل تمایز و تشخیص هستند، در داده هایی که کل عنصر، کلید است، "پایداری" مطرح نیست. به مثال زیر توجه کنید :

(6, 5) (1, 3) (7, 3) (2, 4)

در داده های بالا دو جواب محتمل است که یکی نظم نسبی رکورد در کلید های یکسان را حفظ می کند و دیگری که این چنین نیست :
(6, 5) (2, 4) (1, 3) (7, 3) حفظ نظم :
(6, 5) (2, 4) (7, 3) (1, 3) تغییر نظم : 
الگوریتم های نا پایدار ممکن است نظم نسبی عناصر را تغییر دهند ولی الگوریتم های پایدار اینگونه نیستند. الگوریتم های نا پایدار را میتوان با گسترش و دستکاری الگوریتم مقایسه به الگوریتم های پایدار تبدیل کرد. برای مثال الگوریتم "مرتب سازی حبابی" یک الگوریتم پایدار و الگوریتم "مرتب سازی انتخابی" نا پایدار است.

wikipedia.org

Intel Quick Sync Video



فناوری Quick Sync شرکت اینتل کار ساخت، ویرایش، تطابق و اشتراک ویدئو های شما را در خانه و به صورت آنلاین بدون به نیاز به صرف هزینه اضافی برای سخت افزار، تسریع می کند.
Quick Sync که در نسل دوم پردازنده های Core ارائه شده یک پیشرفت انقلابی در شتاب دهی سخت افزاری است که به شما امکان می دهد کاری که چند ساعت طول می کشد در چند دقیقه انجام دهید. ایجاد دیسک های DVD و Blu-ray ، ویرایش و تبدیل فایل های ویدئویی، آپلود فایل ها در اینترنت و .. همه با صرف کمترین زمان. کامپیوتر های شخصی دارای این فناوری می توانند با سرعت بسیار بیشتری نسبت به کامپیوتر های فاقد این فناوری فایل های ویدئویی را به یکدیگر تبدیل کنند. فایل های ویدئویی معمولا به صورت یک فرمت خاص فشرده و رمزنگاری و بر روی وسایل ذخیره سازی ذخیره می شوند. هنگامی که می خواهید ویدئوی خود را ببینید یا آن را به فرمت دیگری تبدیل کنید باید فایل ابتدا رمزگشایی و سپس دوباره رمزنگاری شود و این پروسه در بسیاری مواقع وقت گیر و سنگین است. فناوری Quick Sync رمزگذاری و رمزگشایی محتوای ویدئویی را سرعت می دهد و همچنین پردازنده را برای انجام کارهای دیگر نیز آزاد می گذارد و بنابراین عملکرد کلی سیستم را افزایش می دهد. این فناوری در حال حاضر به همراه پردازنده های sandy bridge اینتل عرضه می شود و برای استفاده از آن بایستی مادربورد شما قابلیت استفاده از گرافیک مجتمع را داشته باشد و نرم افزار های شما نیز این فناوری را پشتیبانی کند. 
منبع : intel.com

Cocktail sort

"مرتب سازی کوکتلی" یا "مرتب سازی حبابی دو جهتی" یک نسخه از مرتب سازی حبابی است که یک متد "مقایسه ای" و "پایدار" است و برای ساختار داده ی "آرایه" به کار می رود. (آرایه ها خانه هایی پشت سر هم از حافظه هستند که توسط یک برنامه در نظر گرفته می شوند و دارای نام و ایندکس هستند و به وسیله ی آدرس قابل دسترسی هستند). پیاده سازی این روش مرتب سازی تقریبا به راحتی مرتب سازی حبابی است و همچنین مشکل سرعت مرتب سازی حبابی برای عناطر کوچک (که به "لاک پشت ها" معروف هست) را تا اندازه ای رفع می کند. 

در این متد، آرایه به صورت رفتی- برگشتی پیمایش می شود و در رفت بزرگترین عنصر به انتها و در برگشت کوچکترین عنصر به ابتدا ی آرایه آورده می شود.در هر چرخه طول مورد پیمایش 2 خانه کوچکتر می شود و این چرخه تا تمام شدن محدوده ی جست جو و مرتب شدن کل لیست ادامه می یابد. برای پیاده سازی این روش مرتب سازی می توانید از دو حلقه استفاده کنید که حلقه را پیمایش و عناصر را در صورت نیاز جا به جا کنند. تصویر زیر نیز چگونگی عملکرد این روش را نشان می دهد.

wikipedia.org

Lucid Virtu


Lucid Virtu فناوری جدیدی است که توسط شرکت اسرائیلی - آمریکایی LucidLogix برای تعامل با واحد پردازش گرافیکی یا GPU در کامپیوتر شخصی ارائه شده است. این فناوری که اکنون فقط در مادربورد ها با تراشه Z68 اینتل قابل استفاده است قادر است به صورت پویا (دینامیک) در هنگام نیاز بین گرافیک مجزا و گرافیک مجتمع کامپیوتر سوئیچ کند. حتما می دانید که چندی از CPU های جدید دارای یک تراشه گرافیکی هستند که می تواند نیاز به کارت گرافیک را در کامپیوتر بر طرف کند. این تراشه گرافیکی یا همان GPU در داخل واحد پردازش مرکزی قرار گرفته است و می تواند نقش کارت گرافیک را در کامپیوتر ایفا کند و به آن گرافیک مجتمع گفته می شود. از مزایای استفاده از گرافیک مجتمع می توان به مصرف پایین انرژی و حذف هزینه کارت گرافیک از کامپیوتر اشاره کرد. ولی نکته این جاست که هر چند که گرافیک مجتمع برای کارهای معمولی و سبک مانند استفاده از اینترنت و رمزگشایی فایل های تصویری بسیار مناسب هستند ولی هنوز توانایی انجام فعالیت هایی مانند بازی ها و کارهای گرافیکی سنگین را ندارند و برای انجام چنین کارهایی حتما نیاز به کارت گرافیک مجزا دارید.
در این جا فناوری Virtu وارد میدان می شود و به صورت پویا هنگامی که نیازی به پردازشات سنگین وجود ندارد بار پردازش را به عهده گرافیک مجتمع می گذارد و هنگامی که بار پردازش بیش از توان گرافیک مجتمع شد گرافیک مجزا را به کار می گیرد. با این کار در مصرف انرژی تا حد زیادی صرفه جویی می شود. همانگونه که گفته شد این فناوری تا کنون فقط با چیپست z68 قابل استفاده است و برای این کار باید نرم افزاری که شرکت Lucid ارائه کرده را به همراه هر دو درایور گرافیک های مجتمع و مجزا، نصب کرده باشید تا از این قابلیت بهره ببرید. برای اطلاعات بیشتر می توانید به سایت شرکت سازنده و شرکت اینتل مراجعه کنید.

Render Farm


"رندر فارم" یا "مزرعه رندرگیری" به شبکه ای از کامپیوترها گفته می شود که برای رندر کردن "تصاویر خلق شده به وسیله کامپیوتر" (Computer-Generated Imagery) یا CGI طراحی شده است. رندر فارم بیشتر برای جلوه های ویژه فیلم ها، انیمیشن و پردازشات دسته ای افلاین و غیر بلادرنگ (غیر ریل تایم) استفاده می شود و با "رندر وال" یا "دیوار رندرگیری" که برای رندرینگ ریل تایم استفاده می شود، متفاوت است. به طور معمول رندر تصاویر سه بعدی و انیمیشن های با کیفیت بالا برای یک کامپیوتر بسیار زمان بر است و برای این کار از شبکه ای از کامپیوتر ها که به "رندر فارم" معروف است استفاده می شود. یک رندر فارم را می توان ابر کامپیوتری در نظر گرفت که از اتصال چندین کامپیوتر به هم ایجاد شده است و بیشتر در زمینه ی پردازشات دسته ای و موازی قدرتمند است. 
رندر تصاویر یک فعالیت "قابل موازی کاری است" است، چنانکه هر فریم به طور معمول می تواند به طور مستقل از دیگر فریم ها رندر شود (یا حتی یک فریم به وسیله چند پردازنده). در طول سال ها، پیشرفت در قدرت محاسبه اجازه داده است که زمان رندر را کاهش دهیم؛ هرچند که افزایش قدرت کامپیوتر ها همواره با افزایش انتظار از کیفیت تصاویر همراه بوده است. افزایش کیفیت و تفکیک پذیری تصاویر باعث می شود که پروسه رندرینگ نیز به نسبت طولانی تر و سنگین تر شود و به همین دلیل باید سخت افزار خود به نسبت برای آن قدرتمند تر کنیم. در رندر فارم های بزرگ باید از متد هایی استفاده کنیم که پروسه ها را به طور خودکار بین پردازنده ها تقسیم کند. به این گونه نرم افزار ها "مدیر صف" یا queue manager می گویند.
wikipedia.org

Matroska

 

Matroska (ماتروسکا) یک قالب "استاندارد باز" (استاندارد عمومی و باز جهت دستیابی عموم مردم) است که می تواند تعداد نامحدودی تصویر، صوت، عکس و متن را در خود (در یک فایل) نگهداری کند. هدف ایجاد این قالب، ارائه ی یک قالب جهانی و همه گیر برای نگهداری و انتشار محتواهای چند رسانه ای معمول مانند فیلم ، ویدئو و موزیک و صوت است و در بخش های ویدئو (.mkv) ، صوت (.mka) ، زیرنویس (.mks) و ویدئویی سه بعدی (توهم سه بعدی) (.mk3d) ایجاد و ارائه شده است.
ماتروسکا در مفهوم شبیه دیگر قالب های محتوا مانند AVI ، MP4 و ASF است ولی به صورت کاملا "باز" یا Open در مشخصات. همانگونه که گفته شد انواع فایل های ماتروسکا شامل MKV برای ویدئو (همراه با صوت و زیر نویس) ، MKA برای صوت ، MKS برای زیر نویس و MK3D برای ویدئوهای سه بعدی (ویدئو ها با تکنیک برجسته نگاری یا Stereoscopy ). در توسعه ماتروسکا از قالب EBML -Extensible Binary Meta Language یا "ابر زبان باینری قابل تعمیم" به جای قالب باینری استفاده شده است. برخی از اهداف تیم توسعه دهنده ی این قالب محتوا عبارتند از :
- توسعه یک قالب محتوای نوین، انعطاف پذیر، قابل توسعه و چند سکویی.
- پشتیبانی قوی از "جریان" ها یا استریمینگ.
- توسعه ابزارهای برای ایجاد و ویرایش فایل های ماتروسکا.

- توسعه کتابخانه هایی که توسط توسعه دهندگان نرم افزارها برای پشتیبانی از فرمت ماتروسکا، قابل استفاده باشد.

- تلاش برای پشتیبانی ذاتی از متروسکا در سیستم عامل ها و سخت افزار های مختلف.

بسیاری از برنامه های مولتی مدیا رایج این قالب را پشتیبانی می کنند که معروف ترین آنها شامل jetaudio ، km player ، media player classic ، power dvd ، all player و .. می باشند. همچنین بسیاری از برنامه های تبدیل و ویرایش فایل های چند رسانه ای قابلیت پشتیبانی از ماتروسکا را دارند. در بخش سخت افزار نیز بسیاری از تولید کنندگان بزرگ مانند LG ، Sharp ، Samsung ، Asus ، nokia و ... به پشتیبانی از این فرمت در برخی از محصولات خود روی آورده اند. ماتروسکا یک قالب باز یا open است بدین معنی که مشخصات و استاندارد های تخصصی خود را در اختیار عموم قرار داده است و بدین ترتیب راه برای توسعه آن برای همه علاقه مندان باز است. از ویژگی های فرمت های ماتروسکا فشرده سازی بالا فایل ها است و از این لحاظ مانند فرمت های divx و avi انتخاب خوبی برای فرمت فایل ها هستند.

wikipedia

Merge Sort


"مرتب سازی ادغامی" یکی دیگر از متد های مرتب سازی است که برای مرتب سازی یک لیست یا آرایه به کار می رود و به وسیله یک دانشمند و ریاضی دان به نام "جان فون نویمان" ابداع شده است. در این روش ابتدا کل لیست به دو قسمت (برای مثال قسمت "چپ" و "راست") تقسیم می شود و دو باره هر یک از این قسمت ها دوباره به دو قسمت دیگر تقسیم می شوند تا نهایتا هر کدام از قسمت ها چپ و راست دارای یک خانه یا عنصر باشند. سپس مرتب سازی آغار می شود و به ترتیب از آخرین مرحله (جایی که هر کدام از قسمت های چپ و راست حداکثر دارای یک خانه هستند) عناصر قسمت چپ با عناصر قسمت راست مقایسه می شوند و در صورت مرتب نبودن جای خود را با هم عوض می کنند. دقت کنید که برای مثال عنصر اول قسمت چپ با عنصر اول قسمت راست مقایسه می شود و در صورتی که بزرگتر باشد جای دو عنصر عوض می شود و شمارشگر خانه کوچک تر یک واحد افزایش می یابد.با اتمام اولین مرحله مرتب سازی یک قدم جلوتر می رویم و مرتب سازی را ازجایی که هر کدام از قسمت های دارای دو خانه یا عنصر هستند، پی می گیریم.و به همین ترتیب تا مرتب شدن کل آرایه و بازگشت به مرحله اول (که کل لیست یکپارچه است) به روند بالا ادامه می دهیم. باز دقت کنید که می توانید در نوشتن برنامه مرتب سازی، از یک آرایه موقتی برای سهولت کار خود استفاده کنید و نتایج مقایسه ها را به آن انتقال دهید و در آخر هر مرحله نتایج را به آرایه اصلی برگردانید. 

عکس متحرک زیر به خوبی چگونگی عملکرد مرتب سازی ادغامی را نشان می دهد. بنده برای نوشتن این برنامه از سه حلقه ی تودرتو استفاده کردم ولی برنامه ی من بسیار ابتدایی است و شما می توانید با استفاده از کلاس ها و توابع دست ساز برنامه ی خود را حرفه ای و اصولی کنید. در ویکی پدیا می توانید تحلیل و بررسی کامل این متد مرتب سازی را مشاهده کنید.

منبع : ویکی پدیا


Opera 11.5 با "شتاب دهی سخت افزاری" می آید


مرورگر اپرا با قابلیت جدیدی وارد میدان خواهد شد، البته این بار اپرا در ارائه فناوری اولین نیست، سه مرورگر IE و Fire fox و Chrome قبل از اپرا از فناوری شتاب دهی سخت افزاری پشتیبانی می کردند و حالا اپرا نیز در نسخه جدید خود به آنها ملحق خواهد شد. ولی از قرار معلوم اپرا نمی خواهد در ارائه این فناوری کم بگذارد و با شتاب دهی سخت افزاری "کامل" روبه رو هستیم. بر خلاف مرورگر های دیگر که این قابلیت را در ویندوز ویستا و 7 ارائه می دهند با نسخه جدید اپرا در تمام سیستم عامل ها می توانید از این فناوری استفاده کنید حتی در تلفن های همراه.
شتاب دهی سخت افزاری یا (Hardware accelaration) به نوعی استفاده از سخت افزار برای افزایش سرعت پردازش های نرم افزار ها است. به طوری که پروسه های سنگین به پردازشگری که برای انجام آنها بهینه سازی شده است سپرده می شوند و به این ترتیب سرعت پردازش افزایش می یابد. توسعه دهندگان اپرا قبلا گفته بودند که توجه اصلی آنها در آینده "شتاب دهی سخت افزاری" و "Web GL" است. حالا باید دید که این فناوری چه تاثیری در تجربه ی اینترنت کاربران اپرا خواهد داشت ...
(منبع : بخش مسدود سایت اپرا !)


Intel Smart Response Technology - SRT


اینتل یکی از معدود تولید کنندگان کنترلرهای حالت جامد است و محصولات حرفه ای پسندی تولید می کند. طبیعتا SSD ها (درایو های حالت جامد) هنوز به عنوان محصولات حرفه ای به شمار می روند و کارایی بسیار بالاتری نسبت درایو های سخت رایج ارائه می دهند. ولی درایو ها ی سخت بسیار خوش قیمت تر از SSD ها هستند و در قیمت های یکسان ظرفیت ذخیره سازی بسیار بیشتری را در اختیار کاربر قرار می دهند. بهبود فناوری می توان این هزینه ها را برای SSD ها پایین بیاورد ولی همین کاهش قیمت می تواند برای HDD ها هم اتفاق بیافتد.
فناوری حالت جامد به دو طریق تجربه کاربری کاربر را بهبود می دهد، شما می توانید "ببینید" و "احساس کنید". می گویند دیدن، باور کردن است و نمی توان آن با نمودار و مدرک نشان داد. SSD ها در حال حاضر سرعتی در حدود 500 مگابایت بر ثانیه را ارائه می دهند که سه برابر سریعترین HDD های امروزی است.
با ذکر این مقدمه در باره ی SSD ها ، تکنولوژی (فناوری) جدید اینتل به نام Smart Response  یا SRT یک تکنولوژی ذخیره سازی سریع کشینگ است که کارایی کامپیوتر را افزایش می دهد. این فناوری به کاربر اجازه می دهد که از یک SSD به عنوان یک حافظه کش (Cache) بین حافظه سیستم و هارد دیسک استفاده کند. به دلیل اینکه SSD سرعت بالاتری نسبت به هارد دیسک دارد سرعت انتقال اطلاعات بین حافظه کامپیوتر و هارد دیسک را افزایش می دهد به این ترتیب که اطلاعات مورد نیاز حافظه قبلا در SSD ذخیره می شوند و در موقع نیاز به سرعت به حافظه منتقل می شوند. این فناوری در حال حاضر برای تراشه Z 68 اینتل طراحی شده است و دارندگان این تراشه می توانند از این قابلیت استفاده کنند. برای اطلاعات بیشتر می توانید به سایت رسمی اینتل مراجعه کنید.

Wolfram alpha

امروز می خوام یه سایت به درد بخور و شاهکار رو معرفی کنم که تازه با اون آشنا شدم. البته فکر کنم همه با اون آشنا بودن به جز من! به هر حال اگه دربارش پست ندم سزاوار نیست.

سایت Wolfram alpha یک موتور محاسباتی و جست و جو است که به وسیله شرکت Wolfram research ایجاد شده است. شرکتی که توسعه دهنده ی برنامه معروف Mathematica است و به وسیله دانشمند انگلیسی به نام "Stephen wolfram" تاسیس شده است در شهر "champain" ایالت ایلینوی مستقر و در چند کشور دیگر نیز دارای شعبه است. سایت والفرام آلفا نیز سرویس دیگری از این شرکت است که از سال 2009 راه اندازی شده و به صورت رایگان جواب سوال های شما را "محسابه" کرده و تحویل می دهد.
در این سایت می توانید سوال خود را در هر رشته ی دلخواه مطرح کنید و جواب آن را دریافت کنید حال آنکه سوال شما "where are you ?" (سوال از والفرام آلفا "شما کجا هستید؟") باشد یا یک معادله پیچیده ریاضی. هر چند که در این سایت برای نوشتن سوالات نیاز نیست نحو خاصی را رعایت کنید ولی باید سوال خود را طوری بنویسید که کامپیوتر بتواند آن را ترجمه و تفسیر کند. نکته ی که باید به آن اشاره کرد این است که این سرویس برای تلفن های همراه نیز ارائه خواهد شد و (با هزینه دو دلار)  می توانید جواب سولات خود را در همه جا دریافت کنید.  

http://www.wolframalpha.com/

مرتب سازی درجی - Insertion Sort


مرتب سازی درجی یا الحاقی نوع دیگری از الگوریتم های مرتب سازی است که برای مرتب کردن یک آرایه یا لیست از عناصر می توان از آن استفاده کرد. این روش برای لیست های کوچک مناسب است و برای لیست های بزرگ سرعت مناسبی ندارد. می توان این الگوریتم را به گونه ای ایجاد کرد که به محض دریافت ورودی، آنها را مرتب کند. در این روش اگر لیست مورد نظر n خانه داشته باشد ، حد اکثر به تعداد (n-1) + (n-2) + ... + 1 مقایسه و جابه جایی برای مرتب سازی لیست نیاز داریم. در شکل نیز به خوبی مراحل این الگوریتم نشان داده می شود.


در این روش ابتدا دو خانه ی اول بررسی می شوند و اگر خانه ی دوم از خانه ی اول کوچک تر بود جای خود را به خانه ی اول می دهد. در قدم بعد به سراغ خانه ی سوم می رویم. این خانه را از ابتدا با دو خانه ی قبل از خود مقایسه می کنیم. به این ترتیب مکان خانه ی سوم نیز مشخص می شود. به همین صورت کل لیست از کوچک به بزرگ مرتب می شود. در این روش هر چه جلوتر می رویم بایستی مقایسه های بیشتری انجام دهیم تا مکان خانه ی مورد نظر را تعیین کنیم. پس در لیست های بزرگ که عناصر آنها به شدت به هم ریخته هستند این روش رفته رفته سرعت خود را از دست می دهد. قطعه برنامه ی زیر قسمت مربوط به مرتب سازی درجی را نشان می دهد. در این برنامه دو حلقه ی تودرتو ایجاد شده است تا لیست مورد نظر را پیمایش کنند. در این برنامه [] l لیست مورد نظر ، i و j شمارشگر های حلقه ها و lim تعداد خانه های لیست است.


Hardware acceleration


"شتاب دهی سخت افزاری" یا Hardware acceleration به معنی استفاده از سخت افزار برای انجام سریع تر برخی از توابع ، نسبت به سرعت ممکن در نرم افزار های در حال اجرا بر روی یک CPU چند منظوره (متداول) است. 
عموما پردازنده ها ترتیبی هستند به این معنی که دستورعمل ها یک به یک اجرا می شوند. تکنیک های مختلفی برای افزایش عملکرد وجود دارد و شتاب دهی سخت افزاری یکی از آنها است. شتاب دهنده های سخت افزاری برای حجم بالای کد های محاسباتی نرم افزار ها طراحی می شوند. بسته به نوع نیاز، شتاب دهی سخت افزاری می تواند از یک واحد تابعی کوچک تا یک بلوک تابعی بزرگ متفاوت باشد. (برای مثال "پیشبینی حرکت" یا motion estimation در mpeg-2 ) . سخت افزار هایی که عمل شتاب دهی را انجام می دهند ، هنگامی که در یک واحد مجزا از CPU قرار دارند ، "شتاب دهنده ی سخت افزاری" یا برای نمونه "شتاب دهنده ی گرافیکی" یا "شتاب دهنده ی ممیز شناور" و .. نامیده می شوند. این فناوری در صنعت سرور نیز محبوب شده است چون سرعت کنترل اسپم ها را به طور قابل توجهی افزایش می دهد.
Wikipedia.org

جست و جوی دودویی - binary search


در پست های قبل با روش جست و جوی خطی آشنا شدیم و دیدیم که در این شیوه از ابتدای لیست یا آرایه به دنبال عضو مورد نظر می گردیم و یکی یکی عناصر را بررسی کرده تا عنصر مورد نظر را بیابیم. پس می توان نتیجه گرفت که در این روش اگر لیست ما برای مثال 100 عضو داشته باشد برای پیدا کردن یک عضو دلخواه بایستی حد اکثر 100 جست و جو انجام دهیم. همان گونه که می بینید این روش زیاد سرعت مناسبی ندارد و در لیست های بزرگ ایجاد مشکل می کند. راه منطقی نیز این نیست که برای پیدا کردن یک کتاب در کتابخانه از ابتدا کل کتاب ها را بگردید چون در کتابخانه کتاب ها به صورت طبقه بندی شده قرار دارند و برای پیدا کتاب مورد نظر باید درست به قسمت مربوط به آن رجوع کنید. 
این الگوریتم جست و جو ، جست و جوی دودویی یا باینری نامیده می شود و به نسبت جست و جوی خطی سرعت بالا تری دارد. ولی پیشنیاز این روش این است که لیست مورد نظر ما مرتب باشد. یعنی عناصر به ترتیب از کوچک به بزرگ چیده شده باشند. اگر این پیشنیاز رعایت شده باشد این روش موثر است و جواب صحیح باز می گرداند و سرعت جست و جو را تا حد زیادی افزایش می دهد. در این روش در یک لیست n عنصری حداکثر به تعداد log2 (n+1) جست و جو نیاز داریم تا عنصر مورد نظر خود را بیابیم.
در این روش خانه ی وسط لیست را در نظر می گیریم ، اگر عنصر مورد نظر ما از خانه ی وسط لیست بیشتر بود پس باید در قسمت بالای لیست به دنبال آن بگردیم و اگر از خانه ی وسط لیست کوچک تر بود پس باید در قسمت پایین لیست جست و جو را ادامه دهیم . پس در اولین قدم نیمی از لیست ما حذف می شود و جست و جو در نیمه دیگر لیست ادامه می یابد. سپس دوباره خانه ی وسط از لیست باقی مانده را با عنصر مورد جست و جو مقایسه می کنیم. مثل قدم اول اگر آن از خانه وسط بیشتر بود به قسمت بالای لیست و اگر از خانه ی وسط کوچک تر بود به قسمت پایین لیست می رویم و جست و جو را در آن ادامه می دهیم. با این روش هر دفعه لیست مورد نظر کوچکتر می شود و در نهایت به عنصر مورد جست و جو می رسیم.

تکه برنامه بالا با زبان c++ موشته شده است و قسمت جست و جوی باینری را نشان می دهد. در این برنامه l [] لیست مرتب شده ، hi خانه ی آخر لیست و lo خانه ی پایین لیست ، mid خانه ی وسط لیست و a عنصر مورد جست و جو است.

Accelerated Processing Unit - APU

واحد پردازش شتاب یافته یا "Accelerated Processing Unit" به اختصار APU یک سیستم پردازشی است که شامل قابلیت های پردازشی اضافی برای افزایش سرعت یک یا چند نوع محاسبات در CPU می شود. این ممکن است شامل یک واحد پردازش گرافیکی (GPU) یا هر سیستم پردازشی مشابه باشد. در دنیای سخت افزار رایانه APU بیشتر به یک واحد پردازشی اشاره دارد که CPU و GPU را به صورت یکپارچه در یک قطعه (Die) گرد آورده است و باعث افزایش نرخ انتقال اطلاعات و کاهش توان مصرفی شده است. مثال هایی برای APU می تواند شامل فناوری های مانند AMD Fusion ، Intel HD Graphics و Nvidia Project Denver باشد.