General Principles
Yang paling mudah untuk mempercepat operasi prosesor adalah untuk pipa itu. Pipelining adalah satu bentuk parallelism, di mana beberapa petunjuk pelaksanaan dapat interleaved pada perangkat keras yang sama. Untuk mengisolasi pipa yang lainnya dari setiap tahapan, pipa register ditambahkan pada batas dari tahapan. The operasi (pada tingkat tinggi) dapat dibayangkan sebagai transfer sehingga mendaftarkan diri untuk meminjamkan cukup mudah diambil dalam bahasa deskripsi perangkat keras.
sumber: klik disini
Ketika pemrograman aplikasi multicore, pertimbangan khusus harus dibuat untuk baju zirah kuasa hari ini prosesor. This paper discusses pipelining, which is a technique that can be used to gain a performance increase (on a multicore CPU) when running an inherently serial task. Makalah ini membahas pipelining, adalah teknik yang dapat digunakan untuk mendapatkan kinerja yang meningkat (pada multicore CPU) ketika menjalankan tugas inherently serial.
Aktivitas
Hari ini di dunia multicore prosesor multithreaded dan aplikasi, pemrogram perlu terus berpikir tentang cara terbaik baju zirah kuasa pemotongan-tepi CPU ketika mengembangkan aplikasi. Although structuring parallel code in traditional text-based languages can be difficult both to program and visualize, graphical development environments such as National Instruments LabVIEW are increasingly allowing engineers and scientists to cut their development times and quickly implement their ideas. Meskipun struktur paralel kode tradisional berbasis teks bahasa bisa sulit untuk kedua program dan memvisualisasikan, grafis lingkungan seperti pembangunan Nasional Instrumen LabVIEW semakin memungkinkan para ilmuwan dan insinyur untuk memotong mereka pembangunan kali dengan cepat dan melaksanakan ide-ide mereka.
Karena NI LabVIEW adalah inherently paralel (berdasarkan dataflow), program aplikasi multithreaded biasanya tugas yang sangat sederhana. Independen tugas di blok diagram secara otomatis dijalankan secara paralel dengan tanpa tambahan diperlukan kerja dari pemrogram. Tetapi bagaimana dengan potongan-potongan kode yang tidak independen? Ketika menerapkan aplikasi inherently serial, apa yang dapat dilakukan untuk baju zirah kuasa multicore CPU?
Pengenalan Pipelining
Diterima secara luas satu teknik untuk meningkatkan kinerja perangkat lunak serial adalah tugas pipelining. Simply put, pipelining adalah proses membagi sebuah serial tugas konkret ke tahap yang dapat dieksekusi dalam sidang-line mode.
Pertimbangkan contoh berikut: seandainya anda manufaktur mobil otomatis pada sidang baris. Anda mengakhiri tugas bangunan adalah mobil yang lengkap, tapi Anda dapat terpisah beton ini menjadi tiga tahapan, yaitu: membangun bingkai, menempatkan bagian dalam (seperti mesin), dan lukisan mobil ketika selesai.
Menganggap bahwa bangunan frame, bagian instalasi, dan lukisan mengambil setiap satu jam. Karena itu, jika Anda hanya dibangun satu mobil pada satu waktu setiap mobil akan mengambil tiga jam untuk melengkapi (lihat Gambar 1 di bawah).
Gambar 1. Dalam contoh ini (non-pipelined), membangun sebuah mobil membutuhkan 3 jam untuk menyelesaikannya.
Bagaimana proses ini dapat ditingkatkan? Bagaimana jika kita menyiapkan satu stasiun untuk kerangka bangunan, satu lagi untuk bagian instalasi, dan ketiga untuk lukisan. Sekarang, sementara satu mobil sedang lukis, kedua mobil dapat memiliki bagian terinstal, dan ketiga di bawah mobil dapat bingkai konstruksi.
Bagaimana Pipelining Meningkatkan Kinerja
Meskipun setiap mobil masih membutuhkan waktu tiga bulan untuk menyelesaikan proses menggunakan baru, sekarang kami dapat memproduksi satu mobil setiap hari daripada satu setiap tiga bulan - yang 3x perbaikan throughput dari proses manufaktur mobilPerlu diketahui bahwa contoh ini telah disederhanakan untuk tujuan demonstrasi; melihat Penting Kekhawatiran bagian di bawah ini untuk rincian tambahan pada pipelining.
Gambar 2. Pipelining dapat sangat meningkatkan throughput dari aplikasi Anda.
Pipelining dasar dalam LabVIEW
Pipelining konsep yang sama seperti di dalam mobil visualized contoh dapat diterapkan untuk setiap aplikasi LabVIEW di mana Anda menjalankan tugas yang serial. Pada dasarnya, anda dapat menggunakan LabVIEW shift register dan tanggapan node untuk membuat sebuah "assembly line" dari suatu program. Konseptual ilustrasi berikut ini menunjukkan bagaimana contoh pipelined aplikasi dapat berjalan di beberapa core CPU:
Gambar 3. Timing diagram untuk pipelined beberapa aplikasi yang berjalan pada core CPU.
Kekhawatiran penting
Ketika membuat aplikasi nyata multicore menggunakan pipelining, programmer harus mengambil beberapa masalah penting ini. Dalam spesifik, balancing pipa tahapan dan meminimalkan memori antara core sangat penting untuk mewujudkan kinerja keuntungan dengan pipelining.
Tahapan balancing
Dalam kedua mobil manufaktur dan LabVIEW contoh di atas, masing-masing tahap ini diasumsikan pipa untuk mengambil jumlah yang sama untuk menjalankan waktu, kami dapat mengatakan bahwa ini adalah contoh pipa tahap seimbang. Namun, dalam dunia nyata-aplikasi ini jarang terjadi. Mempertimbangkan diagram di bawah ini, jika Tahap 1 berlangsung selama tiga kali untuk melaksanakan sebagai Stage 2, maka pipelining dua tahap hanya memproduksi minimal meningkatkan kinerja.
Non-Pipelined (total waktu = 4s):
Catatan: Peningkatan Kinerja = 1.33X (bukan hal yang ideal untuk pipelining)
Untuk memperbaiki keadaan ini, maka programmer harus pindah tugas dari Tahap 1 Tahap 2 sampai ke tahap kedua kali mengambil kira-kira sama untuk menjalankan. With a large number of pipeline stages, this can be a difficult task. Yang jumlah pipa tahapan, ini bisa menjadi tugas sulit.
Catatan: Peningkatan Kinerja = 1.33X (bukan hal yang ideal untuk pipelining)
Untuk memperbaiki keadaan ini, maka programmer harus pindah tugas dari Tahap 1 Tahap 2 sampai ke tahap kedua kali mengambil kira-kira sama untuk menjalankan. With a large number of pipeline stages, this can be a difficult task. Yang jumlah pipa tahapan, ini bisa menjadi tugas sulit.
Dalam LabVIEW, adalah membantu Anda patokan setiap tahapan pipa untuk memastikan bahwa pipa yang seimbang dengan baik. Hal ini paling mudah dilakukan dengan menggunakan struktur flat urutan dalam hubungannya dengan Tick Count (ms) fungsi seperti ditunjukkan dalam Gambar 4.Gambar 4. Benchmark Anda tahap pipa untuk memastikan pipa yang seimbang dengan baik.
Transfer data core Antara
Hal ini untuk menghindari mentransfer sejumlah besar data antara pipa tahap bila memungkinkan. Sejak tahapan suatu pipa dapat berjalan pada prosesor terpisah core, setiap transfer data antara masing-masing tahapan dapat benar-benar menghasilkan memori fisik antara core prosesor. Dalam kasus itu dua core prosesor tidak berbagi cache (atau memori transfer melebihi ukuran cache ukuran), aplikasi pengguna akhir mungkin melihat adanya penurunan efektivitas pipelining.
Kesimpulan
Untuk meringkas, pipelining adalah teknik yang pemrogram dapat digunakan untuk mendapatkan kinerja yang meningkat dalam serial inherently aplikasi (multicore pada mesin). CPU industri kecenderungan peningkatan core per keping berarti bahwa strategi seperti pipelining akan menjadi penting untuk pengembangan aplikasi dalam waktu dekat.
Dalam rangka untuk mendapatkan performa yang paling mungkin dari pipelining, setiap tahapan harus hati-hati agar tidak seimbang satu tahap memerlukan waktu lebih lama daripada lainnya untuk menyelesaikan tahap. Selain itu, setiap transfer data antara pipa tahapan harus diminimalkan untuk menghindari penurunan kinerja karena memori akses dari beberapa core.
Sumber: Klik disini
Tidak ada komentar:
Posting Komentar