インテル® IPP Cryptography 2019 デベロッパー・ガイド
インテル® IPP Cryptography を初めて使用される方のために、以下に簡単なアプリケーションのサンプルコードを示します。
#include "ipp.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
const IppLibraryVersion *lib;
IppStatus status;
Ipp64u mask, emask;
/* インテル® IPP Cryptography ライブラリーのバージョン情報を取得します */
lib = ippcpGetLibVersion();
printf("%s %s\n", lib->Name, lib->Version);
/* CPU の機能と選択したライブラリー・レベルで有効な機能を取得します */
status = ippcpGetCpuFeatures( &mask );
if( ippStsNoErr == status ) {
emask = ippcpGetEnabledCpuFeatures();
printf("CPU でサポートされる機能\tインテル® IPP でサポートされる機能\n");
printf("-----------------------------------------\n");
printf(" ippCPUID_MMX = ");
printf("%c\t%c\t",( mask & ippCPUID_MMX ) ? 'Y':'N',( emask & ippCPUID_MMX ) ? 'Y':'N');
printf("インテル® MMX® テクノロジー\n");
printf(" ippCPUID_SSE = ");
printf("%c\t%c\t",( mask & ippCPUID_SSE ) ? 'Y':'N',( emask & ippCPUID_SSE ) ? 'Y':'N');
printf("インテル® ストリーミング SIMD 拡張命令\n");
printf(" ippCPUID_SSE2 = ");
printf("%c\t%c\t",( mask & ippCPUID_SSE2 ) ? 'Y':'N',( emask & ippCPUID_SSE2 ) ? 'Y':'N');
printf("インテル® ストリーミング SIMD 拡張命令 2\n");
printf(" ippCPUID_SSE3 = ");
printf("%c\t%c\t",( mask & ippCPUID_SSE3 ) ? 'Y':'N',( emask & ippCPUID_SSE3 ) ? 'Y':'N');
printf("インテル® ストリーミング SIMD 拡張命令 3\n");
printf(" ippCPUID_SSSE3 = ");
printf("%c\t%c\t",( mask & ippCPUID_SSSE3 ) ? 'Y':'N',( emask & ippCPUID_SSSE3 ) ? 'Y':'N');
printf("インテル® ストリーミング SIMD 拡張命令 3 補足命令\n");
printf(" ippCPUID_MOVBE = ");
printf("%c\t%c\t",( mask & ippCPUID_MOVBE ) ? 'Y':'N',( emask & ippCPUID_MOVBE ) ? 'Y':'N');
printf("プロセッサーによる MOVBE 命令のサポート\n");
printf(" ippCPUID_SSE41 = ");
printf("%c\t%c\t",( mask & ippCPUID_SSE41 ) ? 'Y':'N',( emask & ippCPUID_SSE41 ) ? 'Y':'N');
printf("インテル® ストリーミング SIMD 拡張命令 4.1\n");
printf(" ippCPUID_SSE42 = ");
printf("%c\t%c\t",( mask & ippCPUID_SSE42 ) ? 'Y':'N',( emask & ippCPUID_SSE42 ) ? 'Y':'N');
printf("インテル® ストリーミング SIMD 拡張命令 4.2\n");
printf(" ippCPUID_AVX = ");
printf("%c\t%c\t",( mask & ippCPUID_AVX ) ? 'Y':'N',( emask & ippCPUID_AVX ) ? 'Y':'N');
printf("インテル® アドバンスト・ベクトル・エクステンション命令セット\n");
printf(" ippAVX_ENABLEDBYOS = ");
printf("%c\t%c\t",( mask & ippAVX_ENABLEDBYOS ) ? 'Y':'N',( emask & ippAVX_ENABLEDBYOS ) ? 'Y':'N');
printf("OS によるインテル® AVX サポート\n");
printf(" ippCPUID_AES = ");
printf("%c\t%c\t",( mask & ippCPUID_AES ) ? 'Y':'N',( emask & ippCPUID_AES ) ? 'Y':'N');
printf("インテル® AES 命令\n");
printf(" ippCPUID_SHA = ");
printf("%c\t%c\t",( mask & ippCPUID_SHA ) ? 'Y':'N',( emask & ippCPUID_SHA ) ? 'Y':'N');
printf("インテル® SHA 命令\n");
printf(" ippCPUID_CLMUL = ");
printf("%c\t%c\t",( mask & ippCPUID_CLMUL ) ? 'Y':'N',( emask & ippCPUID_CLMUL ) ? 'Y':'N');
printf("PCLMULQDQ 命令\n");
printf(" ippCPUID_RDRAND = ");
printf("%c\t%c\t",( mask & ippCPUID_RDRAND ) ? 'Y':'N',( emask & ippCPUID_RDRAND ) ? 'Y':'N');
printf("乱数読み取り命令\n");
printf(" ippCPUID_F16C = ");
printf("%c\t%c\t",( mask & ippCPUID_F16C ) ? 'Y':'N',( emask & ippCPUID_F16C ) ? 'Y':'N');
printf("Float16 命令\n");
printf(" ippCPUID_AVX2 = ");
printf("%c\t%c\t",( mask & ippCPUID_AVX2 ) ? 'Y':'N',( emask & ippCPUID_AVX2 ) ? 'Y':'N');
printf("インテル® アドバンスト・ベクトル・エクステンション 2 命令セット\n");
printf(" ippCPUID_AVX512F = ");
printf("%c\t%c\t",( mask & ippCPUID_AVX512F ) ? 'Y':'N',( emask & ippCPUID_AVX512F ) ? 'Y':'N');
printf("インテル® アドバンスト・ベクトル・エクステンション 3.1 命令セット\n");
printf(" ippCPUID_AVX512CD = ");
printf("%c\t%c\t",( mask & ippCPUID_AVX512CD ) ? 'Y':'N',( emask & ippCPUID_AVX512CD ) ? 'Y':'N');
printf("インテル® アドバンスト・ベクトル・エクステンション CD (競合検出) 命令セット\n");
printf(" ippCPUID_AVX512ER = ");
printf("%c\t%c\t",( mask & ippCPUID_AVX512ER ) ? 'Y':'N',( emask & ippCPUID_AVX512ER ) ? 'Y':'N');
printf("インテル® アドバンスト・ベクトル・エクステンション ER 命令セット\n");
printf(" ippCPUID_ADCOX = ");
printf("%c\t%c\t",( mask & ippCPUID_ADCOX ) ? 'Y':'N',( emask & ippCPUID_ADCOX ) ? 'Y':'N');
printf("ADCX および ADOX 命令\n");
printf(" ippCPUID_RDSEED = ");
printf("%c\t%c\t",( mask & ippCPUID_RDSEED ) ? 'Y':'N',( emask & ippCPUID_RDSEED ) ? 'Y':'N');
printf("RDSEED 命令\n");
printf(" ippCPUID_PREFETCHW = ");
printf("%c\t%c\t",( mask & ippCPUID_PREFETCHW ) ? 'Y':'N',( emask & ippCPUID_PREFETCHW ) ? 'Y':'N');
printf("PREFETCHW 命令\n");
printf(" ippCPUID_KNC = ");
printf("%c\t%c\t",( mask & ippCPUID_KNC ) ? 'Y':'N',( emask & ippCPUID_KNC ) ? 'Y':'N');
printf("インテル® Xeon Phi™ コプロセッサー命令セット\n");
}
return 0;
}
このアプリケーションは、次の 3 つのセクションで構成されています。
インテル® IPP Cryptography ライブラリーを初期化します。インテル® IPP Cryptography ライブラリーは、最初にインテル® IPP Cryptography 関数を呼び出したときに自動初期化されます。
デバッグシナリオによっては、ディスパッチャーにより選択される最適な実装よりも、ippcpSetCpuFeatures() で特定の実装を指定したほうが良い場合があります。
ライブラリーのレイヤー名とバージョンを取得します。バージョン情報は、/include ディレクトリーにある ippcpversion.h ファイルでも確認できます。
ライブラリー・レイヤーで使用されるハードウェアの最適化と CPU でサポートされるハードウェアの最適化を示します。
Windows* 上で上記のサンプルコードをビルドする場合は、次のステップを実行します。
Microsoft* Visual Studio* を起動して、空の C++ プロジェクトを作成します。
新しい c ファイルを追加し、上記のサンプルコードをペーストします。
「Microsoft* Visual Studio* プロジェクトとインテル® IPP Cryptography のリンク」で説明されているように、インクルード・ディレクトリーとリンクモデルを設定します。
アプリケーションをコンパイルして実行します。
Linux* 上で上記のサンプルコードをビルドする場合は、次のステップを実行します。
サンプルコードをコピーして、エディターにペーストします。
シェルでコンパイラー変数とインテル® IPP Cryptography 変数が設定されていることを確認してください。環境変数の設定方法については、「環境変数の設定」を参照してください。
次のコマンドを使用してコンパイルします: icc ippcptest.cpp -o ippcptest -I $IPPCRYPTOROOT/include -L $IPPCRYPTOROOT/lib/<arch> -lippcp。詳細は、「リンクオプション」を参照してください。
アプリケーションを実行します。
macOS* 上で上記のサンプルコードをビルドする場合は、次のステップを実行します。
サンプルコードをコピーして、エディターにペーストします。
シェルでコンパイラー変数とインテル® IPP Cryptography 変数が設定されていることを確認してください。環境変数の設定方法については、「環境変数の設定」を参照してください。
次のコマンドを使用してコンパイルします: icc ippcptest.cpp -o ippcptest -I $IPPCRYPTOROOT/include -L $IPPROOT/lib/ -lippcp。詳細は、「リンクオプション」を参照してください。
アプリケーションを実行します。