Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial Internet of Things >> Tertanam

Menguasai tantangan pemrograman multicore dan debugging

Pada artikel ini kita akan membahas berbagai aspek pemrosesan multicore, termasuk melihat berbagai jenis prosesor multicore dan mengapa perangkat ini menjadi umum dan populer saat ini. Kami kemudian akan melihat beberapa tantangan yang ditimbulkan dengan memiliki lebih dari satu inti pada sebuah chip, dan bagaimana debugger multicore-aware modern dapat membantu membuat tugas kompleks ini lebih mudah dikelola.

Kinerja Sistem

Ada banyak cara untuk meningkatkan kinerja sistem komputasi tertanam mulai dari algoritma kompiler pintar hingga solusi perangkat keras yang efisien. Optimalisasi kompiler penting untuk mendapatkan penjadwalan instruksi yang paling efisien dari kode bahasa tingkat tinggi yang mudah dibaca dan dipahami. Selain itu, sistem dapat memanfaatkan paralelisme yang tersedia dalam proyek untuk memproses lebih dari satu hal pada satu waktu. Dan tentu saja menskalakan frekuensi clock bisa menjadi cara yang efektif untuk mendapatkan performa lebih dari sistem komputasi Anda.

Sayangnya, hari-hari ketika kecepatan clock dapat diasumsikan meningkat secara geometris telah berlalu. Dan pengoptimalan kode hanya dapat memberi Anda begitu banyak peningkatan, terutama sekarang, setelah beberapa generasi pengembangan teknologi kompiler. Hal ini membuat kami memandang paralelisme sebagai peluang terbaik untuk terus meningkatkan kinerja sistem kami seiring berjalannya waktu.

Paralelisme

Menggali sumur adalah tugas yang sulit diparalelkan. Orang lain dapat membantu, menyekop tanah, tetapi penggalian yang sebenarnya di dalam lubang biasanya adalah pekerjaan satu orang. Akibatnya, menambahkan lebih banyak orang ke dalam lubang tidak akan menyelesaikan pekerjaan lebih cepat. Faktanya, yang lain mungkin hanya menghalangi dan memperlambat prosesnya. Beberapa tugas tidak cocok untuk paralelisasi.

Tugas lain mudah diparalelkan. Menggali parit adalah tugas yang cocok untuk paralelisasi. Banyak orang dapat bekerja berdampingan.

Gambar ini menunjukkan bentuk paralelisme yang disebut MIMD, Multiple Instruction Multiple Data. Setiap penggali adalah unit yang terpisah dan dapat melakukan tugas yang berbeda. Dalam hal ini Anda dapat membayangkan bahwa empat penggali dapat menyelesaikan pekerjaan dalam waktu sekitar 1/4 th waktu seorang penggali.

Dengan SIMD, Single Instruction Multiple Data, seorang penggali tunggal dapat menggunakan sekop seperti ini.

Unit SIMD hanya dapat melakukan satu jenis komputasi pada satu waktu, tetapi dapat melakukannya pada beberapa bagian data secara paralel. Jenis instruksi ini umum di unit pemrosesan vektor di banyak prosesor. Ini berguna jika data Anda sangat teratur dan Anda perlu melakukan operasi yang sama berulang-ulang pada kumpulan data besar seperti dalam pemrosesan gambar. Namun, untuk tugas komputasi yang lebih umum, model ini tidak memiliki fleksibilitas dan tidak akan menghasilkan peningkatan kinerja.

Hal ini membawa kita pada pilihan untuk menempatkan beberapa subsistem CPU penuh pada satu chip, menciptakan prosesor multicore. Beberapa inti dalam satu chip dapat meningkatkan kinerja. Setiap inti adalah CPU penuh dan dapat bekerja secara independen atau bersama dengan inti lainnya.

Berbagai Jenis Pemrosesan Multicore

Ada berbagai kombinasi jenis inti yang mungkin Anda miliki pada chip prosesor serta bagaimana pekerjaan didistribusikan di antara mereka.

Prosesor multicore homogen memiliki dua atau lebih salinan dari inti prosesor yang sama. Setiap inti berjalan secara mandiri dan dapat berkomunikasi dan menyinkronkan dengan inti lain melalui sejumlah mekanisme seperti memori bersama atau sistem kotak surat. Setiap prosesor memiliki register dan unit fungsinya sendiri, dan mungkin memiliki memori atau cache lokalnya sendiri. Namun, yang membuat ini homogen adalah kenyataan bahwa semua inti yang kita lihat memiliki tipe yang sama.

Jenis lain dari beberapa inti chip disebut sebagai multicore heterogen dengan dua atau lebih jenis inti CPU yang berbeda. Di sini inti mungkin memiliki karakteristik yang sangat berbeda yang membuatnya cocok untuk bagian yang berbeda dari kebutuhan pemrosesan sistem. Salah satu contohnya mungkin chip komunikasi Bluetooth di mana satu inti didedikasikan untuk mengelola tumpukan protokol Bluetooth sementara inti lainnya mungkin mengelola komunikasi eksternal, pemrosesan aplikasi, antarmuka manusia, dll. Jenis chip inti ganda ini dapat digunakan untuk aplikasi yang membutuhkan keduanya. kinerja khusus waktu nyata di satu inti dan kemampuan manajemen sistem di sisi lain.

Sekarang kita akan melihat bagaimana core digunakan. Multiprocessing simetris (SMP) terjadi ketika Anda memiliki lebih dari satu inti, dan inti menjalankan basis kode proyek yang sama. Inti yang berbeda mungkin menjalankan bagian kode yang berbeda pada saat yang sama, tetapi kode tersebut dibuat sebagai satu proyek dan dikirim ke inti yang terpisah oleh beberapa program pengontrol seperti sistem operasi waktu nyata (RTOS). Karena kebutuhan, inti yang bekerja dengan cara ini harus dari jenis yang sama karena semuanya menggunakan kode proyek yang sama yang dikompilasi untuk satu jenis prosesor.

Multiprosesor asimetris (AMP) terjadi ketika Anda memiliki lebih dari satu inti atau prosesor, dan setiap prosesor menjalankan aplikasi proyeknya sendiri. Inti yang terpisah dapat menyinkronkan atau berkomunikasi dari waktu ke waktu, tetapi masing-masing memiliki basis kode sendiri yang dijalankan. Karena mereka masing-masing menjalankan proyeknya sendiri, inti ini dapat memiliki tipe yang berbeda, atau inti yang heterogen. Namun, ini bukan persyaratan. Jika dua atau lebih dari jenis inti yang sama menjalankan kode proyek yang berbeda, mereka adalah inti yang homogen, menjalankan AMP.

Perhatikan bahwa untuk operasi SMP Anda harus memiliki beberapa inti homogen karena semuanya menjalankan kode dari basis kode proyek tunggal yang sama. Namun, jika Anda memiliki beberapa proyek dengan basis kode yang berbeda untuk menjalankan inti yang berbeda, ini dapat menjadi inti yang berbeda seperti dalam sistem yang heterogen. Namun, jika intinya sama, itu juga berfungsi.

Alasan Menggunakan Multicore

Selama beberapa tahun terakhir, hukum Moore, yang diciptakan pada pertengahan 1960-an, akhirnya tampaknya mulai kehabisan tenaga, atau setidaknya melambat. Laju jam prosesor tidak lagi berlipat ganda setiap 2-3 tahun dan faktanya CPU berkecepatan tertinggi telah mencapai batas tertinggi dalam kisaran GHz satu digit rendah selama bertahun-tahun sekarang.

Salah satu cara untuk terus mendorong amplop kinerja adalah dengan memiliki lebih banyak inti CPU yang bekerja bersama jika Anda dapat menggunakannya secara efisien.

Sementara kecepatan telah stabil, ukuran transistor terus menyusut. Meskipun lebih lambat dari sebelumnya, transistor kecil memungkinkan pengemasan lebih banyak logika pada satu chip. Akibatnya, penggunaan transistor ini untuk menempatkan beberapa inti CPU pada satu chip dapat memanfaatkan interkoneksi bus yang jauh lebih cepat dan lebih luas antara beberapa subsistem CPU dan memori.

Multiprocessing asimetris heterogen sangat berguna di mana aplikasi memiliki dua atau lebih beban kerja yang memiliki karakteristik dan persyaratan yang sangat berbeda. Satu mungkin bergantung pada waktu nyata dan latensi interupsi, sementara yang lain mungkin lebih bergantung pada throughput daripada waktu respons. Model ini bekerja dengan sangat baik:Misalnya, perangkat mungkin mendedikasikan satu inti untuk mengelola tumpukan protokol komunikasi seperti Bluetooth atau Zigbee, sementara inti lainnya bertindak sebagai prosesor aplikasi yang menjalankan interaksi manusia dan operasi manajemen sistem secara keseluruhan. Prosesor komunikasi, yang diisolasi, dapat memberikan respons waktu nyata yang sangat baik yang dibutuhkan oleh tumpukan protokol. Selain itu, perangkat lunak komunikasi dapat disertifikasi dengan standar yang membuat seluruh produk mudah untuk disertifikasi dengan memisahkan modifikasi fungsional dari bagian sistem ini.

Tantangan Menggunakan Multicore

Jenis tantangan apa yang muncul saat Anda menempatkan lebih dari satu inti CPU pada sebuah chip? Baiklah, mari kita gali.

Aplikasi atau perangkat lunak monolitik mungkin tidak dapat menggunakan sumber daya komputasi yang tersedia secara efisien. Anda perlu mengatur aplikasi ke dalam tugas-tugas paralel yang dapat berjalan pada saat yang sama untuk menggunakan sumber daya lebih dari satu inti. Ini mungkin memerlukan cara yang tidak biasa bagi para insinyur perangkat lunak untuk memikirkan desain yang disematkan. Memigrasikan kode loop tunggal yang ada mungkin tidak mudah. Terlalu sedikit utas atau bahkan terlalu banyak utas dapat menjadi hambatan kinerja.

Aplikasi yang berbagi struktur data atau perangkat I/O di antara beberapa utas atau proses dapat mengalami kemacetan serial. Untuk menjaga integritas data, akses ke sumber daya bersama ini mungkin harus diserialkan dengan menggunakan teknik penguncian, misalnya, kunci baca, kunci baca-tulis, kunci tulis, spinlock, mutex, dan sebagainya. Kunci yang dirancang secara tidak efisien dapat membuat kemacetan karena pertengkaran kunci yang tinggi antara beberapa utas atau proses yang mencoba mendapatkan kunci untuk menggunakan sumber daya bersama. Ini berpotensi menurunkan kinerja aplikasi atau perangkat lunak. Kinerja aplikasi bahkan dapat menurun karena jumlah inti atau prosesor meningkat jika beberapa inti menghentikan yang lain menunggu di kunci umum yang menyebabkan dua inti berperforma lebih buruk daripada satu.

Beban kerja yang tidak merata dapat menjadi tidak efisien dalam memanfaatkan sumber daya komputasi. Anda mungkin harus memecah tugas-tugas besar menjadi tugas-tugas kecil yang dapat dijalankan secara paralel. Anda mungkin harus mengubah algoritme serial menjadi algoritme paralel untuk meningkatkan kinerja dan skalabilitas. Namun, jika beberapa tugas berjalan sangat cepat, dan yang lain membutuhkan banyak waktu, tugas cepat mungkin menghabiskan banyak waktu untuk menunggu tugas yang lama selesai. Hal ini mengakibatkan pemalasan sumber daya komputasi yang berharga dan penskalaan kinerja yang buruk.

RTOS kemungkinan akan membantu Anda tetapi mungkin tidak menyelesaikan semuanya. Dalam sistem SMP, ini hampir merupakan keharusan untuk menjadwalkan tugas pada sejumlah inti yang sama. Pekerjaan yang harus dilakukan dapat dibagi berdasarkan data atau fungsi. Jika Anda membaginya berdasarkan potongan data, setiap utas mungkin melakukan semua langkah dalam alur pemrosesan. Atau, Anda mungkin meminta satu utas melakukan satu langkah dalam fungsi, sementara yang lain melakukan langkah berikutnya, dll. Keuntungan dari satu teknik di atas yang lain akan bergantung pada karakteristik pekerjaan yang harus dilakukan.

Men-debug di Lingkungan Multicore

Hal pertama yang berguna saat men-debug sistem multicore adalah visibilitas semua core. Idealnya, kita harus dapat memulai dan menghentikan inti secara bersamaan atau satu per satu—yaitu, satu langkah satu inti saat yang lain sedang berjalan atau berhenti. Breakpoint multicore bisa sangat berguna untuk mengontrol operasi satu inti yang didasarkan pada keadaan inti lainnya.

Jejak multicore bisa sangat sulit untuk diterapkan. Mengelola bandwidth informasi jejak yang tinggi dari beberapa inti, serta menangani jenis data jejak yang berpotensi berbeda dari berbagai jenis inti merupakan tantangan nyata.


(Sumber:IAR Systems, diagram milik Arm Ltd.)

Berikut adalah contoh prosesor dengan implementasi multicore yang heterogen dan homogen. Ada dua kelompok inti yang homogen, satu berdasarkan Arm Cortex-A57 ganda dan yang lainnya pada quad Cortex-A53. Kelompok-kelompok ini homogen di dalam diri mereka sendiri tetapi heterogen di antara kedua kelompok.

Arsitektur debug CoreSight menyediakan protokol dan mekanisme untuk berkomunikasi dengan sumber daya debug di semua inti dan itu jatuh ke debugger untuk mengelola semua informasi ini dan mengurai pesan dari inti yang berbeda. Antarmuka dan matriks pemicu silang (CTI, CTM) memungkinkan penghentian simultan dari kedua inti, memicu jejak dan banyak lagi. Infrastruktur pelacakan mencakup port pelacakan serial (SWD) dan paralel (TPIU) yang digunakan untuk memperlancar aliran jejak, dan corong pelacakan yang menggabungkan jejak dari setiap sumber menjadi satu aliran. Dibandingkan dengan bagian inti ganda, diagram yang ditampilkan menunjukkan chip yang jauh lebih kompleks untuk dikendalikan.

C-SPY Debugger di IAR Embedded Workbench menyediakan dukungan untuk debugging multicore simetris dan asimetris. Ini diaktifkan melalui opsi debugger pada tab multicore. Untuk mengaktifkan debug multicore simetris, yang diperlukan hanyalah jumlah inti yang dimasukkan agar debugger mengetahui berapa banyak prosesor yang berbeda untuk berkomunikasi. IDE lain mungkin memiliki opsi serupa yang tersedia.

Di sebelah kanan (atas), Anda dapat melihat tampilan di debugger di mana cluster 4-core Cortex-A9 SMP memiliki status core yang ditampilkan dengan core nomor 2 dihentikan sementara tiga core lainnya sedang dieksekusi.

Sistem multicore asimetris mungkin menggunakan bagian multicore yang heterogen, seperti ST STM32H745/755 yang memiliki satu inti Cortex-M7 dan Cortex-M4 yang terpisah. Dalam hal ini, ketika debugger dijalankan, ia menggunakan dua instance IDE (Master dan Node). Satu untuk setiap inti karena dua inti menjalankan kode proyek yang berbeda.

Di setiap instance IDE, ada informasi status tentang inti yang dikendalikan serta inti lainnya yang dikendalikan di jendela lain. Ada opsi yang dapat dipilih untuk mengontrol perilaku debugger sehingga memulai dan menghentikan inti secara bersamaan atau terpisah berada di bawah kendali pengembang.

Kontrol penuh ini dimungkinkan berkat antarmuka pemicu silang (CTI) dan matriks pemicu silang (CTM) bersama-sama membentuk fitur pemicu silang yang tertanam di Lengan. Ada tiga komponen CTI, satu di tingkat sistem, satu didedikasikan untuk Cortex-M7 dan satu didedikasikan untuk Cortex-M4. Ketiga CTI terhubung satu sama lain melalui CTM seperti yang diilustrasikan pada gambar di bawah. Level sistem dan CTI Cortex-M4 dapat diakses oleh debugger melalui port akses sistem dan APB-D terkait. Cortex-M7 CTI secara fisik terintegrasi dalam inti Cortex-M7 dan dapat diakses melalui port akses Cortex-M7.


(Sumber:IAR Systems, diagram milik STMicroelectronics dari manual Referensi M0399)

CTI memungkinkan peristiwa dari berbagai sumber untuk memicu aktivitas debug dan pelacakan. Misalnya, breakpoint yang dicapai di salah satu inti prosesor dapat menghentikan prosesor lainnya, atau transisi yang terdeteksi pada input pemicu eksternal dapat diatur untuk memulai pelacakan kode.

Dalam contoh ini dengan prosesor multicore heterogen yang memiliki inti Cortex-M7 dan inti Cortex-M4 pada satu chip, dua program terpisah digunakan:satu untuk berjalan di Cortex-M4 dan yang lainnya berjalan di Cortex-M7. Setiap proyek menggunakan FreeRTOS untuk mengelola perangkat lunak yang berjalan pada prosesor. Kedua inti berkomunikasi melalui antarmuka memori bersama. Namun, aplikasi keduanya menggunakan mekanisme pengiriman pesan FreeRTOS untuk berkomunikasi dengan prosesor lain dan menyembunyikan kompleksitas mekanisme yang mendasarinya. Jadi, dari satu perspektif CPU itu hanya mengirim atau menerima pesan dengan tugas lain. Jelas bahwa tugas lain sedang berjalan pada inti CPU lain.

Gambar di bawah ini adalah janda explorer Workspace di IDE. Ikhtisar dua proyek ditampilkan di sini sehingga Anda dapat melihat konten proyek Cortex-M7 dan Cortex-M4.

Dengan memilih salah satu tab lain di bagian bawah jendela, Anda dapat mengalihkan fokus ke proyek M4 atau proyek M7.

Proyek Cortex-M7 memiliki tugas yang mengirim pesan ke tugas yang berjalan di Cortex-M4. Cortex-M4 memiliki dua contoh tugas penerimaan yang sedang berjalan. Cortex-M7 memiliki tugas "pemeriksaan" yang berjalan secara berkala untuk melihat apakah semuanya masih berjalan dengan benar.

Terakhir, debugger memuat kedua proyek. Ini berarti bahwa instance tambahan dari Embedded Workbench untuk debugger kedua telah dimulai.

Untuk menyiapkan debugger untuk dukungan multiprosesor asimetris, kita perlu menetapkan satu proyek sebagai "Master" dan yang lainnya sebagai proyek "Node". Faktanya, pemilihannya sewenang-wenang dan hanya menentukan proyek mana yang memiliki kemampuan untuk meluncurkan yang lain saat startup.

Proyek "Node" tidak memiliki pengaturan khusus dan tidak menyadari bahwa itu berjalan sebagai "Node" untuk proyek lain.

Dengan cara ini, ketika proyek "Master" memulai debuggernya, ia secara otomatis meluncurkan instance IDE lain untuk mengakomodasi sesi debugger kedua di mana proyek kedua akan dijalankan.

Ringkasan

Multicore memungkinkan peningkatan kinerja ketika hukum Moore habis. Namun, multicore menghadirkan tantangan debugging dan memerlukan pendekatan pengembangan khusus sehingga aplikasi dapat mengambil keuntungan maksimal dari arsitektur multicore.

Setelah pengaturan debug dikonfigurasi, debugging multicore tidak pernah semudah ini. Jika Anda pernah menggunakan alat untuk men-debug mono-core sebelumnya, Anda akan mengenali semua yang termasuk di dalamnya dan Anda mungkin tidak akan pernah mengerti orang lain berbicara tentang betapa sulitnya debugging multicore bagi mereka.

Perangkat keras dan perangkat lunak modern akan membantu Anda mengatasi tantangan debug multiinti.

Catatan:Gambar gambar dibuat oleh Sistem IAR kecuali dinyatakan lain.


Aaron Bauch adalah Senior Field Application Engineer di IAR Systems yang bekerja dengan pelanggan di Amerika Serikat bagian Timur dan Kanada. Aaron telah bekerja dengan sistem dan perangkat lunak tertanam untuk perusahaan termasuk Intel, Analog Devices dan Digital Equipment Corporation. Desainnya mencakup berbagai aplikasi termasuk instrumentasi medis, navigasi, dan sistem perbankan. Aaron juga mengajar sejumlah kursus tingkat perguruan tinggi termasuk Desain Sistem Tertanam sebagai profesor di Universitas NH Selatan. Tuan Bauch Meraih gelar Sarjana Teknik Elektro dari The Cooper Union dan Magister Teknik Elektro dari Universitas Columbia, keduanya di New York, NY.

Konten Terkait:

Untuk lebih banyak Tertanam, berlangganan buletin email mingguan Tertanam.


Tertanam

  1. Jaringan WiFi, Penyedia SaaS dan Tantangan yang Mereka Bawa ke TI
  2. Papan – Pisahkan Pi – I2C, UART, GPIO, dan Lainnya
  3. Lima masalah dan tantangan teratas untuk 5G
  4. Faktor Risiko Kompleks Yang Dihadapi Dirgantara dan Pertahanan
  5. 5G, IoT, dan Tantangan Rantai Pasokan Baru
  6. Temui Tantangan ETL Data IoT dan Maksimalkan ROI
  7. Menguasai Tantangan Hard Turning
  8. 4 Tantangan Utama yang Dihadapi Industri OEM Dirgantara dan Pertahanan
  9. Penting dan tantangan dokumentasi terkini
  10. Memahami Manfaat dan Tantangan Manufaktur Hibrida