Original Title: Evaluation of Strategies for the Development of Efficient Code for Raspberry Pi Devices
Source: doi.org/10.3390/s18114066
Disclaimer: Summary generated by AI based on the provided document. Please refer to the original paper for full scientific accuracy.

ការវាយតម្លៃយុទ្ធសាស្ត្រសម្រាប់ការអភិវឌ្ឍកូដដែលមានប្រសិទ្ធភាពសម្រាប់ឧបករណ៍ Raspberry Pi

ចំណងជើងដើម៖ Evaluation of Strategies for the Development of Efficient Code for Raspberry Pi Devices

អ្នកនិពន្ធ៖ Javier Corral-García (CénitS–COMPUTAEX), José-Luis González-Sánchez (CénitS–COMPUTAEX), Miguel-Ángel Pérez-Toledano (University of Extremadura)

ឆ្នាំបោះពុម្ព៖ 2018, Sensors

វិស័យសិក្សា៖ Computer Science / Internet of Things (IoT)

១. សេចក្តីសង្ខេបប្រតិបត្តិ (Executive Summary)

បញ្ហា (The Problem)៖ ការស្រាវជ្រាវនេះដោះស្រាយបញ្ហានៃកង្វះការយកចិត្តទុកដាក់លើការសរសេរកូដដែលមានប្រសិទ្ធភាព (Efficient Code) សម្រាប់ឧបករណ៍ IoT ជាពិសេស Raspberry Pi ដែលមានធនធាន និងថាមពលកំណត់។

វិធីសាស្ត្រ (The Methodology)៖ អ្នកនិពន្ធបានធ្វើការពិសោធន៍ប្រៀបធៀបពេលវេលាប្រតិបត្តិការរវាងកូដស្តង់ដារ និងកូដដែលបានកែសម្រួលដោយដៃ (Manually optimized) ដោយប្រើប្រាស់បច្ចេកទេសចំនួន ២៥ ផ្សេងគ្នា។

លទ្ធផលសំខាន់ៗ (The Verdict)៖

២. ការវិភាគលើប្រសិទ្ធភាព និងដែនកំណត់ (Performance & Constraints)

វិធីសាស្ត្រ (Method) គុណសម្បត្តិ (Pros) គុណវិបត្តិ (Cons) លទ្ធផលគន្លឹះ (Key Result)
Standard Code (Baseline)
ការសរសេរកូដតាមរបៀបធម្មតាដោយមិនមានការកែសម្រួលបច្ចេកទេស
ងាយស្រួលសរសេរ និងងាយស្រួលអានសម្រាប់អ្នកចាប់ផ្តើមដំបូង ប្រើប្រាស់ធនធានច្រើន និងចំណាយពេលប្រតិបត្តិយូរ (Execution time) ដំណើរការយឺតបំផុត ជាពិសេសនៅពេលដែលមិនប្រើ Compiler Optimization (O0)
GCC Automatic Optimization (O3)
ការប្រើប្រាស់មុខងារធ្វើឱ្យប្រសើរដោយស្វ័យប្រវត្តិរបស់ GCC Compiler (កម្រិត O3)
ចំណេញពេលអ្នកសរសេរកម្មវិធី ព្រោះ Compiler ធ្វើការងារភាគច្រើនដោយស្វ័យប្រវត្តិ មិនអាចកែសម្រួលកូដដែលពាក់ព័ន្ធនឹងតក្កវិទ្យា (Logic) ឬរចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) បានគ្រប់ជ្រុងជ្រោយ បង្កើនល្បឿនបានយ៉ាងល្អ ប៉ុន្តែនៅតែមានចំណុចខ្វះខាតបើធៀបនឹងការកែសម្រួលដោយដៃបន្ថែម
Manual Efficient Code Techniques
ការប្រើប្រាស់បច្ចេកទេសសរសេរកូដឱ្យមានប្រសិទ្ធភាពដោយដៃ (ឧ. Row-major accessing, Passing by reference)
អាចកាត់បន្ថយពេលវេលាប្រតិបត្តិបានយ៉ាងច្រើនសន្ធឹកសន្ធាប់ និងសន្សំសំចៃថាមពល ទាមទារចំណេះដឹងស៊ីជម្រៅពីភាសា C/C++ និងធ្វើឱ្យកូដពិបាកអានក្នុងករណីខ្លះ បច្ចេកទេសខ្លះ (ដូចជា Exception handling និង Passing structures by reference) អាចបង្កើនល្បឿនដល់ទៅ ៩៩%

ការចំណាយលើធនធាន (Resource Cost)៖ ការសិក្សានេះប្រើប្រាស់ឧបករណ៍ដែលមានតម្លៃសមរម្យ និងអាចរកបានងាយស្រួល ដែលសមស្របសម្រាប់ការស្រាវជ្រាវនៅកម្ពុជា។

៣. ការពិនិត្យសម្រាប់បរិបទកម្ពុជា/អាស៊ីអាគ្នេយ៍

ភាពលំអៀងនៃទិន្នន័យ (Data Bias)៖

ការពិសោធន៍ត្រូវបានធ្វើឡើងនៅក្នុងមន្ទីរពិសោធន៍នៅអឺរ៉ុប ប៉ុន្តែប្រើប្រាស់ស្តង់ដារកូដ C++ និងឧបករណ៍ Raspberry Pi ដែលជាសកល។ លទ្ធផលនេះមិនមានភាពលំអៀងភូមិសាស្ត្រទេ ព្រោះវាផ្អែកលើតក្កវិទ្យាកុំព្យូទ័រសុទ្ធសាធ។

លទ្ធភាពនៃការអនុវត្ត (Applicability)៖

វិធីសាស្ត្រនេះមានសារៈសំខាន់ខ្លាំងណាស់សម្រាប់កម្ពុជា ជាពិសេសក្នុងការអភិវឌ្ឍប្រព័ន្ធ IoT ដែលមានតម្លៃទាប។

ការអនុវត្តបច្ចេកទេសទាំងនេះនឹងជួយឱ្យអ្នកអភិវឌ្ឍន៍ខ្មែរអាចបង្កើតផលិតផល IoT ដែលមានគុណភាពខ្ពស់ ទោះបីជាប្រើប្រាស់ផ្នែករឹងដែលមានកម្លាំងខ្សោយក៏ដោយ។

៤. ផែនការសកម្មភាពសម្រាប់និស្សិត (Actionable Roadmap)

ដើម្បីអនុវត្តតាមការសិក្សានេះ និស្សិតគួរអនុវត្តតាមជំហានខាងក្រោម៖

  1. សិក្សាមូលដ្ឋានគ្រឹះ C/C++ និង Memory: និស្សិតត្រូវស្វែងយល់ឱ្យច្បាស់ពីរបៀបដែល C++ គ្រប់គ្រង Memory (ឧ. Pointers, References) និងការប្រើប្រាស់ GCC Compiler
  2. រៀបចំឧបករណ៍ពិសោធន៍: ដំឡើង Raspberry Pi ជាមួយ Raspbian OS និងសរសេរកូដសាកល្បងដោយប្រើបណ្ណាល័យ chrono ដើម្បីវាស់វែងពេលវេលាប្រតិបត្តិ
  3. អនុវត្តបច្ចេកទេសសំខាន់ៗ: ចាប់ផ្តើមអនុវត្តបច្ចេកទេសដែលមានឥទ្ធិពលខ្លាំងដូចជា 'Passing structures by reference' និង 'Row-major accessing' ទៅក្នុងកូដដែលមានស្រាប់
  4. ការប្រៀបធៀប និងវិភាគ: ធ្វើការប្រៀបធៀបល្បឿនរវាងកូដធម្មតា និងកូដដែលបានកែសម្រួល ដោយប្រើ O3 flag របស់ GCC ដើម្បីមើលថាតើការកែដោយដៃនៅតែចាំបាច់ដែរឬទេ
  5. អនុវត្តក្នុងគម្រោងជាក់ស្តែង: យកចំណេះដឹងនេះទៅប្រើក្នុងគម្រោង IoT ជាក់ស្តែង ដូចជាប្រព័ន្ធកាមេរ៉ាសុវត្ថិភាព ឬឧបករណ៍វាស់សីតុណ្ហភាព ដើម្បីកាត់បន្ថយការប្រើប្រាស់ថាមពល

៥. វាក្យសព្ទបច្ចេកទេស (Technical Glossary)

ពាក្យបច្ចេកទេស ការពន្យល់ជាខេមរភាសា (Khmer Explanation) និយមន័យសាមញ្ញ (Simple Definition)
Single-board computers (SBCs) ជាប្រភេទកុំព្យូទ័រពេញលេញមួយដែលសមាសធាតុសំខាន់ៗទាំងអស់ (ដូចជា CPU, RAM, និងរន្ធដោត I/O) ត្រូវបានដាក់បញ្ចូលនៅលើបន្ទះសៀគ្វីតែមួយ។ វាត្រូវបានរចនាឡើងសម្រាប់ការប្រើប្រាស់ថាមពលតិច និងមានទំហំតូច។ ដូចជាទូរស័ព្ទស្មាតហ្វូនដែលដកអេក្រង់ចេញ វាមានខួរក្បាលនិងអង្គចងចាំគ្រប់គ្រាន់ដើម្បីដំណើរការការងារកុំព្យូទ័រ ប៉ុន្តែមានតម្លៃថោកនិងសន្សំសំចៃភ្លើង។
Function inlining ជាបច្ចេកទេសបង្កើនល្បឿនកូដ ដែល Compiler យកកូដទាំងមូលនៅក្នុងអនុគមន៍ (Function) មកដាក់ជំនួសកន្លែងដែលហៅវាដោយផ្ទាល់ ដើម្បីកុំឱ្យខាតពេលក្នុងដំណើរការលោតទៅរកទីតាំងអនុគមន៍នោះ។ ប្រៀបដូចជាការចម្លងវិធីធ្វើម្ហូបមកសរសេរក្នុងសៀវភៅផ្ទាល់ ជំនួសឱ្យការសរសេរថា "សូមបើកមើលទំព័រទី ១០" រាល់ពេលដែលចង់ធ្វើម្ហូបនោះ។
Loop unrolling ជាវិធីសាស្ត្រកែប្រែរង្វិលជុំ (Loop) ឱ្យធ្វើការងារច្រើនដងក្នុងមួយជុំ ដើម្បីកាត់បន្ថយចំនួនដងនៃការត្រួតពិនិត្យលក្ខខណ្ឌ (Condition check) និងការលោតត្រឡប់មកដើម Loop វិញ។ ដូចជាការយួរទឹកម្តងពីរប៊ីដុងក្នុងមួយជើង ជំនួសឱ្យការដើរទៅមកពីរជើងដើម្បីយួរម្តងមួយប៊ីដុង ដែលជួយចំណេញពេលដើរ។
Pointer aliasing កើតឡើងនៅពេលដែលមាន Pointer ពីរឬច្រើនចង្អុលទៅកាន់ទីតាំងអង្គចងចាំ (Memory) តែមួយ ដែលធ្វើឱ្យកុំព្យូទ័រពិបាកក្នុងការបង្កើនល្បឿន (Optimize) ព្រោះវាខ្លាចមានការកែប្រែទិន្នន័យដោយមិនដឹងខ្លួនតាមរយៈ Pointer មួយផ្សេងទៀត។ ប្រៀបដូចជាមនុស្សពីរនាក់មានសោរចូលបន្ទប់តែមួយ បើមានម្នាក់ចូលទៅរៀបចំរបស់របរ ម្នាក់ទៀតអាចនឹងច្រឡំកន្លែង ដូច្នេះត្រូវតែប្រយ័ត្នជានិច្ច។
Dead code elimination ជាដំណើរការដែល Compiler លុបចោលផ្នែកនៃកូដដែលមិនត្រូវបានប្រើប្រាស់ ឬមិនមានឥទ្ធិពលលើលទ្ធផលចុងក្រោយនៃកម្មវិធី ដើម្បីឱ្យកម្មវិធីមានទំហំតូចជាងមុននិងដំណើរការលឿនជាងមុន។ ដូចជាការកាត់មែកឈើងាប់ៗចេញពីដើមឈើ ដើម្បីឱ្យវាលូតលាស់ល្អ និងមិនស្ុគស្មាញមើលទៅស្អាត។
Row-major accessing ជាវិធីសាស្ត្រអានទិន្នន័យពីតារាង (Array) តាមលំដាប់ជួរដេក (Row) ជាមុន ដែលស្របទៅនឹងរបៀបដែលភាសា C/C++ រក្សាទុកទិន្នន័យក្នុង Memory ធ្វើឱ្យការអានមានល្បឿនលឿនដោយសារ Cache Hit។ ដូចជាការអានសៀវភៅតាមលំដាប់បន្ទាត់ពីឆ្វេងទៅស្តាំ ជំនួសឱ្យការអានតួអក្សរទីមួយនៃគ្រប់បន្ទាត់ចុះក្រោមដែលធ្វើឱ្យពិបាកយល់និងយឺត។
Common subexpression elimination ជាការបង្កើនប្រសិទ្ធភាពដោយចៀសវាងការគណនារូបមន្តដដែលៗច្រើនដង។ កុំព្យូទ័រនឹងគណនាវាតែម្តង រួចរក្សាទុកលទ្ធផលក្នុងអថេរមួយដើម្បីប្រើប្រាស់នៅពេលក្រោយ។ ដូចជាការគណនាថ្លៃម្ហូបសរុបទុកក្នុងក្រដាសមួយ ជំនួសឱ្យការបូកលេខដដែលៗរាល់ពេលដែលភ្ញៀវសួររកតម្លៃ។

៦. ប្រធានបទពាក់ព័ន្ធ (Further Reading)

អត្ថបទដែលបានបោះពុម្ពនៅលើ KhmerResearch ដែលទាក់ទងនឹងប្រធានបទនេះ៖

ប្រធានបទ និងសំណួរស្រាវជ្រាវដែលទាក់ទងនឹងឯកសារនេះ ដែលអ្នកអាចស្វែងរកបន្ថែម៖