Quantcast
Channel: Intel® C++ Composer XE
Viewing all 245 articles
Browse latest View live

Static linking with -mkl, -ipp or -tbb may give unresolved references

$
0
0

Reference Number : dpd200252274

Version : Intel® C++ Compiler and Intel® Fortran Compiler versions 13.0.1, 13.1.any, 14.0.0 and 14.0.1

Operating System :  Linux*, OS X*

Problem Description : When an application is linked statically with Intel® MKL using the -mkl switch of the Intel C++ or Fortran Compiler, the MKL libraries occupy the same position on the command line as the -mkl switch itself. If the -mkl switch precedes the user source or object files, this may result in an unresolved reference to an MKL function at link time.

        A similar problem may occur if the Intel® Performance Primitives or Intel® Threading Building Blocks are linked using the -ipp or -tbb switches of the Intel C++ compiler and the switch is placed before the user source or object files.

Resolution Status :  This is a known issue that may be resolved in a future compiler update.

As a temporary workaround, the switches -mkl, -ipp or -tbb should be placed after any user source, object or library files on the command line. Alternatively, the Intel-provided libraries may be linked dynamically instead of statically, e.g. by replacing -static-intel with -shared-intel.

 

  • MKL
  • static link
  • erratum
  • software defect
  • Apple Mac OS X*
  • Linux*
  • C/C++
  • Fortran
  • Intel® C++-Compiler
  • Intel® C++ Composer XE
  • Intel® Composer XE
  • Intel® Fortran Compiler
  • Intel® Fortran Composer XE
  • Intel® Integrated-Performance-Primitives
  • Intel® Math Kernel Library
  • Intel® Threading Building Blocks
  • Intel® C++ Studio XE
  • Intel® Fortran Studio XE
  • Intel® Parallel Studio XE
  • URL

  • Intel® C++ Compiler for Windows* - Fatal link error LNK1104 when using Intel® C++ Compiler with Boost* libraries

    $
    0
    0

    When building an application that uses the Boost libraries with the Intel® C++ Compiler, you may get linker errors like the ones shown below due to incorrect libraries being linked to the application:

    fatal error LNK1104: cannot open file 'libboost_thread-iw-mt-1_33_1.lib'
    fatal error LNK1104: cannot open file 'libboost_thread-iw-1_33_1.lib'
    ...

    The root cause is missing Boost libraries for the Intel® C++ Compiler.

    The preferred solution is to recompile all required Boost libraries with the Intel® C++ Compiler (libraries with the infix "iw" are created because of this). However, this is not mandatory. The libraries provided for the different Microsoft Visual Studio* versions are safe to use as well. Perform the following steps to use them instead:

    1. Open the Boost configuration file "auto_link.hpp".
    2. Search for
      #elif defined(__ICL)
      
      
      						   // Intel C++, no version number:
      
      						#  define BOOST_LIB_TOOLSET "iw"
    3. Change "iw" depending on which Microsoft Visual Studio version you're using:

      "vc71": Microsoft Visual Studio .NET 2003
      "vc80": Microsoft Visual Studio 2005
      "vc90": Microsoft Visual Studio 2008
      "vc100": Microsoft Visual Studio 2010
      "vc110": Microsoft Visual Studio 2012
      "vc120": Microsoft Visual Studio 2013

    4. Rebuild your application to resolve the linker errors.
     
     
  • Microsoft Windows* (XP, Vista, 7)
  • C/C++
  • Intel® C++-Compiler
  • Intel® C++ Composer XE
  • Intel® Composer XE
  • Intel® Parallel Composer
  • Intel® C++ Studio XE
  • Intel® Cluster Studio
  • Intel® Cluster Studio XE
  • Entwicklungstools
  • Duplicate or illegal combination of clauses in an OpenMP* directive.

    $
    0
    0
    Duplicate or illegal combination of clauses in an OpenMP* directive.

    Thank you for your interest in this diagnostic message.We are still in the process of documenting this specific diagnostic.

    Please let us know of your experience with this diagnostic message by posting a comment below. Your interest in this diagnostic will help us prioritize the order we document diagnostics.

  • error
  • warning
  • remark
  • Linux*
  • Apple OS X*
  • Microsoft Windows* (XP, Vista, 7)
  • C/C++
  • Intel® C++-Compiler
  • Intel® C++ Composer XE
  • URL
  • option '/ML[d]' has been replaced with '/MT[d]'

    Specifying a VALUE attribute for an array is an extension of Standard Fxx.

    $
    0
    0
    Specifying a VALUE attribute for an array is an extension of Standard Fxx.

    Thank you for your interest in this diagnostic message.We are still in the process of documenting this specific diagnostic.

    Please let us know of your experience with this diagnostic message by posting a comment below. Your interest in this diagnostic will help us prioritize the order we document diagnostics.

  • error
  • warning
  • remark
  • Linux*
  • Apple OS X*
  • Microsoft Windows* (XP, Vista, 7)
  • C/C++
  • Intel® C++-Compiler
  • Intel® C++ Composer XE
  • URL
  • OpenMP* directive disabled via command line.

    A variable in a blank common cannot be specified with the OFFLOAD:TARGET attribute.

    $
    0
    0
    A variable in a blank common cannot be specified with the OFFLOAD:TARGET attribute.

    Thank you for your interest in this diagnostic message.We are still in the process of documenting this specific diagnostic.

    Please let us know of your experience with this diagnostic message by posting a comment below. Your interest in this diagnostic will help us prioritize the order we document diagnostics.

  • error
  • warning
  • remark
  • Linux*
  • Apple OS X*
  • Microsoft Windows* (XP, Vista, 7)
  • C/C++
  • Intel® C++-Compiler
  • Intel® C++ Composer XE
  • URL
  • This entity is not permitted in a specification expression.


    Array of Reducers - Possible in C?

    $
    0
    0

    I was wondering if it is possible to create an array of reducers in C?

    I already read the documentation, but they use always only one reducer. However, how do I use Cilk reducers for an array with int or double values? Can you give  me a short example?

    Thanks in advance.

    Patches or configure options to build the trunk on arm

    $
    0
    0

    Hello, 

    I want to build the trunk on an embedded system supporting armv7 instructions. The build was accomplished without errors but cilk/cilk.h and libcilkrts weren't built. I checked out the patches available on the internet they do support non x86 architectures but I think just i386 not arm.

    Are there other patches or config options to add while building so that I get those libraries along with the build 

    Regards   

    How can I parallelize implicit loop ?

    $
    0
    0
    I have the loop, inside its body running the function with array member (dependent on loop index) as an argument, and returning one value. I can parallelized this loop by using cilk_for() operator instead of regular for() - and it is simple and works well.  This is explicit parallelization.  Instead of explicit loop instruction I can use Array Notation contruction (as shown below) - it is implicit loop. My routine is relatively long and complecs, and has Array Notation constructions inside, so it cannot be declared as a vector (elemental) one. When I use implicit loop - it is not parallelized, the run time is increased substantially. float foo(float f_in) {  float f_result;  // LONG computation containing CILK+ Array Notation operations  /////////////////////////////////////////////////////////  return f_result; } int main() {  float af_in[n], af_out[n]; // Explicit parallelized loop  cilk_for(int i=0; i<n; i++)   af_out[i] =  foo(af_in[i]); // Implicit non-parallelized loop  af_out[:] =  foo(af_in[:]); } My question is: does somebody know, if there is the way "to say" to compiler, that my implicit loop (Array Notation assignment) has independent steps and should be parallelized (pragma, something else) ?

     

    Intel® C++ Composer XE 2013 SP1 for Windows*, Update 2

    $
    0
    0

    Intel® C++ Composer XE 2013 SP1 Update 2 includes the latest Intel C/C++ compilers and performance libraries for IA-32 and Intel® 64 architecture systems. This new product release now includes: Intel® C++ Compiler XE Version 14.0.2 Intel® Math Kernel Library (Intel® MKL) Version 11.1 Update 2, Intel® Integrated Performance Primitives (Intel® IPP) Version 8.1, Intel® Threading Building Blocks (Intel® TBB) Version 4.2 Update 3, Intel(R) Debugger Extension 1.0 Update 1 for Intel(R) Many Integrated Core Architecture.

    New in this release:

    • Windows 8.1 supported
    • Intel® C++ Compiler XE 14.0.2
    • Intel® Math Kernel Library 11.1 update 2
    • Intel® Integrated Performance Primitives 8.1
    • Intel® Threading Building Blocks 4.2 update 3
    • Microsoft Visual Studio 2013* supported
    • New Intel® Cilk™ Plus STL vector reducer in Intel® C++ Composer XE 2013 SP1 update 2
    • KMP_DYNAMIC_MODE Environment Variable Support for “asat” Deprecated
    • Corrections to reported problems

    Note:  For more information on the changes listed above, please read the individual component release notes. See the previous releases's ReadMe to see what was new in that release.

    Resources

    Contents
    File: w_ccompxe_online_2013_sp1.2.176.exe
    Online installer

    File: w_ccompxe_2013_sp1.2.176.exe
    Product for developing 32-bit and 64-bit applications

    File:  w_ccompxe_redist_msi_2013_sp1.2.176.zip
    Redistributable Libraries for 32-bit and 64-bit msi files

    File:  get-ipp-8.1-crypto-library.htm
    Cryptography Library

  • Entwickler
  • Microsoft Windows* (XP, Vista, 7)
  • Microsoft Windows* 8
  • C/C++
  • Intel® C++-Compiler
  • Intel® C++ Composer XE
  • Intel® Composer XE
  • Intel® Debugger
  • Intel® Integrated-Performance-Primitives
  • Intel® Math Kernel Library
  • Intel® Threading Building Blocks
  • URL
  • Floating Point ABI

    $
    0
    0

    Hello

    I noticed in the latest CilkPlus ABI specification (https://www.cilkplus.org/sites/default/files/open_specifications/CilkPlu...), it says that the caller to the library must set the floating point flags (top of page 8). This is what the LLVM implementation of CilkPlus and its runtime do, but the current Intel version of the run-time has the code to save the floating point status registers that is in LLVM's code generator and not the runtime from the LLVM repository. Please could you tell me whether:
    a) The floating point status flags should be set/saved by the caller
    b) The floating point status flags should be set/saved by the callee
    c) There's something I've overlooked

    The ABI says:
    "/**

    * Architecture - specific floating point state. mxcsr and fpcsr should be * set when CILK_SETJMP is called in client code. Note that the Win64 * jmpbuf for the Intel64 architecture already contains this information * so there is no need to use these fields on that OS/architecture. */"

    The Intel runtime has: __asm__ ( "stmxcsr %0\n\t"
        "fnstcw %1" : : "m" ((sf).mxcsr), "m" ((sf).fpcsr));");
    The LLVM runtime does not have this, but the CilkPlus specific file in the LLVM code generator has equivalent code.   Thanks   Nick Tomlinson

    cilk_for segmentation fault

    $
    0
    0

    Hi,

    I'm having difficulty comparing cilk_for with cilk_spawn.  The following cilk_spawn code executes as I expect for command line arguments like 1000000 30

    // Recursive Implementation of Map // r_map.3.cpp #include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> #include <cmath> #include <cilk/cilk.h> const double pi = 3.14159265; template<typename T> class AddSin { T* a; T* b; public: AddSin(T* a_, T* b_) : a(a_), b(b_) {} void operator()(int i) { a[i] = b[i] + std::sin(pi * (double) i / 180.) + std::cos(pi * (double) i / 180.) + std::tan(pi * (double) i / 180.); } }; template <typename Func> void r_map(int low, int high, int grain, Func f) { if (high - low <= grain) for (int i = low; i < high; i++) f(i); else { int mid = low + (high - low) / 2; cilk_spawn r_map(low, mid, grain, f); } } int main(int argc, char** argv) { if (argc != 3) { std::cerr << "Incorrect number of arguments\n"; return 1; } int n = std::atoi(argv[1]); int g = std::atoi(argv[2]); int* a = new int[n]; int* b = new int[n]; for (int i = 0; i < n; i++) { a[i] = b[i] = 1; } clock_t cs = clock(); r_map(0, n, g, AddSin<int>(a, b)); clock_t ce = clock(); std::cout << ce - cs / (double)CLOCKS_PER_SEC << std::endl; delete [] a; delete [] b; }

    If I replace the body of r_map with a simple cilk_for loop and set the number of workers environment variable to more than 1, this code generates segmentation faults once my command line arguments exceed 36000 30

    // Recursive Implementation of Map // r_map.2.cpp #include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> #include <cmath> #include <cilk/cilk.h> const double pi = 3.14159265; template<typename T> class AddSin { T* a; T* b; public: AddSin(T* a_, T* b_) : a(a_), b(b_) {} void operator()(int i) { a[i] = b[i] + std::sin(pi * (double) i / 180.) + std::cos(pi * (double) i / 180.) + std::tan(pi * (double) i / 180.); } }; template <typename Func> void r_map(int low, int high, int grain, Func f) { cilk_for (int i = low; i < high; i++) f(i); } int main(int argc, char** argv) { if (argc != 3) { std::cerr << "Incorrect number of arguments\n"; return 1; } int n = std::atoi(argv[1]); int g = std::atoi(argv[2]); int* a = new int[n]; int* b = new int[n]; for (int i = 0; i < n; i++) { a[i] = b[i] = 1; } clock_t cs = clock(); r_map(0, n, g, AddSin<int>(a, b)); clock_t ce = clock(); std::cout << ce - cs / (double)CLOCKS_PER_SEC << std::endl; delete [] a; delete [] b; }

    I'm compiling using GCC 4.9.0 20130520.

    Can you explain why cilk_spawn works while cilk_for does not?

    simple cilk_spawn Segmentation Fault

    $
    0
    0

    I'm having difficulty running a simple test case using cilk_spawn.  I'm compiling under gcc 4.9.0 20130520.

    The following fib2010.cpp example, executes in 0.028s without cilk and takes 0.376s with cilk as long as I set the number of workers to 1.  If I change the number of workers to any number greater than one, I get a segmentation fault.

    // fib2010.1.cpp // #include <iostream> #include <cilk/cilk.h> #include <cilk/cilk_api.h> int fib(int n) { if (n < 2) return n; int x = cilk_spawn fib(n-1); int y = fib(n-2); cilk_sync; return x + y; } int main(int argc, char* argv[]) { std::cout << "No of workers = "<< __cilkrts_get_nworkers() << std::endl; int n = 32; std::cout << "fib("<< n << ") = "<< fib(n) << std::endl; }

     

    The hardware is Dual Core AMD Opteron 8220.


    Error when using compilervars.csh/ippvars.csh - arch: Undefined variable.

    $
    0
    0

    Reference number: DPD200253488

    Products: Intel® C++ Composer XE, Intel® Integrated Performance Primitives for Linux*

    Version: 2013 SP1 Update 2 (compiler 14.0), IPP 8.1 (Initial Release)

    Operating Systems: Linux* / IA-32, Intel® 64

    Problem Description:

    A defect exists in the Intel® Integrated Performance Primitives (IPP) 8.1 Initial release in the ippvars.csh file distributed for Linux* (found under: /opt/intel/composer_xe_2013_sp1/ipp).

    The IPP 8.1 release (Package ID: l_ipp_8.1.0.144) is available as a stand-alone download or bundled with the Intel® Composer XE 2013 SP1 Update 2 release (Package id: l_ccompxe_2013_sp1.2.144) for customers with valid licenses from the Intel Registration Center.

    The defect is caused by improper initialization an internal variable used within the script that leads to the error “arch: Undefined variable.” when the script is sourced directly or indirectly via the compilersvars.csh script (found under: /opt/intel/composer_xe_2013_sp1/bin).

    For example:

    $ cd /opt/intel/composer_xe_2013_sp1.2.144/bin
    $ source ./compilervars.csh intel64
    arch: Undefined variable.

    Resolution:   This is a known issue that will be fixed in a future update. In lieu of a permanent fix, users (or sys-admins) with appropriate root privileges can edit the ippvars.csh file to insert ONLY the new line 37 as noted in the code snippet below (ahead of line 38 which is the original line 37) to set the variable arch to the value of the first incoming argument (e.g. $1):

         37    set arch="$1"
         38    if ( "$1" == "ia32_intel64" ) then
         39     setenv arch intel64
         40    endif

     

  • Entwickler
  • Linux*
  • C/C++
  • Intel® C++ Composer XE
  • Intel® Integrated-Performance-Primitives
  • Entwicklungstools
  • URL
  • A dummy argument to a defined I/O procedure cannot have a union inside the record.

    $
    0
    0
    A dummy argument to a defined I/O procedure cannot have a union inside the record.

    Thank you for your interest in this diagnostic message.We are still in the process of documenting this specific diagnostic.

    Please let us know of your experience with this diagnostic message by posting a comment below. Your interest in this diagnostic will help us prioritize the order we document diagnostics.

  • error
  • warning
  • remark
  • Linux*
  • Apple OS X*
  • Microsoft Windows* (XP, Vista, 7)
  • C/C++
  • Intel® C++-Compiler
  • Intel® C++ Composer XE
  • URL
  • A TARGET, TARGET UPDATE or TARGET DATA directive cannot appear in a TARGET region; The directive is ignored.

    $
    0
    0
    A TARGET, TARGET UPDATE or TARGET DATA directive cannot appear in a TARGET region; The directive is ignored.

    Thank you for your interest in this diagnostic message.We are still in the process of documenting this specific diagnostic.

    Please let us know of your experience with this diagnostic message by posting a comment below. Your interest in this diagnostic will help us prioritize the order we document diagnostics.

  • error
  • warning
  • remark
  • Linux*
  • Apple OS X*
  • Microsoft Windows* (XP, Vista, 7)
  • C/C++
  • Intel® C++-Compiler
  • Intel® C++ Composer XE
  • URL
  • Subobjects may not appear in a DECLARE TARGET directive.

    How to make this reduction in Cilk Plus?

    $
    0
    0

    Hello,

    I have code that is structured like this:

    float A[3], X[M], Y[M], Z[M], OUTX[N], OUTY[N], OUTZ[N];
    
    for (i = 0; i < N; i++) {
      // Use other arrays and i as an index to these arrays to initialize A[0], A[1], A[2]
      for (j = 0; j < M; j++) {
        // Calculate new values for A[0], A[1], A[2]
        // using more arrays where i and/or j are used as indexes
    
        X[j] += A[0];
        Y[j] += A[1];
        Z[j] += A[2];
      }
      OUTX[i] = A[0];
      OUTY[i] = A[1];
      OUTZ[i] = A[2];
    }

    I have successfully parallelized the outer loop using OpenMP, making the array A private and adding the atomic directive before the updates to the elements of X, Y and Z (using critical was actually worse). But now I would like to try this code out using Cilk Plus.

    Although I have read all the documentation about reducers and reduction operations in Cilk Plus, I still cannot formulate in my mind how the above code could be implemented in Cilk Plus. I would like to replace the outer loop with a cilk_for and have some way to make the reductions for the elements in arrays X, Y and Z. Could anyone direct me towards the right solution?

    Thank you,

    Ioannis E. Venetis

    Viewing all 245 articles
    Browse latest View live


    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>