បញ្ហា (The Problem)៖ ការស្រាវជ្រាវនេះដោះស្រាយបញ្ហានៃកង្វះការយកចិត្តទុកដាក់លើការសរសេរកូដដែលមានប្រសិទ្ធភាព (Efficient Code) សម្រាប់ឧបករណ៍ IoT ជាពិសេស Raspberry Pi ដែលមានធនធាន និងថាមពលកំណត់។
វិធីសាស្ត្រ (The Methodology)៖ អ្នកនិពន្ធបានធ្វើការពិសោធន៍ប្រៀបធៀបពេលវេលាប្រតិបត្តិការរវាងកូដស្តង់ដារ និងកូដដែលបានកែសម្រួលដោយដៃ (Manually optimized) ដោយប្រើប្រាស់បច្ចេកទេសចំនួន ២៥ ផ្សេងគ្នា។
លទ្ធផលសំខាន់ៗ (The Verdict)៖
| វិធីសាស្ត្រ (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)៖ ការសិក្សានេះប្រើប្រាស់ឧបករណ៍ដែលមានតម្លៃសមរម្យ និងអាចរកបានងាយស្រួល ដែលសមស្របសម្រាប់ការស្រាវជ្រាវនៅកម្ពុជា។
ការពិសោធន៍ត្រូវបានធ្វើឡើងនៅក្នុងមន្ទីរពិសោធន៍នៅអឺរ៉ុប ប៉ុន្តែប្រើប្រាស់ស្តង់ដារកូដ C++ និងឧបករណ៍ Raspberry Pi ដែលជាសកល។ លទ្ធផលនេះមិនមានភាពលំអៀងភូមិសាស្ត្រទេ ព្រោះវាផ្អែកលើតក្កវិទ្យាកុំព្យូទ័រសុទ្ធសាធ។
វិធីសាស្ត្រនេះមានសារៈសំខាន់ខ្លាំងណាស់សម្រាប់កម្ពុជា ជាពិសេសក្នុងការអភិវឌ្ឍប្រព័ន្ធ IoT ដែលមានតម្លៃទាប។
ការអនុវត្តបច្ចេកទេសទាំងនេះនឹងជួយឱ្យអ្នកអភិវឌ្ឍន៍ខ្មែរអាចបង្កើតផលិតផល IoT ដែលមានគុណភាពខ្ពស់ ទោះបីជាប្រើប្រាស់ផ្នែករឹងដែលមានកម្លាំងខ្សោយក៏ដោយ។
ដើម្បីអនុវត្តតាមការសិក្សានេះ និស្សិតគួរអនុវត្តតាមជំហានខាងក្រោម៖
| ពាក្យបច្ចេកទេស | ការពន្យល់ជាខេមរភាសា (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 | ជាការបង្កើនប្រសិទ្ធភាពដោយចៀសវាងការគណនារូបមន្តដដែលៗច្រើនដង។ កុំព្យូទ័រនឹងគណនាវាតែម្តង រួចរក្សាទុកលទ្ធផលក្នុងអថេរមួយដើម្បីប្រើប្រាស់នៅពេលក្រោយ។ | ដូចជាការគណនាថ្លៃម្ហូបសរុបទុកក្នុងក្រដាសមួយ ជំនួសឱ្យការបូកលេខដដែលៗរាល់ពេលដែលភ្ញៀវសួររកតម្លៃ។ |
អត្ថបទដែលបានបោះពុម្ពនៅលើ KhmerResearch ដែលទាក់ទងនឹងប្រធានបទនេះ៖
ប្រធានបទ និងសំណួរស្រាវជ្រាវដែលទាក់ទងនឹងឯកសារនេះ ដែលអ្នកអាចស្វែងរកបន្ថែម៖