このトピックは、インテル® MIC アーキテクチャーにのみ適用されます。
次のサンプルプログラム sample.c は、F32vec16 クラスを使用して 80 の要素から成る浮動小数点配列のすべての要素の平均値を計算します。
インテル® MIC アーキテクチャーでのみ実行可能なオブジェクト・ファイル a.out を生成するには、以下のコマンドを使用してコードをコンパイルします。
icc -mmic sample.c
// ベクトルクラス定義をインクルード
#include <micvec.h>
#include <stdio.h>
#define SIZE 80
// グローバル変数
float result;
__declspec(align(64)) float array[SIZE];
//*****************************************************
// 関数: Add80ArrayElements
// 80 の要素からなる配列のすべてを加算する
//*****************************************************
void Add80ArrayElements (F32vec16 *array, float *result)
{
F32vec16 vec0, vec1;
vec0 = _mm512_load_ps((char*)array); // Load array's first 16 floats
//*****************************************************
// 一度に 16 要素ずつ、配列のすべての要素を加算する
//******************************************************
vec0 += array[1]; // 要素 17-32 の加算する
vec0 += array[2]; // 要素 33-48 の加算する
vec0 += array[3]; // 要素 49-64 の加算する
vec0 += array[4]; // 要素 65-80 の加算する
//*****************************************************
// 結果ベクトルのすべての要素を計算する
//******************************************************
*result = _mm512_reduce_add_ps(vec0);
}
int main(int argc, char *argv[])
{
int i;
// 配列を初期化する
for (i=0; i < SIZE; i++) {
array[i] = (float) i;
}
// 配列のすべての要素を加算する関数を呼び出す
Add80ArrayElements ((F32vec16*)array, &result);
// 配列要素の平均値を出力する value
printf ("Average of all array values = %f\n", result/80.);
printf ("The correct answer is %f\n\n\n", 39.5);
return 0;
}