Menggunakan vektorisasi AVX2 di Lambda - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan vektorisasi AVX2 di Lambda

Advanced Vector Extensions 2 (AVX2) adalah ekstensi vektorisasi untuk set instruksi Intel x86 yang dapat melakukan instruksi single instruction multiple data (SIMD) atas vektor 256 bit. Untuk algoritme yang dapat divektorisasi dengan operasi yang sangat dapat diparalelkan, menggunakan AVX2 dapat meningkatkan kinerja CPU, menghasilkan latensi yang lebih rendah dan throughput yang lebih tinggi. Gunakan set instruksi AVX2 untuk beban kerja intensif komputasi, seperti inferensi machine learning, pemrosesan multimedia, simulasi ilmiah, dan aplikasi pemodelan keuangan.

catatan

Lambda arm64 menggunakan arsitektur NEON SIMD dan tidak mendukung ekstensi X86 AVX2.

Untuk menggunakan AVX2 dengan fungsi Lambda, pastikan kode fungsi mengakses kode yang dioptimalkan AVX2. Untuk beberapa bahasa, Anda dapat menginstal versi pustaka dan paket yang didukung AVX2. Untuk bahasa lain, Anda dapat mengompilasi ulang kode dan dependensi dengan set bendera kompilator yang sesuai (jika kompilator mendukung vektorisasi otomatis). Anda juga dapat mengompilasi kode Anda dengan pustaka pihak ketiga yang menggunakan AVX2 untuk mengoptimalkan operasi matematika. Misalnya, Intel Math Kernel Library (Intel MKL), OpenBLAS (Basic Linear Algebra Subprograms), dan AMD BLAS-like Library Instantiation Software (BLIS). Bahasa yang divektorisasi otomatis, seperti Java, menggunakan AVX2 secara otomatis untuk komputasi.

Anda dapat membuat beban kerja Lambda baru atau memindahkan beban kerja dengan dukungan AVX2 ke Lambda tanpa biaya tambahan.

Untuk informasi lebih lanjut tentang AVX2, lihat Advanced Vector Extensions 2 di Wikipedia.

Kompilasi dari sumber

Jika fungsi Lambda Anda menggunakan pustaka C atau C++ untuk melakukan operasi tervektorisasi yang intensif komputasi, Anda dapat mengatur bendera kompilator yang sesuai dan mengompilasi kode fungsi. Kemudian, kompilator tersebut secara otomatis menvektorisasikan kode Anda.

Untuk kompilator gcc atau clang, tambahkan -march=haswell ke perintah atau atur -mavx2 sebagai opsi perintah.

~ gcc -march=haswell main.c or ~ gcc -mavx2 main.c ~ clang -march=haswell main.c or ~ clang -mavx2 main.c

Untuk menggunakan pustaka tertentu, ikuti petunjuk di dokumentasi pustaka untuk mengompilasi dan membangun pustaka. Misalnya, untuk membangun TensorFlow dari sumber, Anda dapat mengikuti petunjuk instalasi di TensorFlow situs web. Pastikan untuk menggunakan opsi kompilasi -march=haswell.

Mengaktifkan AVX2 untuk Intel MKL

Intel MKL adalah pustaka operasi matematika yang dioptimalkan yang secara implisit menggunakan instruksi AVX2 ketika platform komputasi mendukungnya. Kerangka kerja seperti PyTorch build dengan Intel MKL secara default, jadi Anda tidak perlu mengaktifkan AVX2.

Beberapa pustaka, seperti TensorFlow, menyediakan opsi dalam proses pembuatannya untuk menentukan pengoptimalan Intel MKL. Misalnya, dengan TensorFlow, gunakan --config=mkl opsi.

Anda juga dapat membangun perpustakaan Python ilmiah populer, seperti SciPy dan NumPy, dengan Intel MKL. Untuk petunjuk cara membangun pustaka ini dengan Intel MKL, lihat Numpy/Scipy dengan Intel MKL dan Intel Compilers di situs web Intel.

Untuk informasi lebih lanjut tentang Intel MKL dan perpustakaan serupa, lihat Perpustakaan Kernel Matematika di Wikipedia, situs web OpenBLAS, dan repositori AMD BLIS di. GitHub

Dukungan AVX2 dalam bahasa lain

Jika tidak menggunakan pustaka C atau C++ dan tidak membangun dengan Intel MKL, Anda masih bisa mendapatkan peningkatan kinerja AVX2 untuk aplikasi. Perhatikan bahwa peningkatan aktual bergantung pada kemampuan kompilator atau interpreter untuk memanfaatkan AVX2 pada kode Anda.

Python

Pengguna Python umumnya menggunakan SciPy dan NumPy pustaka untuk beban kerja intensif komputasi. Anda dapat mengompilasi pustaka ini untuk mendukung AVX2, atau Anda dapat menggunakan versi pustaka dengan dukungan Intel MKL.

Node

Untuk beban kerja yang intensif komputasi, gunakan versi pustaka dengan dukungan AVX2 atau dengan dukungan Intel MKL yang Anda butuhkan.

Java

Kompilator JIT Java dapat otomatis memvektorkan kode Anda untuk menjalankan instruksi AVX2. Untuk informasi tentang mendeteksi kode tervektorisasi, lihat presentasi Vektorisasi kode dalam JVM di situs web OpenJDK.

Go

Kompilator Go standar saat ini tidak mendukung vektorisasi otomatis, tetapi Anda dapat menggunakan gccgo, kompilator GCC untuk Go. Atur opsi -mavx2:

gcc -o avx2 -mavx2 -Wall main.c
Intrinsik

Anda dapat menggunakan fungsi intrinsik dalam banyak bahasa untuk vektorisasi kode secara manual untuk menggunakan AVX2. Namun, kami tidak menganjurkan pendekatan ini. Kode tervektorisasi yang ditulis secara manual membutuhkan upaya signifikan. Selain itu, men-debug dan memelihara kode seperti itu lebih sulit daripada menggunakan kode yang bergantung pada vektorisasi otomatis.