Proyek Intel Development Center di Rusia. Intel Integrated Performance Primitives

Kisah kami tentang proyek Intel lain yang dibuat di Rusia. Ini adalah pustaka Intel Integrated Performance Primitives - seperangkat siap pakai, sangat dioptimalkan untuk berbagai arsitektur Intel, dan fungsi dasar yang sepenuhnya gratis untuk bekerja dengan gambar, sinyal, dan data arbitrer. Bagaimana proyek ini berasal, bagaimana dikembangkan, apa yang terjadi di Intel IPP sekarang - dalam artikel di bawah potongan. Dan kita akan mulai, seperti biasa dalam ringkasan, dengan saat ini.



Di KDPV - pintu masuk ke lantai IPP di kantor Intel di Nizhny Novgorod



Apa itu Intel IPP sekarang



Jadi, Intel IPP adalah blok bangunan primitif fungsional yang secara signifikan dapat mempercepat pengoperasian perangkat lunak yang memproses media dan data, berkat pengoptimalan khusus untuk mikroarsitektur tertentu dan platform Intel, serta penggunaan set instruksi vektor seluas mungkin Intel SSE dan Intel AVX dari semua versi.

Fungsi IPP mencakup empat domain besar:



  • Pengolahan citra;
  • Kompresi data;
  • Pemrosesan sinyal;
  • Kriptografi.


Intel IPP 2020 Update 2 saat ini berisi lebih dari 2.500 primitif pemrosesan gambar, 1.300 primitif pemrosesan sinyal, 500 computer vision, dan 300 kriptografi.



Pustaka ini terus ditingkatkan - dioptimalkan untuk platform baru, fungsionalitas baru ditambahkan dan yang lama, yang jarang digunakan pasti akan dihapus.

Intel IPP berjalan di perangkat x86 apa pun yang menjalankan Linux, macOS, Windows, dan Android. Artinya, prosesor tidak hanya dari Intel, tetapi juga dari pabrikan lain yang didukung, terlebih lagi IPP bekerja dengan cepat, meskipun tentu saja tidak secepat pada perangkat Intel.



Pada saat yang sama, pengguna IPP tidak memerlukan pengetahuan mendalam tentang platform eksekusi kode mereka menggunakan IPP dan tindakan terkait - versi pengoptimalan yang diperlukan akan dipanggil secara otomatis.



IPP ditulis dalam C menggunakan apa yang disebut fungsi kompilator intrinsik. Untuk model penggunaan library yang berbeda, ada versi berbeda: single-threaded untuk panggilan dari thread berbeda aplikasi eksternal dan multi-threaded, menggunakan paralelisasi internal yang efisien.



Bagi mereka yang tertarik dengan kecepatan kerja pada Intel Xeon dan Core - beberapa tolok ukur .



IPP saat ini tersedia sebagai bagian dari Intel Parallel Studio XE , Intel System Studio , dan dengan sendirinya... Dan - benar-benar gratis untuk penggunaan pribadi dan komersial.



Menariknya, area yang paling "tertutup" dalam hidup kita adalah kriptografi, dalam kasus IPP sekarang yang paling terbuka - ini adalah proyek sumber terbuka yang tersedia di Github .



Dasar, pendekatan, dan API yang dibawa IPP saat pertama kali muncul dalam pemrosesan sinyal dan gambar sekarang dapat disebut sebagai standar tak terucapkan - hal yang sama berlaku untuk kriptografi.



Semua komponen perpustakaan digunakan oleh jutaan pengguna di ratusan ribu aplikasi di seluruh dunia. Termasuk di dalam perusahaan itu sendiri - di berbagai divisi Intel. Intel IPP memberikan akselerasi yang signifikan dari pustaka OpenCV. Omong-omong, build Intel IPP kustomdengan fungsi yang digunakan oleh OpenCV, dirilis pada tahun 2015, menjadi versi gratis pertama dari IPP.



Intel IPP dapat ditemukan dalam aplikasi pengenalan dan peningkatan gambar di semua bidang, termasuk kedokteran; printer, termasuk 3D; pengawasan video digital; kendaraan otonom; pengenalan dan sintesis ucapan; kompresi data; telekomunikasi dan permainan. IPP bekerja di mana saja - dari server hingga perangkat yang dapat dikenakan. Dapat dikatakan bahwa jika mesin waktu ditemukan, maka perangkat lunaknya pasti akan menggunakan Intel IPP.



Sejarah IPP



Semuanya dimulai dengan pustaka pemrosesan sinyal Intel (SPL) dan pemrosesan gambar (IPL), yang dikembangkan atas pesanan Intel di pusat nuklir federal VNIIEF di Sarov (kami menulis tentang ini dalam cerita tentang OpenCV ).



Pada tahun 1996 (atau 1997, menurut berbagai saksi mata), di markas Intel Santa Clara, diadakan pertemuan mengenai rencana lebih lanjut untuk pengembangan SPL dan IPL dengan partisipasi kurator proyek Amerika dan mengundang ahli dari Sarov, di antaranya adalah calon arsitek, inspirator dan ketua tim IPP Boris Sabanin, serta Sergey Kirillov, yang saat ini memimpin pekerjaan kriptografi IPP.



Tim Sarov membawa daftar proposal mereka, dan salah satunya adalah membuka antarmuka fungsi IPL dan SPL tingkat rendah untuk pengguna, karena mereka telah diimplementasikan dan dioptimalkan, sementara beberapa pengguna tidak nyaman dengan format data IPL, mereka sudah memilikinya format gambar mereka yang sudah mapan. Prototipe antarmuka IPP yang diusulkan, menggunakan struktur yang lebih sederhana dibandingkan dengan IPL / ISL, dibuat oleh Boris Sabanin saat berdiskusi secara harfiah di atas serbet. Tetapi pada saat itu, proposal pihak Rusia, meskipun tidak ditolak, tidak mendapat banyak dukungan - itu berada di tengah-tengah daftar dengan prioritas rendah. Tetapi setelah beberapa tahun seseorang di Intel mengingat ini (kemungkinan besar, Shin Li, yang kemudian menjadi "penginjil" Intel IPP) dan rencana berubah.





Buku Intel IPP 2004 oleh Stewart Taylor, seorang peserta dalam pertemuan bersejarah tentang IPP (kemudian sarjana Stanford yang baru dipekerjakan dari Intel).



Beginilah pekerjaan dimulai pada Intel Performance Primitives, yang kemudian diubah namanya menjadi Integrated Performance Primitives.



Versi internal IPP, sebut saja 1.0, dibuat pada tahun 1999. Itu lebih merupakan Bukti Konsep, prototipe untuk membuktikan kelangsungan konsep. Itu tidak dirilis sebagai produk, tetapi memungkinkan untuk mendefinisikan dan menyempurnakan konsep, arsitektur, dan spesifikasi IPP. Versi publik pertama segera memakai nomor 2.0 dan dirilis pada April 2002.



Hingga tahun 2009, sebagian besar pekerjaan di perpustakaan IPP dilakukan di bawah kepemimpinan Boris Sabanin, yang dapat dianggap sebagai bapak baptis dan jiwa IPP. Dia mengerahkan banyak upaya dalam proyek tersebut, membangun tim spesialis serba guna, tetapi, sayangnya, tidak memenuhi peringatan 20 tahun Intel IPP.





Lukisan "Jembatan Menuju Menara Sarov" oleh Boris Sabanin, yang tidak hanya dikenal oleh IPP (di sini Anda bisa melihat lukisan lain karya Sabanin, termasuk potret dirinya).



Namun warisan IPL / ISL tidak terbatas. Primitif untuk kriptografi dan kompresi data segera muncul. Eksperimen dimulai di bidang Computer Vision, yang kemudian berkembang menjadi proyek dengan OpenCV, menggunakan akselerasi algoritme menggunakan primitif di domain ippCV.



Tentu saja, ini bukan satu-satunya eksperimen dan cabang dalam sejarah penciptaan perpustakaan. IPP sejalan dengan semua Intel. Karenanya, misalnya, versi kelima IPP, selain x86, mendukung prosesor Intel XScale (arsitektur ARM) dan Intel Itanium (IA-64)! Selama bertahun-tahun, IPP telah memasukkan komponen seperti rendering realistis, operasi matriks kecil, integritas data, codec video dan audio.



Fungsionalitas ini dapat digunakan sekarang, jika diinginkan, menggunakan paket Perpustakaan Legacy IPP yang tersedia untuk diunduh.



Selain itu, codec video IPP kemudian menjadi dasar untuk produk Intel terkenal lainnya - Intel Media SDK, dan ray tracing diimplementasikan dalam proyek open source Intel Embree .



Eksperimen teknologi yang menarik di bidang struktur IPP mencakup contoh driver Windows untuk mendemonstrasikan kemungkinan IPP dalam mode kernel, serta versi IPP untuk dijalankan pada GPU Intel terintegrasi yang ditulis dalam C for Metal .



Sangat mengherankan bahwa nomor versi IPP pertama-tama berurutan dari 1 menjadi 9, dan kemudian mulai ditetapkan pada tahun rilis - 2017-2020.





Tim pengembangan Intel IPP pada tahun 2003



Selama keberadaan perpustakaan keluarga IPP, lebih dari 100 orang mengambil bagian dalam pekerjaan mereka - di Sarov, Nizhny Novgorod dan Moskow. Sekarang kantor pusat IPP terletak di Nizhny Novgorod dan terlihat sangat menarik!





Dekorasi lantai IPP di Intel



IPP sama sekali bukan perpustakaan primitif!



Meskipun nama Intel IPP mengandung kata "primitif", dan pada pandangan pertama, tidak ada kesulitan mendasar dalam rangkaian "bagian perancang" untuk membuat program produktif, yang pada kenyataannya adalah IPP, struktur dari perpustakaan ini sama sekali tidak sepele. Solusi teknologi yang menarik telah diterapkan untuk memastikan kinerja dan kegunaan maksimum IPP.



Seperti yang telah disebutkan, IPP berisi ribuan fungsi (dan setiap fungsi memiliki beberapa versi yang dioptimalkan untuk arsitektur tertentu), yang mengarah ke ukuran besar pustaka siap pakai, yang sama sekali bukan merupakan item dalam daftar manfaat bagi pengguna IPP.

Oleh karena itu, IPP dikumpulkan dengan cara khusus. File sumber, yang mencakup sejumlah besar fungsi sederhana, dipotong oleh skrip khusus menjadi banyak fungsi kecil sebelum kompilasi, satu fungsi per file. Dan kemudian file mini ini dikompilasi. Selain itu, mereka dikompilasi tidak hanya sekali, tetapi beberapa kali - untuk arsitektur yang berbeda dengan flag yang sesuai. Hasilnya adalah beberapa pustaka statis yang sangat besar - untuk setiap domain IPP. Namun pustaka statis ini direkatkan dari file objek yang sangat kecil. Oleh karena itu, ketika IPP ditautkan secara statis ke aplikasi, ukuran aplikasi meningkat hampir persis dengan ukuran fungsi yang digunakan dari IPP, bukan lebih banyak byte.



IPP juga memiliki mekanisme untuk menghasilkan pustaka kustom berdasarkan alat yang ada tanpa harus membuka kode sumber kepada pengguna. Yaitu, pengguna memilih daftar fungsi yang diminati dari file header, setelah itu pustaka dinamis kecil dengan hanya fungsi yang diperlukan dan dependensinya secara otomatis dibuat oleh skrip dari pustaka statis yang besar. Selain itu, untuk lebih mengurangi ukuran, pustaka dinamis ini mungkin menyertakan opsi perakitan untuk fungsi ini tidak untuk semua opsi perangkat keras, tetapi secara eksklusif untuk daftar platform yang ditentukan pengguna.



Dalam situasi di mana setiap persentase tambahan kinerja pustaka IPP penting, menjadi sangat penting untuk memutuskan pada tingkat apa untuk memparalelkan kode: di dalam fungsi pustaka, yang baik untuk panggilan IPP dari satu utas pengguna, atau di luar, pada tingkat aplikasi pengguna, yang baik untuk aplikasi multithread yang memisahkan pekerjaan dan data secara independen untuk IPP.



Karena aplikasinya berbeda, dan IPP juga dibuat berbeda. Yakni, paket IPP mencakup dua set pustaka dalam versi 32 dan 64-bit: satu murni single-threaded internal, dan yang kedua dengan paralelisasi internal sejumlah besar fungsi menggunakan OpenMP (daftar fungsi yang tepat dilampirkan dalam dokumen yang menyertainya). Selain itu, ada versi lain untuk pustaka pemrosesan gambar - "Lapisan Threading", yang merupakan add-on melalui IPP utas tunggal dan menggunakan OpenMP atau Intel TBB untuk paralelisasi eksternal pekerjaan pada gambar, yang dibagi menjadi beberapa fragmen (ubin) untuk ini. ... Kode sumber IPP Threading Layer tersedia dalam paket IPP bagi mereka yang paling menginginkan kontrol atas bagaimana kode mereka berjalan secara bersamaan.



Hampir sejak dimulainya IPP, pengembang harus mengkhawatirkan masalah bahwa pipeline pemrosesan gambar dan sinyal, yang terdiri dari fungsi IPP individual, berjalan lebih lambat dari yang mereka inginkan. Penjelasannya sederhana: ketika memanggil fungsi IPP, biasanya terjadi pemuatan dan pembongkaran dari cache atau bahkan dari memori, dan operasi ini dapat menjadi jauh lebih mahal daripada perhitungan sebenarnya. Efek ini terutama terlihat saat memproses data besar - bukan yang disebut data besar, tetapi misalnya, gambar FullHD (belum lagi 4K).



Keputusan untuk menggabungkan beberapa fungsi di dalam IPP menjadi satu dalam kasus ini tidak sesuai - maka alih-alih batu bata primitif kita akan mendapatkan detail mewah dari permainan "Tetris", yang akan bermasalah untuk dimasukkan ke dalam aplikasi pengguna, dan variasi kemungkinan kombinasi tersebut akan melebihi semua batas yang wajar.



Hasilnya, add-on C ++ melalui IPP diimplementasikan, yang membuat grafik pipeline, memotong gambar menjadi beberapa bagian, lalu meluncurkan loop paralel yang tidak melakukan satu operasi di setiap thread, tetapi seluruh pipeline IPP di petak terpisah. Pada akhirnya, tentu saja, hasilnya saling menempel. Sebuah prototipe dibuat terlebih dahulu dan menunjukkan akselerasi yang layak. Kemudian pengaturan dibuat yang disebut DMIP (pemrosesan gambar mode-ditangguhkan). Selanjutnya, pada tahun 2011 pada salah satu pertemuan pertama komite standardisasi OpenVX di Khronos, DMIP disebutkan dan didukung dengan hangat oleh komite tersebut mengingat popularitas grafik di kalangan pengembang perangkat keras. Jadi standar OpenVX ternyata didasarkan pada teknologi grafik. Karena berbagai alasan, standar OpenVX belum mendapatkan popularitas yang memadai, tetapi sekarang paradigma grafik didukung dan dikembangkan oleh tim Intel Graph API.Dan karena Graph API disertakan dalam OpenCV, OpenVINO, Movidius SDK, ada dampak langsung dari teknologi IPP pada standar computer vision dan API modern.



IPP - tautan berguna



Sekali lagi, berikut adalah tautan terpenting dari artikel ini.





Intel IPP Orang Pertama



Mari beri kesempatan kepada orang-orang yang telah memainkan peran penting dalam nasib Intel Performance Primitives di tahun-tahun yang berbeda.



Vladimir Dudnik, kepala tim Intel IPP pada 2009-2011

-, IPP – , . , - , .. IPP - , - .

, , , , SIMD . , , MKL, IPP .


, OpenCV, IPPCV 2006-2008

IPP , , , . FFT. — ! , IPP , , .

IPP , , OCaml, Spiral, FFT — IPP. IPP. , , , , 13-14 , .



, IPP QA 2011-2015 , IPP 2017-2020

IPP QA 2000. , , .

17 IPP. Intel . waterfall & development agile & DevOps. . , .

– . , , . , , , . , , , .


, Image & Signal Processing Intel IPP, 2020 –

IPP SW 2011 , . , . IPP , , , Resize, WarpAffine, WarpPerspective . . C 2017 , , , 2018 IPP Crypto GitHub. 2018 , 2020 IPP, Image & Signal Processing . , , IPP Intel, .



All Articles