Intel® Integrated Performance Primitives
Data Compression-based IPP_LZOPACK Interface for Linux*

License Definitions
Overview
Intel IPP Functions Used In The Interface
System Requirements
Package Contents
How to Build Source Code
          Prepare LZOP Open-Source Utility
          Build target by command line build scripts
          Check The Build
          LZOP Utility Usage
          IPP_LZOP Utility Command-Line Options Changes
Technical Support And Feedback
Disclaimer


License Definitions

By downloading and installing this interface, you hereby agree that the accompanying Materials are being provided to you under the terms and conditions of the End User License Agreement for the Intel® Integrated Performance Primitives product previously accepted by you. Please refer to the file ippEULA.rtf or ippEULA.txt located in the root directory of your Intel® IPP product installation for more information.

Overview

The Data Compression-based IPP_LZOPACK interface (IPP_LZOPACK) illustrates the way of implementing simple lossless data compression solution by using Intel® Integrated Performance Primitives Data Compression domain API.

The interface uses dictionary-based IPP functions implementing Lempel-Ziv-Oberhumer (LZO) algorithm (www.oberhumer.com/opensource/lzo). The result compressed data format is similar to Oberhumer's LZOP file format (www.lzop.org) though it differs from LZOP format by file header method byte.

Additional information on this software as well as other Intel software performance products is available at http://www.intel.com/software/products/.

Intel IPP Functions Used In The Interface

IPP_LZOPACK interface uses the following functions from Intel® Performance Primitives Data Compression library:

IPP_LZOPACK Function IPP Function Function Description
Compression ippsEncodeLZOGetSize Returns size of data buffer to be allocated to hold IPP LZO data structure
ippsEncodeLZOInit_8u Initializes IPP LZO data structure
ippsEncodeLZO_8u Encodes (compresses) data block
ippsAdler32_8u Data checksum computing function
Decompression/Test ippsDecodeLZO_8u Decodes (uncompresses) data block

System Requirements

Hardware requirements:

Software requirements:

Package Contents

The Intel® IPP Data Compression IPP_LZOPACK interface for Linux contains the following files:

./interfaces

          ippEULA.rtf or ippEULA.txt

End User License Agreement

          support.txt

Contains technical support information 

./interfaces/data-compression/ipp_lzopack

          build_ia32.sh

Shell script file for building IPP_LZOPACK interface for a Linux system  based on the
IA-32 architecture

          build_intel64.sh

Batch file for building IPP_LZOPACK interface for a Linux system based on the
Intel ® 64 architecture 

          Makefile

Make file to build IPP_LZOPACK interface

          readme.htm

This file

./interfaces/data-compression/ipp_lzopack/patch

          lzop-1.02rc1.patch Patch file for LZOP v1.02rc1

How to Build Source Code

Prepare LZOP Open-Source Utility

Obtain the following source code tar files

Create a working directory "lzop" in /interfaces/data-compression/ipp_lzopack

$ mkdir lzop

Untar LZO library v2.03 and LZOP v1.02rc1 into that directory

$ cd lzop
$ tar xfz <tar_dir>/lzo-2.03.tar.gz
$ tar xfz <tar_dir>/lzop-1.02rc1.tar.gz

Patch LZOP utility with the commands

$ cd lzop-1.02rc1
$ patch -l -p1 -N < ../../patch/lzop-1.02rc1.patch

Build Target By Command Line Build Scripts

Set up your build environment by creating an environment variable named IPPROOT that points to the root directory of your Intel ® IPP installation. The shared libraries are located in the sharedlib subdirectory of the root directory of the Intel® IPP installation $(IPPROOT). This can be done by setting the LD_LIBRARY_PATH environment variable manually or by invoking the batch file "$IPPROOT/bin/ippvars.sh" from the Intel® IPP installation.

Note:
  1) With default settings the interface will be built using the Intel C++ compiler. To change the default settings, see Makefile for brief description of available variables and additional options.
  2) The build scripts will try to do patching with "-N" option, which means "do not apply patch again", so ignore patch utility messages

Check The Build

Verify the correctness of build using "-V" command line option, i.e. "./bin/{ia32|intel64}_<compiler_name>/lzop -V".

For ia32 version you must get something like

      Lempel-Ziv-Oberhumer Packer
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
lzop v1.02rc1 Markus Franz Xaver Johannes Oberhumer Jul 25th 2005

lzop version: v1.02rc1, Jul 25th 2005
lzop build date: Jun 30 2010 13:27:48

IPP Core lib libippcore.so.7.0 7.0 build 205.3 7.0.205.967
IPP Signal lib libippsv8.so.7.0 7.0 build 205.3 7.0.205.1004
IPP Data Compression lib libippdcv8.so.7.0 7.0 build 205.3 7.0.205.911
 

For intel64 version the output must be like

       Lempel-Ziv-Oberhumer Packer
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
lzop v1.02rc1 Markus Franz Xaver Johannes Oberhumer Jul 25th 2005

lzop version: v1.02rc1, Jul 25th 2005
lzop build date: Jun 30 2010 13:28:11

IPP Core lib libippcore.so.7.0 7.0 build 205.3 7.0.205.967
IPP Signal lib libippsu8.so.7.0 7.0 build 205.3 7.0.205.1004
IPP Data Compression lib libippdcu8.so.7.0 7.0 build 205.3 7.0.205.911

Note:
    1) actual IPP library version numbers, build numbers may be different according to IPP package installed on your computer
    2) to be able to start the application dynamically linked to IPP, make sure your LD_LIBRARY_PATH environment variable points to the actual IPP dynamic library location
    3) in IPP signal and data compression library names the last two letters of the name denote CPU model. In our case "v8" represents Intel® Core™ processor in 32-bit mode, "u8" represents Intel® Core™ processor in 64-bit mode.

LZOP Utility Usage

To obtain LZOP utility main options and command line form enter "lzop" in command line window. The output will be

 Lempel-Ziv-Oberhumer Packer
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
lzop v1.02rc1 Markus Franz Xaver Johannes Oberhumer Jul 25th 2005

Usage: lzop [-dxlthIVL19] [-qvcfFnNPkUp] [-o file] [-S suffix] [file..]

Commands:
-1 compress faster -9 compress better
-d decompress -x extract (same as -dPp)
-l list compressed file -I display system information
-t test compressed file -V display version number
-h give this help -L display software license
Options:
-q be quiet -v be verbose
-c write on standard output -oFILE write output to `FILE'
-p write output to current dir -pDIR write to path `DIR'
-f force overwrite of output files
-n do not restore the original file name (default)
-N restore the original file name
-P restore or save the original path and file name
-S.suf use suffix .suf on compressed files
-U delete input files after successful operation (like gzip and bzip2)
file.. files to (de)compress. If none given, try standard input.
LZOP utility command line options information can be found in "lzop-1.02rc1\doc" of LZOP source file directory.

LZOP utility command line options information can be found in "lzop-1.02rc1/doc" of LZOP source file directory.

IPP_LZOP Utility Command-Line Options Changes

After applying the patches included into this IPP interface the following options added to utility's option set

Note 1: Command line options "-1" (compress faster) and "-9" (compress better)  do not work in patched version, since IPP LZO functions have no choice to select compression ratio. Moreover, these options forcedly make utility to call original LZO functions. Thus, with new "--ipplzost/ipplzomt" command line options do not use "-1/-9" options, or make sure the new options are used at the end of command line.

Note 2: The above options are applied to compression commands only. For example, "lzop --ipplzost data.dat" to produce "data.dat.lzo" compressed file. During decompression the LZOP utility automatically calls IPP's ippsDecodeLZO function, so there is no need to specify additional options explicitly.

Note 3: Using multi-thread mode is not always beneficial for performance. If the input file is too short, the overhead of starting/stopping additional execution threads may negatively affect the overall operation performance. Use multi-thread mode if the input file size is more than ~ 100 KB * <number of host computer cores> (e.g. more than 200 KB for two-core computer, more than 400 KB for four-core computer, etc).

Technical Support and Feedback

To receive support or provide feedback refer to the "Technical Support and Feedback" section of the release notes (ReleaseNotes.htm) provided in the Intel® IPP product installation.

Your feedback on the Intel IPP samples is very important to us and your input will be considered for future releases. The Intel IPP sample code is intended only as an example of how to use the APIs to implement algorithms in different development environments. Please submit problems with installation, compiling, linking, runtime errors or incorrect output to Intel® Premier Support.

You can also share and discuss the experience of IPP sample usage with other developers at Intel Software Developer Forum.

Optimization Notice

The Intel® Integrated Performance Primitives (Intel® IPP) library contains functions that are more highly optimized for Intel microprocessors than for other microprocessors. While the functions in the Intel® IPP library offer optimizations for both Intel and Intel-compatible microprocessors, depending on your code and other factors, you will likely get extra performance on Intel microprocessors.

While the paragraph above describes the basic optimization approach for the Intel® IPP library as a whole, the library may or may not be optimized to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include Intel® Streaming SIMD Extensions 2 (Intel® SSE2), Intel® Streaming SIMD Extensions 3 (Intel® SSE3), and Supplemental Streaming SIMD Extensions 3 (Intel® SSSE3) instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors.

Intel recommends that you evaluate other library products to determine which best meets your requirements.

Disclaimer

INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT.
UNLESS OTHERWISE AGREED IN WRITING BY INTEL, THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY APPLICATION IN WHICH THE FAILURE OF THE INTEL PRODUCT COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR.

Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined." Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information.
The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.
Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order.
Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1-800-548-4725, or go to: http://www.intel.com/#/en_US_01
Intel processor numbers are not a measure of performance. Processor numbers differentiate features within each processor family, not across different processor families. See http://www.intel.com/products/processor_number for details.

BunnyPeople, Celeron, Celeron Inside, Centrino, Centrino Inside, Core Inside, i960, Intel, the Intel logo, Intel Atom, Intel Atom Inside, Intel Core, Intel Inside, Intel Inside logo, Intel NetBurst, Intel NetMerge, Intel NetStructure, Intel SingleDriver, Intel SpeedStep, Intel Sponsors of Tomorrow., the Intel Sponsors of Tomorrow. logo, Intel StrataFlash, Intel Viiv, Intel vPro, Intel XScale, InTru, the InTru logo, InTru soundmark, Itanium, Itanium Inside, MCS, MMX, Moblin, Pentium, Pentium Inside, skoool, the skoool logo, Sound Mark, The Journey Inside, vPro Inside, VTune, Xeon, and Xeon Inside are trademarks of Intel Corporation in the U.S. and other countries.
* Other names and brands may be claimed as the property of others.

Microsoft, Windows, Visual Studio, Visual C++, and the Windows logo are trademarks, or registered trademarks of Microsoft Corporation in the United States and/or other countries.