SIMD、ブロードキャスト

AVX-512 イントリンシックでブロードキャスト。

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

using namespace std;

// print
template <typename T>
void printData(T a[])
{
    cout.setf(ios::right);
    for (int i = (sizeof(__m512i) / sizeof(float)) - 1; i >= 0; i--)
        cout << fixed << setprecision(0) << setw(3) << a[i] << ",";
    cout << "\b \b" << endl;
}

//main
int main(void)
{
    const int f = -10;
    __m512i a = _mm512_set1_epi32(f);

    printData((int*)&a);

    return 0;
}


実行結果

AVX512命令を使用しているが、仕様マシンがAVX2までしか対応していなかったためSDEでTiger Lakeでエミュレーションした。AVX512対応のCPUでもnativeで確認済み。