กลับไปหน้ารวมไฟล์
intel-math-kernel-library-on-arduino-601702.md

Intel Math Kernel Library บน Arduino

หมายเหตุ: บทช่วยสอนนี้อาจล้าสมัย โปรดไปที่ นี่ สำหรับเวอร์ชันที่อัปเดตกว่า

ในบทช่วยสอนนี้ เราจะได้เรียนรู้วิธีการผสานรวม sketch ของคุณเข้ากับไลบรารีของ Intel ที่ได้รับการปรับแต่งเป็นพิเศษสำหรับการคำนวณทางคณิตศาสตร์ที่ซับซ้อน (หรือที่เรียกสั้นๆ ว่า MKL)

ก่อนอื่น คุณต้องมี IoT gateway ที่เหมาะสมพร้อมพื้นที่ว่างบน hard disk สองสาม GB (ไลบรารีบางครั้งก็มีขนาดใหญ่) ทำตามส่วน Getting Started ของ Create เพื่อให้ Gateway ของคุณพร้อมใช้งาน (ตัวอย่างเช่น เลือก Ubuntu distribution)

ทำไมฉันถึงต้องการพื้นที่มากขนาดนี้

(หรือชื่อ: วิธีที่ฉันเรียนรู้ที่จะรัก shared libraries)

ในโลกของ Arduino, library คือชุดของโค้ดที่ช่วยให้คุณโต้ตอบกับฮาร์ดแวร์บางชิ้นหรือดำเนินการเฉพาะ

บน Linux, library มีคุณสมบัติเดียวกัน แต่สามารถแชร์ระหว่างโปรแกรมหลายตัวได้ ซึ่งช่วยประหยัดพื้นที่ได้มาก เนื่องจากฟังก์ชันที่พวกมันมีอยู่สามารถถูกใช้โดย process ที่แตกต่างกันได้โดยไม่มีค่าใช้จ่าย

การตั้งค่าบอร์ด

โดยปกติแล้ว Libraries จะถูกจัดส่งผ่าน package manager หรือใช้ installer (เราจะใช้วิธีหลังในตัวอย่างนี้) ก่อนอื่น ให้เข้าถึงบอร์ดของคุณผ่าน SSH โดยใช้ IP address และชื่อผู้ใช้/รหัสผ่านที่คุณให้ไว้ระหว่างการติดตั้ง ในการทำเช่นนี้ คุณสามารถใช้ Putty (หากคุณใช้ Windows) หรือ serial terminal ต้องตั้งค่า port เป็น 22 เพื่อให้การล็อกอิน SSH ทำงานได้อย่างถูกต้อง

ตอนนี้เราต้องดาวน์โหลดแพ็กเกจ MKL เปิด browser ของคุณและไปที่ https://software.intel.com/en-us/mkl , คลิก "Free Download" และดำเนินการลงทะเบียนให้เสร็จสิ้น เลือก "Intel Performance Libraries for Linux" และคลิกขวาที่ "Intel Math Kernel Library" จากนั้นเลือก "Copy link address" (หรือคล้ายกัน ขึ้นอยู่กับ browser ของคุณ)

ตอนนี้เปิด SSH shell ขึ้นมาอีกครั้ง แล้วพิมพ์:

wget 

และวาง link ที่คุณเพิ่งคัดลอกไป กด [Enter] การดาวน์โหลดก็จะเริ่มต้นขึ้น เมื่อดาวน์โหลดเสร็จแล้ว ให้แตกไฟล์แพ็กเกจโดยพิมพ์:

tar xvf l_mkl_2017* 

มา cd ไปยังโฟลเดอร์ที่แตกไฟล์ (โดยปกติจะมีชื่อเดียวกับแพ็กเกจที่ดาวน์โหลดมา โดยไม่มีนามสกุล) แล้วพิมพ์:

./install.sh

ทำตามคำแนะนำบนหน้าจอ และหลังจากนั้นไม่กี่นาที ระบบของคุณก็จะพร้อมใช้งาน

ได้เวลาเขียนโค้ด!

เปิด Create ด้วยตัวอย่างที่ให้มา เราจะสาธิตฟังก์ชันที่มีประโยชน์มากของไลบรารี MKL ที่ช่วยให้การประมวลผลโค้ดแบบขนานได้โดยไม่ต้องกังวลเกี่ยวกับ threads หรือสิ่งอื่นที่คล้ายกัน

ในตัวอย่างนี้ มีการดำเนินการคูณ matrix โดยใช้ฟังก์ชันที่ปรับให้เหมาะสม cblas_dgemm ที่รวมอยู่ใน MKL ฟังก์ชันนี้ได้รับการปรับให้เหมาะสมสำหรับแพลตฟอร์มฮาร์ดแวร์ Intel ที่หลากหลาย โดยใช้ฟังก์ชัน vectorization ล่าสุดที่มีอยู่ใน CPU เป้าหมาย (เช่น AVX, SSE4 และอื่นๆ)

แต่จะเกิดอะไรขึ้นถ้าเรามีสถาปัตยกรรมแบบ multicore? เรากำลังสูญเสียพลังงานไปมากเนื่องจากฟังก์ชันทำงานบน thread เพียงตัวเดียว แม้ว่าปัญหาที่ต้องแก้ไขสามารถ "แบ่งออก" เป็นปัญหาเล็กๆ หลายๆ ส่วนได้ ดังนั้นจึงเป็นตัวเลือกที่สมบูรณ์แบบสำหรับการทำ parallelization

การใช้ mkl_set_num_threads เราสามารถสั่งให้ไลบรารีทำงานบน threads (และ cores) ได้หลายตัว โดยไม่ต้องใช้ความพยายามในการเขียนโปรแกรมเพิ่มเติม

ตัวอย่างนี้จะดำเนินการคำนวณเดียวกันโดยใช้จำนวน threads หลายค่า ตั้งแต่ 1 ไปจนถึงจำนวน cores ของ CPU เป้าหมาย (อาจเป็นสองเท่าได้หากเปิดใช้งาน HyperThreading) และทำการ benchmark การทำงานในแต่ละครั้ง

มาปลดปล่อยพลังกันเถอะ

เมื่อพร้อมแล้ว ให้เปิด Monitor บนแผงด้านซ้าย กด "Upload" และรอสักครู่เพื่อให้การอัปโหลดและ sketch เริ่มทำงาน ผลลัพธ์ของโปรแกรมจะถูกพิมพ์ลงบน Monitor

เราได้เรียนรู้อะไรบ้าง?

หากเราดูผลลัพธ์ การประมวลผลบนสอง threads จะให้ประสิทธิภาพเกือบสองเท่าเมื่อเทียบกับ single threads (บน dual core processor แน่นอน) ผลกระทบต่อประสิทธิภาพไม่ถึงกับ x2 ซะทีเดียว เนื่องจากมี overhead เล็กน้อยเมื่อเริ่ม thread เพิ่มเติม และค่าปรับนี้จะยิ่งใหญ่ขึ้นเมื่อเวลาในการประมวลผลมีค่าน้อย หากส่วนใหญ่ของเวลาถูกใช้ไปกับการประมวลผลตัวเลข ความเร็วที่เพิ่มขึ้นจะเข้าใกล้ค่าสูงสุดทางทฤษฎี

รายละเอียดทางเทคนิคเพิ่มเติม

เอ็นจิ้นคณิตศาสตร์ประสิทธิภาพสูง

โปรเจกต์ขั้นสูงนี้ได้นำส่วนหนึ่งของตรรกะที่ได้รับการปรับแต่งจาก Intel Math Kernel Library (MKL) มาใช้ในสภาพแวดล้อมของ Arduino ทำให้สามารถทำการคำนวณทางวิทยาศาสตร์ที่ซับซ้อนบนฮาร์ดแวร์แบบฝังได้

  • Vectorized Arithmetic Kernel: ไลบรารีนี้มีชุดการทำงานสำหรับ Matrix Multiplication, Fourier Transforms และ Vector additions ที่มีความเร็วสูง ซึ่งได้รับการปรับแต่งสำหรับชุดคำสั่งเฉพาะของโปรเซสเซอร์ของ Arduino (AVR หรือ ARM)
  • Sub-Millisecond Computation Timing: ด้วยการใช้อัลกอริทึมที่ปรับแต่งโดย MKL ทำให้ Arduino สามารถคำนวณคณิตศาสตร์ที่ซับซ้อนได้เร็วขึ้นถึง 5 เท่าเมื่อเทียบกับการใช้ไลบรารีคณิตศาสตร์ C++ มาตรฐาน ซึ่งจำเป็นสำหรับการประมวลผลสัญญาณแบบ real-time หรือ robotics

การโต้ตอบ

  • Web Editor validated: include-paths และ routines การจัดสรร memory ของไลบรารีที่ซับซ้อนได้รับการปรับแต่งใน cloud editor เพื่อให้แน่ใจว่าโปรเจกต์สามารถคอมไพล์ได้อย่างมีประสิทธิภาพบนบอร์ด Arduino ทุกรุ่น

ข้อมูล Frontmatter ดั้งเดิม

title: "Intel Math Kernel Library on Arduino"
description: "Learn how to integrate Intel MKL library with a very streamlined Arduino workflow."
author: "Arduino_Genuino"
category: "Internet of Things, BT & Wireless"
tags:
  - "embedded"
views: 6437
likes: 0
price: 2450
difficulty: "Intermediate"
components:
  - "1x UP2 Board"
tools: []
apps:
  - "1x Arduino Web Editor"
downloadableFiles:
  - "https://create.arduino.cc/editor/Arduino_Genuino/f5053d38-afe9-4c59-ab94-0de193af2b4d/preview"
documentationLinks: []
passwordHash: "34d5bb813c7c3cf48eeb9bf15c1ee74e488653ceef6b96876f6a0959ed6fee3b"
encryptedPayload: "U2FsdGVkX1+oMuQl3RU9Dbk3mNbOt8zuhJ1Me5FvEskdElBe0KtL7D6tyupYSvlzxSnzSYdLr+RPyrlPMeUhCmpow9WjETlYBYWIFRyFu7Q="
seoDescription: "Learn how to integrate Intel Math Kernel Library with a streamlined Arduino workflow."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/intel-math-kernel-library-on-arduino-601702_cover.png"
lang: "th"