65.9K
CodeProject 正在变化。 阅读更多。
Home

开始使用 Intel® 集成性能基元 2019 (Windows OS)

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2018 年 12 月 7 日

CPOL
viewsIcon

7138

Intel® 集成性能基元 (Intel® IPP) 是一个软件库,提供了广泛的功能,包括通用的信号和图像处理、计算机视觉、数据压缩和字符串操作。

Intel® 集成性能基元 (Intel® IPP) 是一个软件库,提供了广泛的功能,包括通用的信号和图像处理、计算机视觉、数据压缩和字符串操作。

Intel IPP 作为以下套件的一部分进行安装

该库还以独立软件包的形式在社区许可计划下提供。

大多数 Intel IPP 功能在不同的产品套件中是相同的。但是,有几个 Intel IPP 库或域仅包含在某些产品包中。下表总结了不同产品套件的 Intel IPP 功能

Intel IPP 功能 Intel® Parallel Studio XE Intel® System Studio Intel® IPP 独立版
通用功能域(字符串操作、加密、计算机视觉、数据压缩、图像处理、信号处理等)
嵌入式域的长期演进功能
适用于 Android* 和 Intel® Quark™ 平台的 Intel® IPP 库
适用于 Intel® Xeon Phi™协处理器的 Intel® IPP 库

必备组件

<!-- -->设置环境变量

安装 Intel IPP 后,通过运行适用于您的目标平台架构的脚本来设置 PATHLIBINCLUDE 环境变量。这些脚本位于 <install dir>\Ipp\bin

默认情况下,<install dir>C:\Program files (x86)\IntelSWTools\compilers_and_libraries_2019.x.xxx\<target_os>

<!-- -->配置您的 IDE 环境以链接 Intel IPP

要为您的 Microsoft* Visual Studio* 开发系统配置以链接 Intel IPP 库,请按照以下步骤操作。尽管 Visual Studio* IDE 的某些版本的菜单项可能与下面提到的略有不同,但基本的配置步骤适用于所有这些版本。

  1. 在“解决方案资源管理器”中,右键单击您的项目,然后单击“属性”。
  2. 选择“配置属性”>“VC++ 目录”,然后在“选择目录用于”下拉菜单中设置以下内容
    • 包含文件”菜单项,然后输入 Intel IPP 包含文件的目录(默认是 <install_dir>\ipp\include
    • 库文件”菜单项,然后输入 Intel IPP 库文件的目录(默认是 <install_dir>\ipp\lib\<arch>
    • 可执行文件”菜单项,然后输入 Intel IPP 可执行文件的目录(默认是 <install_dir>\redist\<arch>\ipp

系统要求

构建并运行您的第一个 Intel® IPP 应用程序

下面的代码示例代表了一个简短的应用程序,可帮助您开始使用 Intel IPP

#include "ipp.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
   const IppLibraryVersion *lib;
   IppStatus status;
   Ipp64u mask, emask;

   /* Initialize Intel IPP library */
   ippInit();
   /* Get Intel IPP library version info */
   lib = ippGetLibVersion();
   printf("%s %s\n", lib->Name, lib->Version);

   /* Get CPU features and features enabled with selected library level */
   status = ippGetCpuFeatures( &mask, 0 );
   if( ippStsNoErr == status ) {
      emask = ippGetEnabledCpuFeatures();
      printf("Features supported by CPU\tby Intel IPP\n");
      printf("-----------------------------------------\n");
      printf("  ippCPUID_MMX        = ");
      printf("%c\t%c\t",( mask & ippCPUID_MMX ) ? 'Y':'N',( emask & ippCPUID_MMX ) ? 'Y':'N');
      printf("Intel(R) architecture MMX(TM) technology supported\n");
      printf("  ippCPUID_SSE        = ");
      printf("%c\t%c\t",( mask & ippCPUID_SSE ) ? 'Y':'N',( emask & ippCPUID_SSE ) ? 'Y':'N');
      printf("Intel(R) Streaming SIMD Extensions\n");
      printf("  ippCPUID_SSE2       = ");
      printf("%c\t%c\t",( mask & ippCPUID_SSE2 ) ? 'Y':'N',( emask & ippCPUID_SSE2 ) ? 'Y':'N');
      printf("Intel(R) Streaming SIMD Extensions 2\n");
      printf("  ippCPUID_SSE3       = ");
      printf("%c\t%c\t",( mask & ippCPUID_SSE3 ) ? 'Y':'N',( emask & ippCPUID_SSE3 ) ? 'Y':'N');
      printf("Intel(R) Streaming SIMD Extensions 3\n");
      printf("  ippCPUID_SSSE3      = ");
      printf("%c\t%c\t",( mask & ippCPUID_SSSE3 ) ? 'Y':'N',( emask & ippCPUID_SSSE3 ) ? 'Y':'N');
      printf("Supplemental Streaming SIMD Extensions 3\n");
      printf("  ippCPUID_MOVBE      = ");
      printf("%c\t%c\t",( mask & ippCPUID_MOVBE ) ? 'Y':'N',( emask & ippCPUID_MOVBE ) ? 'Y':'N');
      printf("The processor supports MOVBE instruction\n");
      printf("  ippCPUID_SSE41      = ");
      printf("%c\t%c\t",( mask & ippCPUID_SSE41 ) ? 'Y':'N',( emask & ippCPUID_SSE41 ) ? 'Y':'N');
      printf("Intel(R) Streaming SIMD Extensions 4.1\n");
      printf("  ippCPUID_SSE42      = ");
      printf("%c\t%c\t",( mask & ippCPUID_SSE42 ) ? 'Y':'N',( emask & ippCPUID_SSE42 ) ? 'Y':'N');
      printf("Intel(R) Streaming SIMD Extensions 4.2\n");
      printf("  ippCPUID_AVX        = ");
      printf("%c\t%c\t",( mask & ippCPUID_AVX ) ? 'Y':'N',( emask & ippCPUID_AVX ) ? 'Y':'N');
      printf("Intel(R) Advanced Vector Extensions instruction set\n");
      printf("  ippAVX_ENABLEDBYOS  = ");
      printf("%c\t%c\t",( mask & ippAVX_ENABLEDBYOS ) ? 'Y':'N',( emask & ippAVX_ENABLEDBYOS ) ? 'Y':'N');
      printf("The operating system supports Intel(R) AVX\n");
      printf("  ippCPUID_AES        = ");
      printf("%c\t%c\t",( mask & ippCPUID_AES ) ? 'Y':'N',( emask & ippCPUID_AES ) ? 'Y':'N');
      printf("AES instruction\n");
      printf("  ippCPUID_SHA        = ");
      printf("%c\t%c\t",( mask & ippCPUID_SHA ) ? 'Y':'N',( emask & ippCPUID_SHA ) ? 'Y':'N');
      printf("Intel(R) SHA new instructions\n");
      printf("  ippCPUID_CLMUL      = ");
      printf("%c\t%c\t",( mask & ippCPUID_CLMUL ) ? 'Y':'N',( emask & ippCPUID_CLMUL ) ? 'Y':'N');
      printf("PCLMULQDQ instruction\n");
      printf("  ippCPUID_RDRAND     = ");
      printf("%c\t%c\t",( mask & ippCPUID_RDRAND ) ? 'Y':'N',( emask & ippCPUID_RDRAND ) ? 'Y':'N');
      printf("Read Random Number instructions\n");
      printf("  ippCPUID_F16C       = ");
      printf("%c\t%c\t",( mask & ippCPUID_F16C ) ? 'Y':'N',( emask & ippCPUID_F16C ) ? 'Y':'N');
      printf("Float16 instructions\n");
      printf("  ippCPUID_AVX2       = ");
      printf("%c\t%c\t",( mask & ippCPUID_AVX2 ) ? 'Y':'N',( emask & ippCPUID_AVX2 ) ? 'Y':'N');
      printf("Intel(R) Advanced Vector Extensions 2 instruction set\n");
      printf("  ippCPUID_AVX512F    = ");
      printf("%c\t%c\t",( mask & ippCPUID_AVX512F ) ? 'Y':'N',( emask & ippCPUID_AVX512F ) ? 'Y':'N');
      printf("Intel(R) Advanced Vector Extensions 3.1 instruction set\n");
      printf("  ippCPUID_AVX512CD   = ");
      printf("%c\t%c\t",( mask & ippCPUID_AVX512CD ) ? 'Y':'N',( emask & ippCPUID_AVX512CD ) ? 'Y':'N');
      printf("Intel(R) Advanced Vector Extensions CD (Conflict Detection) instruction set\n");
      printf("  ippCPUID_AVX512ER   = ");
      printf("%c\t%c\t",( mask & ippCPUID_AVX512ER ) ? 'Y':'N',( emask & ippCPUID_AVX512ER ) ? 'Y':'N');
      printf("Intel(R) Advanced Vector Extensions ER instruction set\n");
      printf("  ippCPUID_ADCOX      = ");
      printf("%c\t%c\t",( mask & ippCPUID_ADCOX ) ? 'Y':'N',( emask & ippCPUID_ADCOX ) ? 'Y':'N');
      printf("ADCX and ADOX instructions\n");
      printf("  ippCPUID_RDSEED     = ");
      printf("%c\t%c\t",( mask & ippCPUID_RDSEED ) ? 'Y':'N',( emask & ippCPUID_RDSEED ) ? 'Y':'N');
      printf("The RDSEED instruction\n");
      printf("  ippCPUID_PREFETCHW  = ");
      printf("%c\t%c\t",( mask & ippCPUID_PREFETCHW ) ? 'Y':'N',( emask & ippCPUID_PREFETCHW ) ? 'Y':'N');
      printf("The PREFETCHW instruction\n");
      printf("  ippCPUID_KNC        = ");
      printf("%c\t%c\t",( mask & ippCPUID_KNC ) ? 'Y':'N',( emask & ippCPUID_KNC ) ? 'Y':'N');
      printf("Intel(R) Xeon Phi(TM) Coprocessor instruction set\n");
   }
   return 0;
}

此应用程序包含三个部分

  1. 初始化 Intel IPP 库。此阶段对于充分利用 Intel IPP 优化是必需的。使用 ippInit(),将在运行时分派最佳实现层;否则,将选择优化程度最低的实现。如果 Intel IPP 应用程序在没有 ippInit() 的情况下运行,Intel IPP 库将在第一次调用任何不同于 ippCore 的域的 Intel IPP 函数时自动初始化。在某些调试场景中,使用 ippSetCpuFeatures() 强制使用特定的实现层(而不是调度程序选择的最佳实现)非常有用。
  2. 获取库层名称和版本。您还可以使用位于 <install_dir>\ipp\include 目录中的 ippversion.h 文件获取版本信息。
  3. 显示所选库层使用的且 CPU 支持的硬件优化。

在 Windows* OS 上,使用 Microsoft* Visual Studio* 构建 Intel IPP 应用程序要容易得多。要构建上述代码示例,请按照以下步骤操作

  1. 启动 Microsoft* Visual Studio* 并创建一个空的 C++ 项目。
  2. 添加一个新的 c 文件并将代码粘贴到其中。
  3. 按照 配置您的 IDE 环境以链接 Intel IPP 中的说明设置包含目录和链接模型。
  4. 编译并运行应用程序。

要构建上述代码示例,请按照以下步骤操作

培训和文档

文档

描述

在线培训

Intel® IPP 培训资源。

Intel® IPP 开发者参考

包含有关 Intel IPP 函数以及信号、图像处理和计算机视觉接口的详细说明。

Intel® IPP 加密开发者参考

包含有关 Intel IPP 加密函数的详细说明。

Intel® IPP 开发者指南

提供有关 Intel IPP 库配置、开发环境和链接模式的详细指导。

教程:使用 Intel® IPP 进行图像模糊和旋转

演示如何使用 Intel IPP 图像处理函数实现图像的盒式模糊。教程和示例包可从 Intel® 软件产品示例和教程 下载。

Intel® IPP 开发者指南和参考的集成包装器

包含有关 Intel IPP 集成包装器 C 和 C++ 应用程序编程接口的详细说明,并提供有关如何在代码中使用它们的指导。

Intel® IPP 示例

包括演示 Intel IPP 库各种功能的示例程序集合。这些程序位于 <install_dir>/ipp/components 子目录中的 components_and_examples_<target>.zip 存档中。该存档还在 documentation 子目录中包含 ipp-examples.html 文档文件。

Intel® 集成性能基元

Intel® IPP 产品页面。请参阅此页面以获取支持和在线文档。

注意

您也可以从以下位置下载离线版本的文档

法律信息

Intel 和 Intel 标志是 Intel Corporation 在美国和/或其他国家/地区的商标。

*其他名称和品牌可能被声明为他人的财产。

版权所有 2002-2018 Intel Corporation。

本软件及相关文档是 Intel 的版权材料,您对它们的任何使用均受您获准使用它们的明确许可(许可)的约束。除非许可另有规定,否则未经 Intel 事先书面许可,您不得使用、修改、复制、发布、分发、披露或传输本软件或相关文档。

本软件及相关文档按原样提供,除许可中明确声明的以外,不提供任何明示或暗示的保证。

© . All rights reserved.