AVXとはなんぞや?という話

エージェントから案件の紹介を頂きまして、

ほぼ即答で「やります」と回答したのですが、

お仕事の内容が映像系ソフトウェアということで、

Direct2DやAVXのスキル必須とのことでした。

AVXとは??

ChatGTPに質問したら、

x86アーキテクチャのCPUには大量のデータを計算する命令セットが搭載されているとのこと。

で、使い方なんですが、

専用命令セットということなので、アセンブラのコードを使用するのかなと思っていたら、

C++にはその命令セットを使用するためのライブラリを使用可能にするヘッダーファイルがあるらしい。

これはChatGTPが教えてくれたサンプルプログラム。

#include <immintrin.h>
#include <iostream>

int main() {
    constexpr int size = 8;
    float a[size] = { 1, 2, 3, 4, 5, 6, 7, 8 };
    float b[size] = { 8, 7, 6, 5, 4, 3, 2, 1 };
    float c[size];

    __m256 a_vec = _mm256_loadu_ps(a);
    __m256 b_vec = _mm256_loadu_ps(b);
    __m256 c_vec = _mm256_add_ps(a_vec, b_vec);
    _mm256_storeu_ps(c, c_vec);

    for (int i = 0; i < size; i++) {
        std::cout << c[i] << " ";
    }
}

immintrin.hというのがAVX拡張命令を使用するためのヘッダーファイルで、

m256とある関数がその命令セットを使用する関数になります。

どんな関数が使えるのはこちらのサイトを参照した方が解りやすい。

https://chryswoods.com/vector_c++/immintrin.html

英語だけど中堅プログラマーなら理解できる内容でしょ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください