Quantcast
Channel: Intel Developer Zone Articles
Viewing all 3384 articles
Browse latest View live

Intel® Parallel Studio XE 2017 Beta Composer Edition Compiler Fixes List

$
0
0

NOTE: This list shows defect fixes and feature requests that have been incorporated into the Intel® Parallel Studio XE Composer Edition Compilers (C++ and Fortran). Defects and feature requests described below represent specific issues with specific test cases. It is difficult to succinctly describe an issue and how it impacted the specific test case. Some of the issues listed may impact multiple architectures, operating systems, and/or languages. If you have any questions about the issues discussed in this report, please post on the user forums, http://software.intel.com/en-us/forums or submit an issue to Intel® Premier Support, https://premier.intel.com

Beta (Posted March 2016), Package IDs below 
l_psxe_p_2017.0.014
m_psxe_p_2017.0.017
w_psxe_p_2017.0.017

DPD200004076CRecognize opportunity to rol
DPD200023541FortranSubscripts are not checked with /check:bounds or /check
DPD200045287FortranFeature Request:Debugger should allow Watches for multiple structure members.
DPD200140351FortranFeature Request: Enhanced Optimization Report with cmd line switches
DPD200141155FortranF2003: IEEE_SELECTED_REAL_KIND does not conform to standard
DPD200164563FortranF2008: 5.4 support implied shape PARAMETER arrays
DPD200166031FortranF2008: 5.10-2 pure function with VALUE dummy not accepted
DPD200167620Fortran/list causes very slow compilation
DPD200168860Fortranextends attribute: incorrect selection of overload + and =
DPD200170196Fortrancoarray performance issue with Jacobi iterative method example
DPD200171472Fortrandebugging: remove type-bound procedures from "Locals"
DPD200174227Fortran, CThe FRTL part of adding ifort compiler support for large pages
DPD200182047FortranOut of bounds array target on pointer assignment not detected
DPD200236019FortranInconsistent conversion between integer and logical
DPD200241019FortranMissing error for procedure pointer assignment where explicit interface required
DPD200241522Cicc -static -rdynamic causes link-time error
DPD200243229FortranFortran I/O returns error when directory path contains unicode
DPD200243371FortranInternal Compiler Error for function returning procedure pointer with interface
DPD200244737FortranError is not generated for F2008 constraint C1283(5)
DPD200249513FortranNon-pointer rules for the protected attribute applied to a pointer
DPD200250167C++OpenMP* tasking: implicit taskprivate variable not marked as NONPOD variable
DPD200250303FortranHigh Performance Optimization: Different data dependency output on IA32 and x64 for the same loop.
DPD200250748FortranCompress structure of neighbor list build code is not vectorized
DPD200251086FortranSpurious warning 7322 for use of intrinsic with !DEC$ DECLARE
DPD200252335Fortranifort accepts non-conforming INTERFACE using extensible argument types as subroutine arguments
DPD200252632FortranRemove -pthread switch or un-deprecate and remove deprecation remark
DPD200253547Fortranplease make "assume realloc_lhs" the default
DPD200253978FortranCall into TBP of extended abstract type gets access violation
DPD200254930C++class with pure virtual function causes conversion errors
DPD200255203FortranOpenMP specification example results in a segfault with latest compiler
DPD200255632C++assertion in is_literal_type in types.c in Microsoft* c++11 mode
DPD200257014FortranInternal compiler error with continuation of extended type reference across multiple lines
DPD200257258CFeature Request: Optionally disable heuristic to set number of /MP-parallel compilation processes for one project
DPD200344384C++Issue with template member convertion function access
DPD200358376C++Add support for /Zo (improved debugging for optimized code)
DPD200358641FortranCompiler erroneously allows a procedure pointer to an elemental procedure
DPD200358944C++would like a better error message for unresolved overloaded function type due to template argument deduction
DPD200359104FortranIncorrect error 6251 for access spec for interface same as use-associated type
DPD200359391FortranArray bounds checking doesn't check references in I/O list
DPD200359636FortranMissing standards warning for BOZ constant used in PARAMETER
DPD200359721FortranComplex Constant not passed correctly
DPD200359967FortranASSUME directive doesn't result in aligned data accesses
DPD200359985FortranInappropriate standards warning 6009 for COS in a constant expression
DPD200360650FortranFeature Request: Include loop line number for optrpt interleaved asm
DPD200361277FortranMissing standards warning for use of LOGICAL variables in arithmetic operations
DPD200361597C++Warning 2304 emitted on move constructors is not useful
DPD200361722C++error #2084: designator may not specify a non-POD
DPD200362361C++icc 15.0 failure to destroy private instances when omp_get_cancellation () should be true
DPD200362589FortranFalse positive in bounds checking when passing size 0 allocated array sections to explicit shape dummy argument
DPD200363341FortranMissing error for host-associated data-target in PURE function - regression
DPD200364780Fortran, C++, COne-stop switch for reproducible floating-point results
DPD200365317Fortranifort 15.0 !$omp atomic updates to private pointee not reflected in local pointer due to lastprivate() clause
DPD200365368C, C++FTZ and DAZ are not set as expected under Microsoft Visual Studio* IDE environment
DPD200365420C++static_assert must not evaluate 2nd
DPD200365858FortranInternal compiler error when using -D with mixed integer/character value
DPD200366448C, C++Miscrosoft Visual Studio IDE integration doesn't embed 'manifest' information into application by default
DPD200366803FortranInternal Compiler Error with TRANSFER when MOLD is a zero sized object
DPD200366878C++/EHa prevents vectorization report generation for customer code whereas /EHsc is fine
DPD200367640C++icc 15.0 build never ending (stopped waiting at 20 minutes) for file that icc 14.0 finishes < 5 seconds
DPD200367852C++OpenMP pragma prevents vectorization and disambiguation of loop with lambda function
DPD200367871CICC does not support /arch:AVX2 flags to enable Intel(R) Advanced Vector Extensions 2 (Intel(R) AVX2) instructions
DPD200368064FortranError 6514 unhelpful when array slice notation is used
DPD200368130C, C++Generate clear message why gathers were generated in a vectorized loop
DPD200368346FortranInternal Compiler Error with /debug for SELECT TYPE in subroutine with unlimited polymorphic CLASS(*), explicit shape array dummy
DPD200368459C++, CPerformance degradation with icc 15.0 ~ 10% overall and 25% for a critical function
DPD200368507Fortranfalse dependency prevents call to Fortran elemental vector function
DPD200368738C++, CPerformance issue: suboptimal code generation for loop with 8 iterations working on 'unsigned short' - twice the time than code of Microsoft compiler
DPD200369800Fortranbeta 16.0: Internal Compiler Error on print * when adding matrixes
DPD200370643FortranASSUME_ALIGNED directive for allocatable and pointer arrays
DPD200370712Fortran[2016 Beta]Incorrect rejection of non-derived-type left-hand-side operand in user-defined operator
DPD200371301FortranInternal compiler error with -O3 -openmp compiler options
DPD200371312CFeature Request: icc should warn for an unsupported OMP simdlen clause
DPD200371584FortranIncorrect standards warning that 132-column line is greater than 132 columns
DPD200371825Fortranifort 16.0 beta '-check bounds' issue with size 0 allocated array
DPD200371874FortranMissing error for coindexed reference to non-scalar coarray
DPD200372114FortranSwitch "-warn interfaces" causes compiler to loop "forever"
DPD200372195FortranFRTL - Incorrect runtime check error for allocatable coarray component.
DPD200372320FortranLinking against libraries that are stored on a network drive using UNC paths is broken
DPD200372405C, C++Convert SIMD vectorization remark of suitable function not found into a warning
DPD200372781Fortranstream formatted nonadvancing read losing data at 512 block boundaries
DPD200373055FortranErroneous error #6973 for explicit initialization of array component of derived-type parameter with implicit initialization
DPD200373466Cempty initialization clause doesn't work on Windows
DPD200373733CLIBM: isinf(-inf) to return -1 to comply with GLIBC*. This does not contradict C99.
DPD200373869C++, CExtraneous move instructions in Intel(R) Advanced Vector Extensions 512 (Intel(R) AVX-512) code for Intel(R) Xeon(TM) Phi
DPD200374017FortranDocument that -init=snan,arrays supports adjustable arrays
DPD200374120FortranMisplaced fixed-form continuation triggers internal compiler error
DPD200374890FortranDiscrepancy between documentation for ifort -show option and option behavior involving equal sign separator
DPD200374959Fortran, C++, CFeature Request: Create a sub-section within Compiler Options topic containing alphabetized listing of all compiler options
DPD200375251FortranIncorrect results produce when permitting Vectorizer
DPD200375355FortranUser-defined derived type READ of extended type incorrectly reads parent component
DPD200375507FortranExpression creates stack temp in 16.0, not in 15.0
DPD200375620FortranInternal compiler error for ALLOCATE of CLASS(*) unlimited polymorphic with SOURCE= or MOLD= NULL()
DPD200375685FortranMissing locator in diagnostic 8322 when abstract type doesn't have all deferred procedures overridden
DPD200375687Fortranfpp - Internal Compiler Error when using macro() definition
DPD200375786C++error: the iterator type in this range-based "for" statement is "bool", which is not a pointer type or an iterator-like class type
DPD200375831Fortranforrtl: severe (408) - Arg not associated with target when Using structure constructor for empty type as actual argument
DPD200375834FortranError 8182 issued for module procedure marked public and used to bind local type definition to another procedure
DPD200375836C, C++"omp ordered simd" nested in in "omp simd" loop which again is nested within "omp parallel for" not accepted
DPD200375906FortranCorrect indentations and other statements for SUBMODULE sample code to improve readability
DPD200375919FortranNeed diagnostic if libmemkind not linked or HBM not available
DPD200375935C, C++, FortranMicrosoft Visual Studio manifest options not being passed onto the linker
DPD200375987FortranErroneous remark #7712 for submodule interface block
DPD200376009FortranSpeculation may cause exceptions during uninitialized variable detection
DPD200376064FortranUnexpected error #6733 for use of structure constructor in a named constant
DPD200376067FortranAdd additional clarification regarding the use of ‘=>’ for pointer components only on TYPE
DPD200376076FortranFeature Request: Fortran listing enhancements specific to structure members and alignment details
DPD200376090FortranSyntax errors in non-advancing example for backslash editing
DPD200376246FortranFeature Request: Customer feedback/suggestions for improvements to the Fortran documentation
DPD200376476CInlining of scalar fmin/fmax calls on Knights Landing
DPD200376539FortranUnexpected error #6406 when PROTECTED appears before the declaration
DPD200376628FortranErroneous error #6265 issued for module variable named the same as private variable declared in a USEd module
DPD200376829FortranFeature Request: RTL - Compensate for short POSIX writes (Lustre* File System)
DPD200376887FortranMisleading alignment messages
DPD200376888CIntel(R) C compiler version 14.0.3.122 is much slower on a modo render function than version 12.1.0.233
DPD200376922Fortran16.0 regression: Unexpected derived type I/O compile error
DPD200377041FortranIncorrect name conflict error for a name already used as result clause in an abstract interface
DPD200377043FortranThe name of an internal procedure is not accepted in a procedure declaration statement
DPD200377205FortranDocument that assume_aligned directive must appear in executable code
DPD200377209Fortran16.0 regression: false positive for inaccessible components of derived type in I/O list due to incorrect assumption about PRIVATE attribute
DPD200377419FortranErroneous error #7367: The data value NULL() can only be assigned to a Fortran POINTER
DPD200377431FortranInternal compiler error
DPD200377478Fortranifort 16.0 : Vectorizer : Internal Compiler Error with -O2 on
DPD200377491C, C++catastrophic error: could not open source file "limits.h" with Intel(R) C++ compiler version 16.0 -isystem
DPD200377513FortranIncorrect results with GETLOG when redirecting stdin
DPD200377546Cgcc-5.2.0 build failure with error: declaration is incompatible with function template
DPD200377669Fortran[Feature Request] Flag to retry aborted system calls in Fortran
DPD200377738C, C++Customer code does not build with /Qipo enabled
DPD200377739C++Virtual Function as elemental function generates incorrect results
DPD200377848C++Compiler 2016 doesn't support RHEL* 6 binutil 2.20.51.0.2-5.42.el6 and 2.20.51.0.2-5.43.el6
DPD200377888FortranDeallocation of passed pointer fails with forrtl: severe (173): A pointer passed to DEALLOCATE points to an object that cannot be deallocated
DPD200377922C++, Cmanual cpu dispatch and processor clause for Intel(R) microarchitecture code name Broadwell
DPD200378082Fortranifort: perf: fortran intrinsic function sign(a,b) is slower than inline code
DPD200378117C++, C[L10N-16.0] In the Microsoft Visual Studio's About dialog, the update info is missing from the Installed product name.
DPD200378147C++type trait incompatiblities with Microsoft Visual C++*
DPD200378226FortranIncorrect standards warning 6891 for scale factor preceding repeated format-item
DPD200378231FortranMissing error for invalid syntax in bounds-remapping pointer assignment
DPD200378244C++[L10N-16.0] -opt-report:5 is not handled properly when compiling C++ offload code.
DPD200378277FortranError 8235 for polymorphic function declared using RESULT keyword and CLASS prefix
DPD200378358C++internal error on std::pair constructor lowering of lambda defined in static data member initializer
DPD200378445FortranInternal Compiler Error on code with OMP and OFFLOAD directives
DPD200378600FortranGarbage characters at end of diagnostic in listing file
DPD200378613FortranContained routine blocks some unused variable warnings
DPD200378627Cicc Interprocedural Optimization hangs indefinitely
DPD200378724FortranUnexpected error #5120 related to !DIR$ and /stand:f08
DPD200378906C, C++icc 16.0 slower than GCC* 4.9.1 - 2x overall, 4.5x on one function
DPD200378914FortranUnexpected errors #6303 and #6366 issued with parameterized derived types
DPD200378916FortranInternal Compiler Error with -g -O1 -coarray
DPD200378921FortranInternal compiler error triggered by USE statement order, or call to generic function, or type-bound procedure declaration
DPD200378923Fortran[DOC] ifort User Guide for interfaces defined in IFQWIN.F90
DPD200378972FortranMissing error for violation of C1218 for a procedure pointer where explicit interface is ELEMENTAL
DPD200378978FortranError in documentation for the ALLOCATABLE attribute
DPD200379423FortranINTEGER(8) subscript for pointer array leads to array temporary warning
DPD200379431FortranAccess violation with assignment to large PDT array
DPD200379709C++icl 15.0/16.0 unstable OpenMP runtime library performance
DPD200379740FortranSyntax of DECLARE SIMD directive
DPD200379839C++SIMD Data Layout Template (SDLT) - SLDT_SIMD_LOOP_BEGIN macro contains bug, undefined "lane_count"
DPD200379870FortranMissing run-time contiguity check forces copy of contiguous array slice
DPD200379896FortranInterprocedural Optimization internal error with -O3 -ipo -g -debug pubnames
DPD200379927C++problem with digit separator
DPD200380295FortranInternal list-directed I/O improperly formats zero and strings
DPD200380389FortranFRTL - Incorrect handling of string variables containing a period character while reading namelist input
DPD200380451FortranInternal compiler error for omitted lower bound preceding colon in explicit-shape array spec
DPD200380490C, C++Emulated gathers for Intel(R) Advanced Vector Extensions (Intel(R) AVX)~2x faster than actual gathers for Intel(R) Advanced Vector Extensions 2 (Intel(R) AVX2)
DPD200380524Cicl: command line error: option '/Qopt-matmul' not supported
DPD200380554FortranInternal Compiler Error for logical expression in ALLOCATE(SOURCE=)
PD200380604FortranInternal Compiler Error caused by unbalanced parentheses
DPD200380615FortranOpenMP prevents trivial loop from vectorizing
DPD200380633C++problem opening source file if directory is included with both -I and -iquote
DPD200380707FortranBack-end Internal Compiler Error #101003_0 with function returning deferred-length allocatable character
DPD200380721FortranPURE functions should allow OMP SIMD, DECLARE SIMD, and DECLARE TARGET directives
DPD200380753FortranAccess violation: when subroutine LTIME was called with negative value for 'time'
DPD200380917FortranInternal Compiler Error with QuantumEspresso
DPD200380931C++display discretionary error expr_not_a_modifiable_lvalue when it occurs in system headers for gcc* compatibility
DPD200381053CC Front End needs to define the __cpp_rtti feature macro
DPD200381101FortranDummy argument name same as host type name in submodule interface confuses second procedure - Error 6463
DPD200381114FortranPRIVATE type-bound generics of component type not recognized in same module
DPD200381151C++, CInternal Compiler Error in shared/il0/il0_scalarization.c, line 3550, when compiling __sec_reduce_add call
DPD200381202C++Update URL for MPC in User Guide
DPD200381265FortranInappropriate error 6457 for TYPE,POINTER in derived type when pointer type is STRUCTURE
DPD200381329C++Privatization of __intel_cpu_indicator in MPC program
DPD200381359FortranInternal Compiler Error with ASSOCIATE
DPD200381365FortranInternal compiler error, regression, for user-defined derived-type I/O of type with pointer to same type component
DPD200381375FortranBuffered File I/O gives wrong results
DPD200381389FortranOpenMP link error when IL0 Replace Subscripts With Vars is done
DPD200381407CLink error with Pointer Checker
DPD200381534Comp_get_level() returns unexpected result when used with Windows threads
DPD200381641FortranIncorrect data read during unformatted sequential I/O
DPD200381662FortranError 6833 for REAL MODULE FUNCTION
DPD200381668C": internal error: ** when compile with -check-pointers=rw
DPD200381669C++Internal Compiler Error in glue on instantation of array type within class
DPD200381741FortranCalling CPU_TIME resets the IEEE exception flags for invalid operations on IA-32
DPD200381758C++_is_trivially_copyable returns true for volatile scalar types
DPD200381813C++__is_empty returns true for union type
DPD200407576C++Linking problem with -static and -std=c++11
DPD200407587CInternal Compiler Error when building mpich using libfabric built with -ipo
DPD200407819Fortran, CLinking against Windows Store variant (WinRT/Metro) of Microsoft Visual C* LIB creates undefined references to kernel32 routines
DPD200407835CRDECLs which are COMDAT do not appear as weak in ELF symbol table
DPD200408023C++vectorizer regression in indexed Intel(R) AVX-512 loop
DPD200524242C++, CFeature Request: support casting to built-in SIMD types
DPD200569778Fortran, C++, CIncorrect warning when using -O1 -vec
DPD200570029C++, C, FortranFeature Request: #pragma float_control not flexible enough (and missing for Fortran)
DPD200572740FortranLower bound is not substituted in assertion expression
DPD200573177C++, CIntel(R) compiler does not support _declcpec(code_seg(...))
DPD200573409C++Compiler introduces redundant assignments. 15% performance degradation on customer code.
DPD200574010FortranIncorrect results for dshiftl and dshift r when shift count equals 0 and 64
DPD200574412FortranString evaluation shows garbled value
DPD200574599C++, CSubscript to intrinsic types does not work
DPD200576789Fortranremark: simd loop has only one iteration
DPD200577017C++, CCPUID check not done for -O0
DPD200578564CIntel(R) Many Integrated Core Architecture (Intel(R) MIC Architecture): Suite sdltCpp_mic fails on Intel(R) MIC Architecturenative compiler on Windows with Intel(R) Manycore Platform Software Stack (Intel(R) MPSS) 3.6
DPD200579009C++__regcall: internal error: 04010002_1865
DPD200579462CInternal Compiler Error with _Generic: internal error: assertion failed

Diagnostic 15423: loop has only one iteration

$
0
0

Product Version: Intel® Fortran Compiler 15.0 and a later version 

Cause:

The Intel® Fortran Compiler will not vectorize a loop when it knows the loop has only one iteration. If the user requires vectorization by using a SIMD directive, the compiler emits a warning diagnostic.

The vectorization report generated using Intel® Fortran Compiler's optimization and vectorization report options:

Windows* OS:  /O2  /Qopt-report:2  /Qopt-report-phase:vec    

Linux OS or OS X:  -O2 -qopt-report2  -qopt-report-phase=vec

Example:

An example below will generate the following  remark in optimization report:

subroutine f15423( a, b, n ) 
  implicit none
  real, dimension(*) :: a, b
  integer            :: i, n
 
  n=1

!$omp simd
  do i=1,n 
     b(i) = 1. - a(i)**2
  end do
 
end subroutine f15423

$ ifort -c -qopenmp-simd f15423.f90

f15423.f90(8): (col. 7) remark: simd loop has only one iteration

f15423.f90(8): (col. 7) warning #13379:  was not vectorized with "simd"

Resolution: 

If the loop really has only one iteration, don’t use a SIMD directive or don’t code a loop.

If the statement  n=1  was inserted unintentionally, remove it and the loop will vectorize

See also:

Requirements for Vectorizable Loops

Vectorization Essentials

Vectorization and Optimization Reports

Back to the list of vectorization diagnostics for Intel® Fortran

Diagnostic 15328 vectorization support: gather was emulated for the variable a: indirect access

$
0
0

Product Version: Intel® Fortran Compiler 15.0 and a later version 

Cause:

A vectorizable loop contains loads from memory locations that are not contiguous in memory (sometimes known as a “gather”). These may be indexed loads, as in the example below, or loads with non-unit stride. The compiler has emulated a hardware gather instruction by issuing individual loads for the different memory locations in software.

The vectorization report generated using Intel® Fortran Compiler's optimization and vectorization report options:

Windows* OS:  /O2  /Qopt-report:2  /Qopt-report-phase:vec    

Linux OS or OS X:  -O2 -qopt-report2  -qopt-report-phase=vec

Example:

An example below will generate the following  remark in optimization report:

subroutine gathr(n, a, b, index)
   implicit none
   integer,                intent(in)  :: n
   integer,  dimension(n), intent(in)  :: index
   real(RT), dimension(n), intent(in)  :: a
   real(RT), dimension(n), intent(out) :: b
   integer                             :: i

   do i=1,n
       b(i) = 1.0_RT + 0.1_RT*a(index(i))
   enddo

end subroutine gathr

$ ifort -c -xcore-avx2 -qopt-report=4 -qopt-report-file=stdout gathr.F90 -DRT=8 -S | egrep 'gather|VECTORIZED'

   remark #15328: vectorization support: gather was emulated for the variable a:  indirect access    [ gathr.F90(10,29) ]

   remark #15300: LOOP WAS VECTORIZED

   remark #15458: masked indexed (or gather) loads: 1

   remark #15301: REMAINDER LOOP WAS VECTORIZED

 

The compiler has vectorized the loop by emulating a “gather” instruction in software.

The assembly code contains no gather instructions.

Compare to the behavior when compiling with -DRT=4  as described in the article for diagnostic #15415.

Resolution: 

See also:

Requirements for Vectorizable Loops

Vectorization Essentials

Vectorization and Optimization Reports

Back to the list of vectorization diagnostics for Intel® Fortran

Intel® Media SDK Screen Capture

$
0
0

Introduction

Nowadays cloud gaming is becoming more and more popular. Benefits are obvious: Instead of downloading and installing large files, you just connect to server from diversity of devices.

Let’s take a look how it works in case of video-streaming cloud games. First, user run a game on their device. Then an application sends signal to the servers, chooses the best available server in cloud and connects the user to it. Actually, the game is stored and played on the server. To allow user to see video stream, server application captures the image, encodes it and sends it via Internet to the client app, which decodes the received pictures. Next, user makes some actions like pressing buttons on keyboard or controllers. Final step is sending this information to the server. This endless cycle continues while user plays the game.

 

As we can see screen capturing is one of essential parts of cloud gaming. In this case, screen capture speed is extremely important point, because we want to play in real time without any freezes and interruptions. Along with cloud gaming, screen capture feature is also useful in remote desktop and other content capturing scenarios etc. 

Intel has a solution especially for cloud gaming developers – optimized Screen Capture plug-in as part of Intel® Media SDK 2016 and Intel® Media Server Studio 2016. It is development library, which enables the media acceleration capabilities of Intel platforms for Windows Desktop front frame buffer capturing. The Intel® Media SDK Screen Capture package includes a hardware accelerated (HW) plug-in library exposing graphics acceleration capabilities, implemented as Intel® Media SDK Decode plug-in. The plug-in can be loaded into/used with only Intel Media SDK Hardware Library and combining with Intel-powered encoder, decoder and screen capturing make your game server work faster.

Screen Capture procedure can use decode plug-in and other SDK components. Capturing display are available in NV12 or RGB4 formats. Moreover, the following Screen Capturing features are supported:

  • Display Selection - opportunity to choose a display to capture for systems with enabled virtual display. Display selection feature is available on systems with virtual displays only (without physical display connected) and RGB4 output fourcc format.
  • Dirty Rectangles detection - possibility to detect only changed regions on the captured display image.

Set up steps:

  1. Download and install Intel® Media SDK 2016 or Intel® Media Server Studio 2016.
  2. Screen capture plugin is available at following path: <Installed_Directory>/Intel_Media_SDK_XX/bin/x64(win32)/ 22d62c07e672408fbb4cc20ed7a053e4.
  3. Download latest samples package from https://software.intel.com/media-sdk-support/code-samples

Launch Screen capture plugin:

Following is an example command line to run screen capture plugin with sample_decode:

sample_decode.exe capture -w [Width] -h [Height] -d3d11 -p 22d62c07e672408fbb4cc20ed7a053e4 -o [output] -n [number of frames] - hw

(If plugin is installed at different directory, provide complete path to plugin or copy plugin to same folder directory before running sample_decode)

On hybrid graphics (Intel graphics + Discrete Graphics) screen capturing also supports software (SW) implementation (Replace parameter -hw with -sw in above command line). Also, please note SW implementation is not optimized and expect a performance drop vs HW implementation. 

For understanding and usability ease of Screen capture feature, refer to tutorial_screen_capture package attached below.

Limitations and Hardware Requirements:

Refer to Screen capture manual and Intel® Media SDK release notes.

Connect with other developers and Intel team on IDZ Media forum with any questions, comments and feedback on Intel® Media SDK Screen capture.

5 Must Reads for March - Surviving Appotropolis & Marketing Your App For Serious Success

$
0
0


Every day, our team spends hours reading the latest on app development, user experience, monetization, marketing and more. We learn new things, debate how successful a new strategy can be, and take meticulous notes on particularly insightful ideas. So when we come across a really interesting read, we like to share it - with our colleagues, and with our developers.

Check out these articles to see what we thought was interesting in the world of app development this month.

1. Google Think: Designing For Mobile Micro Moments

Google put together this comprehensive overview of how to consider designing for moments of engagement with mobile users throughout their app experience and user journey. Great coverage of topics like App Navigation & Exploration, In-App Search and Commerce & Conversions.
 

2. How the Industry Can Help App Developers Survive “Appotropolis” – How mobile developers can conquer overcrowded app stores

This is a fun read, narrating the world mobile app developers current live in and what the industry can do to enhance apps in order to counteract some of the latest trends and statistics. The author highlights the need for better user data, better native advertising and more opportunities for seamless advertising. It’s a great snapshot at some of the issues developers are facing once their app hits the market.
 

3. Top App Monetization Strategies That Work for App Developers

Another great overview of app monetization strategies to consider. This paired with our article on Why You Shouldn’t Wait to Think About Monetization should saddle you with a decent understanding of how you could monetize your app, enough so to make a decision about what strategy would suit you and your audience best.
 

4. The Complete List of User Experience Resources & Tools

This is a great piece that has over fifty excellent tools you can use to create a better user experience for your app and your customers. There are some crazy statistics out there, especially around UX. Consider this – the average app loses 77% of users within three days, and within 90 days, they’ve lost over 95%.[1] Consider upping your UX game with some of these tools and resources.
 

5. Tap That App: How To Market Your App For Serious Success

One of the biggest hurdles after you launch your app is getting users – i.e. marketing. There are many different ways to go about marketing your app – Facebook, Twitter, Instagram. But this article focuses on one channel that many of us don’t always think of when it comes to app marketing – email campaigns. The methods in here are a bit more advanced, but it’s a good read if you’re getting to the marketing stage of your app and want to make an impact.
 

What was the most interesting thing you read this month?

 

 

Intel® Math Kernel Library (Intel® MKL) 2017 Bug Fixes list

$
0
0

Intel® MKL 2017 Beta ( 17 Feb 2016) 

DPD200577117 SP2DP custom library sources created and published in online article
DPD200575663 Fixed the problem of SVD computation of very wide matrix performing significantly slower than SVD computation of its transposition
DPD200574694 Introduced support for major-column format in df?Interpolate1D routines
DPD200576806 Fixed the Pardiso hang problem when called from an OMP critical section
DPD200580172 Problem of Pardiso hanging up on the 11 stage for specific matrix from Altair is now fixed
DPD200576441 Fixed the issue - MKL Cluster FFTW and original FFTW produce the different results in the case of out-of-place computation
DPD200574978 Resolved the segmentation fault resulting from a call to pthread_exit(0)
DPD200571078 Introduced mkl_progress support for the parallel direct sparse solver for clusters
DPD200372223 Improved performance of spline interpolation on multiple threads

Introduction to the Intel® Resource Director Technology Features in Intel® Xeon® Processors E5 v4

$
0
0

Introduction

The Intel® Xeon® processor E5 v4 family of server processors introduces advanced new resource monitoring and control features designed to improve visibility into and control over how shared platform resources such as the L3 cache are used.

The Cache Monitoring Technology (CMT) feature (blogs available on architecture, interfaces, use models and proof points, software support) in the Intel® Xeon® processor E5 v3 provides a starting point with improved visibility of how the L3 cache is used by threads, apps, virtual machines (VMs) or containers, and the new Intel® Resource Director Technology (Intel® RDT) feature set extends these capabilities substantially.

More information on the Intel RDT feature set can be found here.

An animation illustrating the key principles behind Intel RDT is posted here.

Key Intel Resource Director Technology Features on the Intel® Xeon® Processor E5 v4 Family:

  • Cache Allocation Technology (CAT)

Formerly available on a limited subset of Intel Xeon processor E5 v3 communications SKUs, an enhanced version of CAT is now available across all Intel Xeon processor E5 v4 SKUs. CAT enables software control over the placement of data in the L3 cache, enabling new usages including prioritizing important VMs in the data center, containing “noisy neighbors,” and protecting important communications applications, such as virtual switches, from interference.

CAT is a feature that enables an OS, hypervisor / virtual machine manager (VMM) or similar system service management agent to specify the amount of cache space into which an application can fill. This technology provides control over last level cache (LLC) allocation. 

Why is there a need to specify a certain amount of cache space that an application can use in LLC? When multiple applications are running concurrently, they will compete with each other for cache space. An application such as video streaming that requests a large chunk of data but never reuses that data does not necessarily use the cache well (low temporal locality), meaning LLC space is used that could otherwise be used to improve the performance of other applications or VMs.

In such cases, operators can use CAT to limit how much cache space the video streaming application can use, leaving cache space available for more important applications to use. Such prioritization is one key usage of CAT, and others are possible as described in a series of articles:

  • Memory Bandwidth Monitoring (MBM)

Multi-core cache hierarchies benefit applications with substantial throughput and scalability. However, when many user processes are running concurrently, cache and memory bandwidth are frequently contended resources and must be monitored and used efficiently to achieve the best performance.

MBM allows monitoring of bandwidth from one level of the cache hierarchy to the next—in this case focusing on the L3 cache. The architecture is based on an extension of the existing Cache Monitoring Technology (CMT) feature, which uses per-thread tags, meaning that per-thread bandwidth can be measured for applications, VMs, or containers. Additionally, bandwidth to both local and remote memory controllers is provided (via local/total event codes), meaning bandwidth-aware scheduling and NUMA optimizations are possible.

More information about MBM can be found in a series of articles:

  • Code and Data Prioritization (CDP)

Certain applications with large code footprints, or those with above-average sensitivity to protecting code in the cache may benefit from the software control provided by Code and Data Prioritization (CDP), which is an extension of CAT. CDP enables isolation and separate prioritization of code and data placement in the LLC in a software configurable manner, which can enable workload tuning of cache capacity to the characteristics of the workload.

More information about CDP is available in a series of articles:

 

Conclusion

The Intel RDT feature set enables improved monitoring of L3 cache occupancy and memory bandwidth, while providing new levels of control over the way that applications make use of the L3 cache. Enhanced capabilities are possible using these features, including improved telemetry, resource-aware scheduling, improved performance guarantees, and enhanced fairness and determinism. The articles referenced above provide additional details on the capabilities available.

 

Notices

Intel technologies’ features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. Check with your system manufacturer or retailer or learn more at intel.com.

No license (express or implied, by estoppel or otherwise) to any intellectual property rights is granted by this document.

Intel disclaims all express and implied warranties, including without limitation, the implied warranties of merchantability, fitness for a particular purpose, and non-infringement, as well as any warranty arising from course of performance, course of dealing, or usage in trade.

This document contains information on products, services and/or processes in development. All information provided here is subject to change without notice. Contact your Intel representative to obtain the latest forecast, schedule, specifications and roadmaps.

The products and services described may contain defects or errors known as errata which may cause deviations from published specifications. Current characterized errata are available on request.

Copies of documents which have an order number and are referenced in this document may be obtained by calling 1-800-548-4725 or by visiting www.intel.com/design/literature.htm.

Intel, the Intel logo, and Xeon are trademarks of Intel Corporation in the U.S. and/or other countries.

*Other names and brands may be claimed as the property of others.

© 2016 Intel Corporation.

Intel® XDK FAQs - General

$
0
0

How can I get started with Intel XDK?

There are plenty of videos and articles that you can go through here to get started. You could also start with some of our demo apps. It may also help to read Five Useful Tips on Getting Started Building Cordova Mobile Apps with the Intel XDK, which will help you understand some of the differences between developing for a traditional server-based environment and developing for the Intel XDK hybrid Cordova app environment.

Having prior understanding of how to program using HTML, CSS and JavaScript* is crucial to using the Intel XDK. The Intel XDK is primarily a tool for visualizing, debugging and building an app package for distribution.

You can do the following to access our demo apps:

  • Select Project tab
  • Select "Start a New Project"
  • Select "Samples and Demos"
  • Create a new project from a demo

If you have specific questions following that, please post it to our forums.

Can I use an external editor for development in Intel® XDK?

Yes, you can open your files and edit them in your favorite editor. However, note that you must use Brackets* to use the "Live Layout Editing" feature. Also, if you are using App Designer (the UI layout tool in Intel XDK) it will make many automatic changes to your index.html file, so it is best not to edit that file externally at the same time you have App Designer open.

Some popular editors among our users include:

  • Sublime Text* (Refer to this article for information on the Intel XDK plugin for Sublime Text*)
  • Notepad++* for a lighweight editor
  • Jetbrains* editors (Webstorm*)
  • Vim* the editor

How do I get code refactoring capability in Brackets* (the Intel XDK code editor)?

...to be written...

Why doesn’t my app show up in Google* play for tablets?

...to be written...

What is the global-settings.xdk file and how do I locate it?

global-settings.xdk contains information about all your projects in the Intel XDK, along with many of the settings related to panels under each tab (Emulate, Debug etc). For example, you can set the emulator to auto-refresh or no-auto-refresh. Modify this file at your own risk and always keep a backup of the original!

You can locate global-settings.xdk here:

  • Mac OS X*
    ~/Library/Application Support/XDK/global-settings.xdk
  • Microsoft Windows*
    %LocalAppData%\XDK
  • Linux*
    ~/.config/XDK/global-settings.xdk

If you are having trouble locating this file, you can search for it on your system using something like the following:

  • Windows:
    > cd /
    > dir /s global-settings.xdk
  • Mac and Linux:
    $ sudo find / -name global-settings.xdk

When do I use the intelxdk.js, xhr.js and cordova.js libraries?

The intelxdk.js and xhr.js libraries were only required for use with the Intel XDK legacy build tiles (which have been retired). The cordova.js library is needed for all Cordova builds. When building with the Cordova tiles, any references to intelxdk.js and xhr.js libraries in your index.html file are ignored.

How do I get my Android (and Crosswalk) keystore file?

New with release 3088 of the Intel XDK, you may now download your build certificates (aka keystore) using the new certificate manager that is built into the Intel XDK. Please read the initial paragraphs of Managing Certificates for your Intel XDK Account and the section titled "Convert a Legacy Android Certificate" in that document, for details regarding how to do this.

It may also help to review this short, quick overview video (there is no audio) that shows how you convert your existing "legacy" certificates to the "new" format that allows you to directly manage your certificates using the certificate management tool that is built into the Intel XDK. This conversion process is done only once.

If the above fails, please send an email to html5tools@intel.com requesting help. It is important that you send that email from the email address associated with your Intel XDK account.

How do I rename my project that is a duplicate of an existing project?

See this FAQ: How do I make a copy of an existing Intel XDK project?

How do I recover when the Intel XDK hangs or won't start?

  • If you are running Intel XDK on Windows* it must be Windows* 7 or higher. It will not run reliably on earlier versions.
  • Delete the "project-name.xdk" file from the project directory that Intel XDK is trying to open when it starts (it will try to open the project that was open during your last session), then try starting Intel XDK. You will have to "import" your project into Intel XDK again. Importing merely creates the "project-name.xdk" file in your project directory and adds that project to the "global-settings.xdk" file.
  • Rename the project directory Intel XDK is trying to open when it starts. Create a new project based on one of the demo apps. Test Intel XDK using that demo app. If everything works, restart Intel XDK and try it again. If it still works, rename your problem project folder back to its original name and open Intel XDK again (it should now open the sample project you previously opened). You may have to re-select your problem project (Intel XDK should have forgotten that project during the previous session).
  • Clear Intel XDK's program cache directories and files.

    On a Windows machine this can be done using the following on a standard command prompt (administrator is not required):

    > cd %AppData%\..\Local\XDK
    > del *.* /s/q

    To locate the "XDK cache" directory on [OS X*] and [Linux*] systems, do the following:

    $ sudo find / -name global-settings.xdk
    $ cd <dir found above>
    $ sudo rm -rf *

    You might want to save a copy of the "global-settings.xdk" file before you delete that cache directory and copy it back before you restart Intel XDK. Doing so will save you the effort of rebuilding your list of projects. Please refer to this question for information on how to locate the global-settings.xdk file.
  • If you save the "global-settings.xdk" file and restored it in the step above and you're still having hang troubles, try deleting the directories and files above, along with the "global-settings.xdk" file and try it again.
  • Do not store your project directories on a network share (Intel XDK currently has issues with network shares that have not yet been resolved). This includes folders shared between a Virtual machine (VM) guest and its host machine (for example, if you are running Windows* in a VM running on a Mac* host). This network share issue is a known issue with a fix request in place.
  • There have also been issues with running behind a corporate network proxy or firewall. To check them try running Intel XDK from your home network where, presumably, you have a simple NAT router and no proxy or firewall. If things work correctly there then your corporate firewall or proxy may be the source of the problem.
  • Issues with Intel XDK account logins can also cause Intel XDK to hang. To confirm that your login is working correctly, go to the Intel XDK App Center and confirm that you can login with your Intel XDK account. While you are there you might also try deleting the offending project(s) from the App Center.

If you can reliably reproduce the problem, please send us a copy of the "xdk.log" file that is stored in the same directory as the "global-settings.xdk" file to html5tools@intel.com.

Is Intel XDK an open source project? How can I contribute to the Intel XDK community?

No, It is not an open source project. However, it utilizes many open source components that are then assembled into Intel XDK. While you cannot contribute directly to the Intel XDK integration effort, you can contribute to the many open source components that make up Intel XDK.

The following open source components are the major elements that are being used by Intel XDK:

  • Node-Webkit
  • Chromium
  • Ripple* emulator
  • Brackets* editor
  • Weinre* remote debugger
  • Crosswalk*
  • Cordova*
  • App Framework*

How do I configure Intel XDK to use 9 patch png for Android* apps splash screen?

Intel XDK does support the use of 9 patch png for Android* apps splash screen. You can read up more at https://software.intel.com/en-us/xdk/articles/android-splash-screens-using-nine-patch-png on how to create a 9 patch png image and link to an Intel XDK sample using 9 patch png images.

How do I stop AVG from popping up the "General Behavioral Detection" window when Intel XDK is launched?

You can try adding nw.exe as the app that needs an exception in AVG.

What do I specify for "App ID" in Intel XDK under Build Settings?

Your app ID uniquely identifies your app. For example, it can be used to identify your app within Apple’s application services allowing you to use things like in-app purchasing and push notifications.

Here are some useful articles on how to create an App ID:

Is it possible to modify the Android Manifest or iOS plist file with the Intel XDK?

You cannot modify the AndroidManifest.xml file directly with our build system, as it only exists in the cloud. However, you may do so by creating a dummy plugin that only contains a plugin.xml file containing directives that can be used to add lines to the AndroidManifest.xml file during the build process. In essence, you add lines to the AndroidManifest.xml file via a local plugin.xml file. Here is an example of a plugin that does just that:

<?xml version="1.0" encoding="UTF-8"?><plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="my-custom-intents-plugin" version="1.0.0"><name>My Custom Intents Plugin</name><description>Add Intents to the AndroidManifest.xml</description><license>MIT</license><engines><engine name="cordova" version=">=3.0.0" /></engines><!-- android --><platform name="android"><config-file target="AndroidManifest.xml" parent="/manifest/application"><activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:launchMode="singleTop" android:name="testa" android:theme="@android:style/Theme.Black.NoTitleBar"><intent-filter><action android:name="android.intent.action.SEND" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="*/*" /></intent-filter></activity></config-file></platform></plugin>

You can inspect the AndroidManifest.xml created in an APK, using apktool with the following command line:

$ apktool d my-app.apk
$ cd my-app
$ more AndroidManifest.xml

This technique exploits the config-file element that is described in the Cordova Plugin Specification docs and can also be used to add lines to iOS plist files. See the Cordova plugin documentation link for additional details.

Here is an example of such a plugin for modifying the iOS plist file, specifically for adding a BIS key to the plist file:

<?xml version="1.0" encoding="UTF-8"?><plugin
    xmlns="http://apache.org/cordova/ns/plugins/1.0"
    id="my-custom-bis-plugin"
    version="0.0.2"><name>My Custom BIS Plugin</name><description>Add BIS info to iOS plist file.</description><license>BSD-3</license><preference name="BIS_KEY" /><engines><engine name="cordova" version=">=3.0.0" /></engines><!-- ios --><platform name="ios"><config-file target="*-Info.plist" parent="CFBundleURLTypes"><array><dict><key>ITSAppUsesNonExemptEncryption</key><true/><key>ITSEncryptionExportComplianceCode</key><string>$BIS_KEY</string></dict></array></config-file></platform></plugin>

How can I share my Intel XDK app build?

You can send a link to your project via an email invite from your project settings page. However, a login to your account is required to access the file behind the link. Alternatively, you can download the build from the build page, onto your workstation, and push that built image to some location from which you can send a link to that image.

Why does my iOS build fail when I am able to test it successfully on a device and the emulator?

Common reasons include:

  • Your App ID specified in the project settings do not match the one you specified in Apple's developer portal.
  • The provisioning profile does not match the cert you uploaded. Double check with Apple's developer site that you are using the correct and current distribution cert and that the provisioning profile is still active. Download the provisioning profile again and add it to your project to confirm.
  • In Project Build Settings, your App Name is invalid. It should be modified to include only alpha, space and numbers.

How do I add multiple domains in Domain Access?

Here is the primary doc source for that feature.

If you need to insert multiple domain references, then you will need to add the extra references in the intelxdk.config.additions.xml file. This StackOverflow entry provides a basic idea and you can see the intelxdk.config.*.xml files that are automatically generated with each build for the <access origin="xxx" /> line that is generated based on what you provide in the "Domain Access" field of the "Build Settings" panel on the Project Tab.

How do I build more than one app using the same Apple developer account?

On Apple developer, create a distribution certificate using the "iOS* Certificate Signing Request" key downloaded from Intel XDK Build tab only for the first app. For subsequent apps, reuse the same certificate and import this certificate into the Build tab like you usually would.

How do I include search and spotlight icons as part of my app?

Please refer to this article in the Intel XDK documentation. Create anintelxdk.config.additions.xml file in your top level directory (same location as the otherintelxdk.*.config.xml files) and add the following lines for supporting icons in Settings and other areas in iOS*.

<!-- Spotlight Icon --><icon platform="ios" src="res/ios/icon-40.png" width="40" height="40" /><icon platform="ios" src="res/ios/icon-40@2x.png" width="80" height="80" /><icon platform="ios" src="res/ios/icon-40@3x.png" width="120" height="120" /><!-- iPhone Spotlight and Settings Icon --><icon platform="ios" src="res/ios/icon-small.png" width="29" height="29" /><icon platform="ios" src="res/ios/icon-small@2x.png" width="58" height="58" /><icon platform="ios" src="res/ios/icon-small@3x.png" width="87" height="87" /><!-- iPad Spotlight and Settings Icon --><icon platform="ios" src="res/ios/icon-50.png" width="50" height="50" /><icon platform="ios" src="res/ios/icon-50@2x.png" width="100" height="100" />

For more information related to these configurations, visit http://cordova.apache.org/docs/en/3.5.0/config_ref_images.md.html#Icons%20and%20Splash%20Screens.

For accurate information related to iOS icon sizes, visit https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/IconMatrix.html

NOTE: The iPhone 6 icons will only be available if iOS* 7 or 8 is the target.

Cordova iOS* 8 support JIRA tracker: https://issues.apache.org/jira/browse/CB-7043

Does Intel XDK support Modbus TCP communication?

No, since Modbus is a specialized protocol, you need to write either some JavaScript* or native code (in the form of a plugin) to handle the Modbus transactions and protocol.

How do I sign an Android* app using an existing keystore?

Uploading an existing keystore in Intel XDK is not currently supported but you can send an email to html5tools@intel.com with this request. We can assist you there.

How do I build separately for different Android* versions?

Under the Projects Panel, you can select the Target Android* version under the Build Settings collapsible panel. You can change this value and build your application multiple times to create numerous versions of your application that are targeted for multiple versions of Android*.

How do I display the 'Build App Now' button if my display language is not English?

If your display language is not English and the 'Build App Now' button is proving to be troublesome, you may change your display language to English which can be downloaded by a Windows* update. Once you have installed the English language, proceed to Control Panel > Clock, Language and Region > Region and Language > Change Display Language.

How do I update my Intel XDK version?

When an Intel XDK update is available, an Update Version dialog box lets you download the update. After the download completes, a similar dialog lets you install it. If you did not download or install an update when prompted (or on older versions), click the package icon next to the orange (?) icon in the upper-right to download or install the update. The installation removes the previous Intel XDK version.

How do I import my existing HTML5 app into the Intel XDK?

If your project contains an Intel XDK project file (<project-name>.xdk) you should use the "Open an Intel XDK Project" option located at the bottom of the Projects List on the Projects tab (lower left of the screen, round green "eject" icon, on the Projects tab). This would be the case if you copied an existing Intel XDK project from another system or used a tool that exported a complete Intel XDK project.

If your project does not contain an Intel XDK project file (<project-name>.xdk) you must "import" your code into a new Intel XDK project. To import your project, use the "Start a New Project" option located at the bottom of the Projects List on the Projects tab (lower left of the screen, round blue "plus" icon, on theProjects tab). This will open the "Samples, Demos and Templates" page, which includes an option to "Import Your HTML5 Code Base." Point to the root directory of your project. The Intel XDK will attempt to locate a file named index.html in your project and will set the "Source Directory" on the Projects tab to point to the directory that contains this file.

If your imported project did not contain an index.html file, your project may be unstable. In that case, it is best to delete the imported project from the Intel XDK Projects tab ("x" icon in the upper right corner of the screen), rename your "root" or "main" html file to index.html and import the project again. Several components in the Intel XDK depend on this assumption that the main HTML file in your project is named index.hmtl. See Introducing Intel® XDK Development Tools for more details.

It is highly recommended that your "source directory" be located as a sub-directory inside your "project directory." This insures that non-source files are not included as part of your build package when building your application. If the "source directory" and "project directory" are the same it results in longer upload times to the build server and unnecessarily large application executable files returned by the build system. See the following images for the recommended project file layout.

I am unable to login to App Preview with my Intel XDK password.

On some devices you may have trouble entering your Intel XDK login password directly on the device in the App Preview login screen. In particular, sometimes you may have trouble with the first one or two letters getting lost when entering your password.

Try the following if you are having such difficulties:

  • Reset your password, using the Intel XDK, to something short and simple.

  • Confirm that this new short and simple password works with the XDK (logout and login to the Intel XDK).

  • Confirm that this new password works with the Intel Developer Zone login.

  • Make sure you have the most recent version of Intel App Preview installed on your devices. Go to the store on each device to confirm you have the most recent copy of App Preview installed.

  • Try logging into Intel App Preview on each device with this short and simple password. Check the "show password" box so you can see your password as you type it.

If the above works, it confirms that you can log into your Intel XDK account from App Preview (because App Preview and the Intel XDK go to the same place to authenticate your login). When the above works, you can go back to the Intel XDK and reset your password to something else, if you do not like the short and simple password you used for the test.

How do I completely uninstall the Intel XDK from my system?

Take the following steps to completely uninstall the XDK from your Windows system:

  • From the Windows Control Panel, remove the Intel XDK, using the Windows uninstall tool.

  • Then:
    > cd %LocalAppData%\Intel\XDK
    > del *.* /s/q

  • Then:
    > cd %LocalAppData%\XDK
    > copy global-settings.xdk %UserProfile%
    > del *.* /s/q
    > copy %UserProfile%\global-settings.xdk .

  • Then:
    -- Goto xdk.intel.com and select the download link.
    -- Download and install the new XDK.

To do the same on a Linux or Mac system:

  • On a Linux machine, run the uninstall script, typically /opt/intel/XDK/uninstall.sh.
     
  • Remove the directory into which the Intel XDK was installed.
    -- Typically /opt/intel or your home (~) directory on a Linux machine.
    -- Typically in the /Applications/Intel XDK.app directory on a Mac.
     
  • Then:
    $ find ~ -name global-settings.xdk
    $ cd <result-from-above> (for example ~/Library/Application Support/XDK/ on a Mac)
    $ cp global-settings.xdk ~
    $ rm -Rf *
    $ mv ~/global-settings.xdk .

     
  • Then:
    -- Goto xdk.intel.com and select the download link.
    -- Download and install the new XDK.

Is there a tool that can help me highlight syntax issues in Intel XDK?

Yes, you can use the various linting tools that can be added to the Brackets editor to review any syntax issues in your HTML, CSS and JS files. Go to the "File > Extension Manager..." menu item and add the following extensions: JSHint, CSSLint, HTMLHint, XLint for Intel XDK. Then, review your source files by monitoring the small yellow triangle at the bottom of the edit window (a green check mark indicates no issues).

How do I delete built apps and test apps from the Intel XDK build servers?

You can manage them by logging into: https://appcenter.html5tools-software.intel.com/csd/controlpanel.aspx. This functionality will eventually be available within Intel XDK after which access to app center will be removed.

I need help with the App Security API plugin; where do I find it?

Visit the primary documentation book for the App Security API and see this forum post for some additional details.

When I install my app or use the Debug tab Avast antivirus flags a possible virus, why?

If you are receiving a "Suspicious file detected - APK:CloudRep [Susp]" message from Avast anti-virus installed on your Android device it is due to the fact that you are side-loading the app (or the Intel XDK Debug modules) onto your device (using a download link after building or by using the Debug tab to debug your app), or your app has been installed from an "untrusted" Android store. See the following official explanation from Avast:

Your application was flagged by our cloud reputation system. "Cloud rep" is a new feature of Avast Mobile Security, which flags apks when the following conditions are met:

  1. The file is not prevalent enough; meaning not enough users of Avast Mobile Security have installed your APK.
  2. The source is not an established market (Google Play is an example of an established market).

If you distribute your app using Google Play (or any other trusted market) your users should not see any warning from Avast.

Following are some of the Avast anti-virus notification screens you might see on your device. All of these are perfectly normal, they are due to the fact that you must enable the installation of "non-market" apps in order to use your device for debug and the App IDs associated with your never published app or the custom debug modules that the Debug tab in the Intel XDK builds and installs on your device will not be found in a "established" (aka "trusted") market, such as Google Play.

If you choose to ignore the "Suspicious app activity!" threat you will not receive a threat for that debug module any longer. It will show up in the Avast 'ignored issues' list. Updates to an existing, ignored, custom debug module should continue to be ignored by Avast. However, new custom debug modules (due to a new project App ID or a new version of Crosswalk selected in your project's Build Settings) will result in a new warning from the Avast anti-virus tool.

  

  

How do I add a Brackets extension to the editor that is part of the Intel XDK?

The number of Brackets extensions that are provided in the built-in edition of the Brackets editor are limited to insure stability of the Intel XDK product. Not all extensions are compatible with the edition of Brackets that is embedded within the Intel XDK. Adding incompatible extensions can cause the Intel XDK to quit working.

Despite this warning, there are useful extensions that have not been included in the editor and which can be added to the Intel XDK. Adding them is temporary, each time you update the Intel XDK (or if you reinstall the Intel XDK) you will have to "re-add" your Brackets extension. To add a Brackets extension, use the following procedure:

  • exit the Intel XDK
  • download a ZIP file of the extension you wish to add
  • on Windows, unzip the extension here:
    %LocalAppData%\Intel\XDK\xdk\brackets\b\extensions\dev
  • on Mac OS X, unzip the extension here:
    /Applications/Intel\ XDK.app/Contents/Resources/app.nw/brackets/b/extensions/dev
  • start the Intel XDK

Note that the locations given above are subject to change with new releases of the Intel XDK.

Why does my app or game require so many permissions on Android when built with the Intel XDK?

When you build your HTML5 app using the Intel XDK for Android or Android-Crosswalk you are creating a Cordova app. It may seem like you're not building a Cordova app, but you are. In order to package your app so it can be distributed via an Android store and installed on an Android device, it needs to be built as a hybrid app. The Intel XDK uses Cordova to create that hybrid app.

A pure Cordova app requires the NETWORK permission, it's needed to "jump" between your HTML5 environment and the native Android environment. Additional permissions will be added by any Cordova plugins you include with your application; which permissions are includes are a function of what that plugin does and requires.

Crosswalk for Android builds also require the NETWORK permission, because the Crosswalk image built by the Intel XDK includes support for Cordova. In addition, current versions of Crosswalk (12 and 14 at the time this FAQ was written)also require NETWORK STATE and WIFI STATE. There is an extra permission in some versions of Crosswalk (WRITE EXTERNAL STORAGE) that is only needed by the shared model library of Crosswalk, we have asked the Crosswalk project to remove this permission in a future Crosswalk version.

If you are seeing more than the following five permissions in your XDK-built Crosswalk app:

  • android.permission.INTERNET
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.ACCESS_WIFI_STATE
  • android.permission.INTERNET
  • android.permission.WRITE_EXTERNAL_STORAGE

then you are seeing permissions that have been added by some plugins. Each plugin is different, so there is no hard rule of thumb. The two "default" core Cordova plugins that are added by the Intel XDK blank templates (device and splash screen) do not require any Android permissions.

BTW: the permission list above comes from a Crosswalk 14 build. Crosswalk 12 builds do not included the last permission; it was added when the Crosswalk project introduced the shared model library option, which started with Crosswalk 13 (the Intel XDK does not support 13 builds).

How do I make a copy of an existing Intel XDK project?

If you just need to make a backup copy of an existing project, and do not plan to open that backup copy as a project in the Intel XDK, do the following:

  • Exit the Intel XDK.
  • Copy the entire project directory:
    • on Windows, use File Explorer to "right-click" and "copy" your project directory, then "right-click" and "paste"
    • on Mac use Finder to "right-click" and then "duplicate" your project directory
    • on Linux, open a terminal window, "cd" to the folder that contains your project, and type "cp -a old-project/ new-project/" at the terminal prompt (where "old-project/" is the folder name of your existing project that you want to copy and "new-project/" is the name of the new folder that will contain a copy of your existing project)

If you want to use an existing project as the starting point of a new project in the Intel XDK. The process described below will insure that the build system does not confuse the ID in your old project with that stored in your new project. If you do not follow the procedure below you will have multiple projects using the same project ID (a special GUID that is stored inside the Intel XDK <project-name>.xdk file in the root directory of your project). Each project in your account must have a unique project ID.

  • Exit the Intel XDK.
  • Make a copy of your existing project using the process described above.
  • Inside the new project that you made (that is, your new copy of your old project), make copies of the <project-name>.xdk file and <project-name>.xdke files and rename those copies to something like project-new.xdk and project-new.xdke (anything you like, just something different than the original project name, preferably the same name as the new project folder in which you are making this new project).
  • Using a TEXT EDITOR (only) (such as Notepad or Sublime or Brackets or some other TEXT editor), open your new "project-new.xdk" file (whatever you named it) and find the projectGuid line, it will look something like this:
    "projectGuid": "a863c382-ca05-4aa4-8601-375f9f209b67",
  • Change the "GUID" to all zeroes, like this: "00000000-0000-0000-000000000000"
  • Save the modified "project-new.xdk" file.
  • Open the Intel XDK.
  • Goto the Projects tab.
  • Select "Open an Intel XDK Project" (the green button at the bottom left of the Projects tab).
  • To open this new project, locate the new "project-new.xdk" file inside the new project folder you copied above.
  • Don't forget to change the App ID in your new project. This is necessary to avoid conflicts with the project you copied from, in the store and when side-loading onto a device.

My project does not include a www folder. How do I fix it so it includes a www or source directory?

The Intel XDK HTML5 and Cordova project file structures are meant to mimic a standard Cordova project. In a Cordova (or PhoneGap) project there is a subdirectory (or folder) named www that contains all of the HTML5 source code and asset files that make up your application. For best results, it is advised that you follow this convention, of putting your source inside a "source directory" inside of your project folder.

This most commonly happens as the result of exporting a project from an external tool, such as Construct2, or as the result of importing an existing HTML5 web app that you are converting into a hybrid mobile application (eg., an Intel XDK Corodova app). If you would like to convert an existing Intel XDK project into this format, follow the steps below:

  • Exit the Intel XDK.
  • Copy the entire project directory:
    • on Windows, use File Explorer to "right-click" and "copy" your project directory, then "right-click" and "paste"
    • on Mac use Finder to "right-click" and then "duplicate" your project directory
    • on Linux, open a terminal window, "cd" to the folder that contains your project, and type "cp -a old-project/ new-project/" at the terminal prompt (where "old-project/" is the folder name of your existing project that you want to copy and "new-project/" is the name of the new folder that will contain a copy of your existing project)
  • Create a "www" directory inside the new duplicate project you just created above.
  • Move your index.html and other source and asset files to the "www" directory you just created -- this is now your "source" directory, located inside your "project" directory (do not move the <project-name>.xdk and xdke files and any intelxdk.config.*.xml files, those must stay in the root of the project directory)
  • Inside the new project that you made above (by making a copy of the old project), rename the <project-name>.xdk file and <project-name>.xdke files to something like project-copy.xdk and project-copy.xdke (anything you like, just something different than the original project, preferably the same name as the new project folder in which you are making this new project).
  • Using a TEXT EDITOR (only) (such as Notepad or Sublime or Brackets or some other TEXT editor), open the new "project-copy.xdk" file (whatever you named it) and find the line named projectGuid, it will look something like this:
    "projectGuid": "a863c382-ca05-4aa4-8601-375f9f209b67",
  • Change the "GUID" to all zeroes, like this: "00000000-0000-0000-000000000000"
  • A few lines down find: "sourceDirectory": "",
  • Change it to this: "sourceDirectory": "www",
  • Save the modified "project-copy.xdk" file.
  • Open the Intel XDK.
  • Goto the Projects tab.
  • Select "Open an Intel XDK Project" (the green button at the bottom left of the Projects tab).
  • To open this new project, locate the new "project-copy.xdk" file inside the new project folder you copied above.

Can I install more than one copy of the Intel XDK onto my development system?

Yes, you can install more than one version onto your development system. However, you cannot run multiple instances of the Intel XDK at the same time. Be aware that new releases sometimes change the project file format, so it is a good idea, in these cases, to make a copy of your project if you need to experiment with a different version of the Intel XDK. See the instructions in a FAQ entry above regarding how to make a copy of your Intel XDK project.

Follow the instructions in this forum post to install more than one copy of the Intel XDK onto your development system.

On Apple OS X* and Linux* systems, does the Intel XDK need the OpenSSL* library installed?

Yes. Several features of the Intel XDK require the OpenSSL library, which typically comes pre-installed on Linux and OS X systems. If the Intel XDK reports that it could not find libssl, go to https://www.openssl.org to download and install it.

I have a web application that I would like to distribute in app stores without major modifications. Is this possible using the Intel XDK?

Yes, if you have a true web app or “client app” that only uses HTML, CSS and JavaScript, it is usually not too difficult to convert it to a Cordova hybrid application (this is what the Intel XDK builds when you create an HTML5 app). If you rely heavily on PHP or other server scripting languages embedded in your pages you will have more work to do. Because your Cordova app is not associated with a server, you cannot rely on server-based programming techniques; instead, you must rewrite any such code to user RESTful APIs that your app interacts with using, for example, AJAX calls.

What is the best training approach to using the Intel XDK for a newbie?

First, become well-versed in the art of client web apps, apps that rely only on HTML, CSS and JavaScript and utilize RESTful APIs to talk to network services. With that you will have mastered 80% of the problem. After that, it is simply a matter of understanding how Cordova plugins are able to extend the JavaScript API for access to features of the platform. For HTML5 training there are many sites providing tutorials. It may also help to read Five Useful Tips on Getting Started Building Cordova Mobile Apps with the Intel XDK, which will help you understand some of the differences between developing for a traditional server-based environment and developing for the Intel XDK hybrid Cordova app environment.

What is the best platform to start building an app with the Intel XDK? And what are the important differences between the Android, iOS and other mobile platforms?

There is no one most important difference between the Android, iOS and other platforms. It is important to understand that the HTML5 runtime engine that executes your app on each platform will vary as a function of the platform. Just as there are differences between Chrome and Firefox and Safari and Internet Explorer, there are differences between iOS 9 and iOS 8 and Android 4 and Android 5, etc. Android has the most significant differences between vendors and versions of Android. This is one of the reasons the Intel XDK offers the Crosswalk for Android build option, to normalize and update the Android issues.

In general, if you can get your app working well on Android (or Crosswalk for Android) first you will generally have fewer issues to deal with when you start to work on the iOS and Windows platforms. In addition, the Android platform has the most flexible and useful debug options available, so it is the easiest platform to use for debugging and testing your app.

Is my password encrypted and why is it limited to fifteen characters?

Yes, your password is stored encrypted and is managed by https://signin.intel.com. Your Intel XDK userid and password can also be used to log into the Intel XDK forum as well as the Intel Developer Zone. the Intel XDK does not store nor does it manage your userid and password.

The rules regarding allowed userids and passwords are answered on this Sign In FAQ page, where you can also find help on recovering and changing your password.

Why does the Intel XDK take a long time to start on Linux or Mac?

...and why am I getting this error message? "Attempt to contact authentication server is taking a long time. You can wait, or check your network connection and try again."

At startup, the Intel XDK attempts to automatically determine the proxy settings for your machine. Unfortunately, on some system configurations it is unable to reliably detect your system proxy settings. As an example, you might see something like this image when starting the Intel XDK.

On some systems you can get around this problem by setting some proxy environment variables and then starting the Intel XDK from a command-line that includes those configured environment variables. To set those environment variables, similar to the following:

$ export no_proxy="localhost,127.0.0.1/8,::1"
$ export NO_PROXY="localhost,127.0.0.1/8,::1"
$ export http_proxy=http://proxy.mydomain.com:123/
$ export HTTP_PROXY=http://proxy.mydomain.com:123/
$ export https_proxy=http://proxy.mydomain.com:123/
$ export HTTPS_PROXY=http://proxy.mydomain.com:123/

IMPORTANT! The name of your proxy server and the port (or ports) that your proxy server requires will be different than those shown in the example above. Please consult with your IT department to find out what values are appropriate for your site. Intel has no way of knowing what configuration is appropriate for your network.

If you use the Intel XDK in multiple locations (at work and at home), you may have to change the proxy settings before starting the Intel XDK after switching to a new network location. For example, many work networks use a proxy server, but most home networks do not require such a configuration. In that case, you need to be sure to "unset" the proxy environment variables before starting the Intel XDK on a non-proxy network.

After you have successfully configured your proxy environment variables, you can start the Intel XDK manually, from the command-line.

On a Mac, where the Intel XDK is installed in the default location, type the following (from a terminal window that has the above environment variables set):

$ open /Applications/Intel\ XDK.app/

On a Linux machine, assuming the Intel XDK has been installed in the ~/intel/XDK directory, type the following (from a terminal window that has the above environment variables set):

$ ~/intel/XDK/xdk.sh &

In the Linux case, you will need to adjust the directory name that points to the xdk.sh file in order to start. The example above assumes a local install into the ~/intel/XDK directory. Since Linux installations have more options regarding the installation directory, you will need to adjust the above to suit your particular system and install directory.

How do I generate a P12 file on a Windows machine?

See these articles:

How do I change the default dir for creating new projects in the Intel XDK?

You can change the default new project location manually by modifying a field in the global-settings.xdk file. Locate the global-settings.xdk file on your system (the precise location varies as a function of the OS) and find this JSON object inside that file:

"projects-tab": {"defaultPath": "/Users/paul/Documents/XDK","LastSortType": "descending|Name","lastSortType": "descending|Opened","thirdPartyDisclaimerAcked": true
  },

The example above came from a Mac. On a Mac the global-settings.xdk file is located in the "~/Library/Application Support/XDK" directory.

On a Windows machine the global-settings.xdk file is normally found in the "%LocalAppData%\XDK" directory. The part you are looking for will look something like this:

"projects-tab": {"thirdPartyDisclaimerAcked": false,"LastSortType": "descending|Name","lastSortType": "descending|Opened","defaultPath": "C:\\Users\\paul/Documents"
  },

Obviously, it's the defaultPath part you want to change.

BE CAREFUL WHEN YOU EDIT THE GLOBAL-SETTINGS.XDK FILE!! You've been warned...

Make sure the result is proper JSON when you are done, or it may cause your XDK to cough and hack loudly. Make a backup copy of global-settings.xdk before you start, just in case.

Where I can find recent and upcoming webinars list?

 

How can I change the email address associated with my Intel XDK login?

Create a new Intel XDK login with the email address of your choice. Send the old and new email addresses to html5tools@intel.com with a short description of your request and we can help you transfer the old account into the new one.

What network addresses must I enable in my firewall to insure the Intel XDK will work on my restricted network?

Normally, access to the external servers that the Intel XDK uses is handled automatically by your proxy server. However, if you are working in an environment that has restricted Internet access and you need to provide your IT department with a list of URLs that you need access to in order to use the Intel XDK, then please provide them with the following list of domain names:

  • appcenter.html5tools-software.intel.com (for communication with the build servers)
  • s3.amazonaws.com (for downloading sample apps and built apps)
  • download.xdk.intel.com (for getting XDK updates)
  • debug-software.intel.com (for using the Test tab weinre debug feature)
  • xdk-feed-proxy.html5tools-software.intel.com (for receiving the tweets in the upper right corner of the XDK)
  • signin.intel.com (for logging into the XDK)
  • sfederation.intel.com (for logging into the XDK)

Normally this should be handled by your network proxy (if you're on a corporate network) or should not be an issue if you are working on a typical home network.

Back to FAQs Main


Intel® Xeon® Processor E5 v4 Product Family

$
0
0

Based on Intel® Core™ microarchitecture (code-named Broadwell) and manufactured on 14-nanometer process technology, these processors provide significant performance over the previous-generation Intel® Xeon® processor E5 v3 product family. This Intel® Xeon® processor family introduces new instructions that will benefit integer operations and enhance security as well as new technologies to make better use of the last level cache and to monitor the memory bandwidth.

For a more in-depth discussion of the key features and the architecture of the Intel® Xeon® E5 v4 product family see the technical overview document.

Key supported features you should be aware of, as a Software Developer:

  • New instruction supporting cryptography. New instruction RDSEED provides high-quality seed values for software pseudo-random number generators. This article shows the difference between RDRAND and RDSEED.
  • New instructions supporting integer. Two new instructions ADCX and ADOX improve the performance of large-integer applications.
  • Resource Director Technology (RDT). RDT Introduces three new features called Cache Allocation Technology (CAT), Memory Bandwidth Monitoring (MBM), and Code and Data Prioritization (CDP). CAT allows the OS to specify how much cache space an application can utilize, while MBM monitors how much memory bandwidth is utilized and CDP limits how much cache space data can utilize to make room code in the last level cache. More information about these features can be found here.

Case studies:

Learn more about the Intel® Xeon® E7 v3 product family here.

Diagnostic 15415 vectorization support: gather was generated for the variable a: indirect access

$
0
0

Product Version: Intel® Fortran Compiler 15.0 and a later version 

Cause:

A vectorizable loop contains loads from memory locations that are not contiguous in memory (sometimes known as a “gather”). These may be indexed loads, as in the example below, or loads with non-unit stride. The compiler has issued a hardware gather instruction for these loads.

(Note that for compiler versions 16.0.1 and earlier, the compiler may also emit this message when gather operations are emulated in software).

 

The vectorization report generated using Intel® Fortran Compiler's optimization and vectorization report options:

Windows* OS:  /O2  /Qopt-report:2  /Qopt-report-phase:vec    

Linux OS or OS X:  -O2 -qopt-report2  -qopt-report-phase=vec

Example:

An example below will generate the following  remark in optimization report:

subroutine gathr(n, a, b, index)
   implicit none
   integer,                intent(in)  :: n
   integer,  dimension(n), intent(in)  :: index
   real(RT), dimension(n), intent(in)  :: a
   real(RT), dimension(n), intent(out) :: b
   integer                             :: i

   do i=1,n
       b(i) = 1.0_RT + 0.1_RT*a(index(i))
   enddo

end subroutine gathr

$ ifort -c -xcore-avx2 -qopt-report=4 -qopt-report-file=stdout gathr.F90 -DRT=4 -S | egrep 'gather|VECTORIZED'

   remark #15415: vectorization support: gather was generated for the variable a:  indirect access    [ gathr.F90(10,29) ]

   remark #15300: LOOP WAS VECTORIZED

   remark #15458: masked indexed (or gather) loads: 1

   remark #15301: REMAINDER LOOP WAS VECTORIZED

$ egrep gather gathr.s

        vgatherdps %ymm4, -4(%r8,%ymm3,4), %ymm5                #10.29

        vgatherdps %ymm7, -4(%r8,%ymm6,4), %ymm8                #10.29

        vgatherdps %ymm3, -4(%r8,%ymm2,4), %ymm4                #10.29

$

The compiler has vectorized the loop using a “gather” instruction from Intel® Advanced Vector Extensions 2 (Intel® AVX2).

Compare to the behavior when compiling with -DRT=8  as described in the article for diagnostic #15328.

 

Resolution: 

See also:

Requirements for Vectorizable Loops

Vectorization Essentials

Vectorization and Optimization Reports

Back to the list of vectorization diagnostics for Intel® Fortran

Intel® Math Kernel Library (Intel® MKL) 2017 Bug Fixes list

$
0
0

 

Intel® MKL 2017 Beta ( 17 Feb 2016) 

DPD200577117 SP2DP custom library sources created and published in online article
DPD200575663 Fixed the problem of SVD computation of very wide matrix performing significantly slower than SVD computation of its transposition
DPD200574694 Introduced support for major-column format in df?Interpolate1D routines
DPD200576806 Fixed the Pardiso hang problem when called from an OMP critical section
DPD200580172 Problem of Pardiso hanging up on the reordering stage for real and symmetric indefinite matrix
DPD200576441 Fixed the issue - MKL Cluster FFTW and original FFTW produce the different results in the case of out-of-place computation
DPD200574978 Resolved the segmentation fault resulting from a call to pthread_exit(0)
DPD200571078 Introduced mkl_progress support for the parallel direct sparse solver for clusters
DPD200372223 Improved performance of spline interpolation on multiple threads
DPD200374978 Improved performance of GEMM family routines for skinny matrix A(n,k) for n/k > 100 for Intel(R) Xeon Phi™( aka KNL )

 

Intel® C++ Compiler 17.0 Release Notes

$
0
0

This page provides links to the current Release Notes for the Intel® C++ Compiler 17.0 component of Intel® Parallel Studio XE 2017 for Windows*, Linux* and OS X*. 

To get product updates, log in to the Intel® Software Development Products Registration Center.

For questions or technical support, visit Intel® Software Products Support.

For Release Notes for other versions, visit Intel® Compiler Release Notes.

 

Intel® C++ Compiler 17.0 for
Windows*

Intel® C++ Compiler 17.0 for
Linux*

Intel® C++ Compiler 17.0 for
OS X*

Release Notes
English

Release Notes
English

Release Notes
English

Value What? Why You Need a Value Proposition & How to Write One

$
0
0

Your value proposition—a single sentence that helps communicate what you do, who you do it for, and why you do it—defines your product. Not only does it communicate the literal definition of your product or app, but it can also help guide you as you continue the development of your product, providing clarity and direction as you consider new features and iterate.

As you dive into this article, you’ll see why having a well-formed value proposition is helpful throughout the development process, but also as you consider how to market and talk about your app to investors, stakeholders, and customers.
 

Why Do You Need a Value Proposition?

It’s important that you’re able to articulate how you're better than the competition, and the only way to do that is by being able to define clearly what your offering is in the first place. Keep in mind that your value proposition is not the same thing as a slogan or a mission statement. It should be in clear, straightforward language, and focused on a specific product. A slogan is intended to inspire potential customers but doesn’t necessarily speak to the product offering, while a mission statement is meant to encompass the entire company and bigger organizational goals.

Your value proposition delivers a synopsis of what you are offering to customers and why they should choose it.
 

How Will You Use Your Value Proposition?

•    App Store Description– App stores are incredibly noisy places, and might be the only place a potential customer comes across your product. Your value prop will be the basis of a app store copy that tells your customer everything they need to know about your app succinctly when it counts.
 

•    Presentations and Emails– Whenever you have an opportunity to tell people about your product, you'll use your value prop to explain it quickly and clearly. This will come into play when you want to get funding and attract advertisers and customers.
 

•   North Star for Development– When new potential features come up, you can review the value proposition to help determine if they align with your goal for your product. If a feature helps improve the product offering as defined, great! If not, save that feature for another product.
 

•    To Stay on the Same Page– A good value prop will also ensure that everyone in your organization is on the same page for PR, getting funding, and for evangelism. If you can’t communicate who you are and what you're doing, no one else will be able to do it for you. This is a key component to establishing word of mouth.
 

Developing Your Value Proposition: Clarify Your Vision and Ask Questions

So now you know why you need a value proposition and where you’ll use it. But how do you create one?

Before you can clearly explain what you’re offering to the world, you have to first understand it yourself. The process of defining your value proposition—asking questions of relevant target groups, considering the different benefits levels, understanding what features your customers care about most—helps you do that. Once you put something into words, you’ll have a much clearer picture of it and a much better sense of its worth.

This process also can help you generate interest, buzz, and curiosity in your offering. It allows anyone you work with to understand your vision, including external partners and potential customers. No one but the most invested partner or friend is going to bother listening to a long rambling explanation of what you’re building and what it might be able to offer them. So to maximize your offering and get the most interest—you need to be able to explain it in one sentence.

To go about creating your value prop, consider taking the following steps.
 

Brainstorm to clarify your vision.

First, take a good look at what you believe you're building, and what your intentions are. Put those words on paper, and brainstorm different variations. Continue to review and iterate until you are confident that you’ve:

  1. Communicated the main purpose or intention for your product or app
     
  2. Pinpointed who your product or app is for
     
  3. Highlighted the problems you are trying to solve

Tip: Try creating a mind map to visualize how your product fits into the bigger picture or create a word cloud of all the relevant features as you try to piece together a cohesive message.
 

Then ask yourself these questions.

  1. What are your competitors saying about themselves?

    Do research in the app store and check out the competition’s marketing materials. See how they describe their products. You’ll need to stand out from the crowd, but you also want to be sure you’re using clear, familiar language that your customers understand.

     
  2. How would customers explain your product’s worth?

    Sometimes the answers here are surprising. You thought you were providing a digital level for home improvement projects, but your actual audience has discovered that it’s the perfect guide to drawing straight lines. Asking them helps you understand the reality of your product. If your product hasn’t been released, talk to potential customers during your market validation phase. And if you’ve already launched, reach out to current customers and get their thoughts. Why are they interested in your product, or a similar product? What do they understand the benefits to be?

     
  3. How does your team envision what you’re doing?

    When you’re working on something, you have plenty of time to think about what your product is and how to explain it to others. Your internal team—whether it’s a full staff, or your closest friends and relatives—can shed some interesting light on how they perceive your product. They need to understand it in plain language and be able to explain it in plain language. Their description of the product and its benefits can help you identify and define its true value.

     

Using the Benefits Ladder as a Guide

Another approach is to use a tool called the benefits ladder framework as a guide. Rather than starting with your customers, the benefits ladder asks you to start with your product features and build upward from there.



First, list the main features of your product. Then think about what each feature does for the customer. For example, a photo editor might include custom filters that allow users to change the photo into an illustration or painting. The next step is to figure out how that function benefits the user. In this case, she can make any photo into a work of art. This may seem like a great stopping point, but take the process a step further and determine the emotional reward that comes from that benefit. In this case, the emotional reward may be that she can express her creativity.

To use the benefits ladder to create a value proposition, try answering the questions about your product as a whole, rather than about specific features. The resulting customer benefit and emotional reward becomes the heart of your value proposition and should tie in directly to your customers’ pain points.

Download our benefits ladder worksheet to use as a guide for creating yours.
 

Common Pitfalls to Avoid

Not being authentic. When you write a value prop, it can sometimes seem like you have to speak in “business language”—which results in something full of buzzwords and jargon that doesn’t mean anything to your customer. It probably also isn’t actually true to your offering. Use simple, straightforward language, and stay true to the product.

Being too broad or generic. If the benefits of your product are too generic, you might not be solving anything for anyone. Be specific!

Not validating the value prop. It's important to reach out and validate your assumptions. Internally, you can find yourself in an echo chamber, where it’s easy to miss a simple fix. Ask friends, family, professors, colleagues, and strangers if your idea resonates with them.
 

Don’t Forget to Iterate!

You’ll soon realize there is no "final" right answer, so remember that your value proposition is something that can change over time, through development, and even after launch. As we’ve explained, your value proposition is an important part of guiding creation and development, and it’s also important to measure actual results and make necessary adjustments. And if nothing else, you can think of writing one as a hypothesis—to explain what you do and why people might value it, and see if it’s true.
 

What’s the hardest thing about communicating your product idea to an external stakeholder, customer, or friend? Can you think of an example of a great value proposition that you’ve seen?

Intel® XDK FAQs - Crosswalk

$
0
0

How do I play audio with different playback rates?

Here is a code snippet that allows you to specify playback rate:

var myAudio = new Audio('/path/to/audio.mp3');
myAudio.play();
myAudio.playbackRate = 1.5;

Why are Intel XDK Android Crosswalk build files so large?

When your app is built with Crosswalk it will be a minimum of 15-18MB in size because it includes a complete web browser (the Crosswalk runtime or webview) for rendering your app instead of the built-in webview on the device. Despite the additional size, this is the preferred solution for Android, because the built-in webviews on the majority of Android devices are inconsistent and poorly performing.

See these articles for more information:

Why is the size of my installed app much larger than the apk for a Crosswalk application?

This is because the apk is a compressed image, so when installed it occupies more space due to being decompressed. Also, when your Crosswalk app starts running on your device it will create some data files for caching purposes which will increase the installed size of the application.

Why does my Android Crosswalk build fail with the com.google.playservices plugin?

The Intel XDK Crosswalk build system used with CLI 4.1.2 Crosswalk builds does not support the library project format that was introduced in the "com.google.playservices@21.0.0" plugin. Use "com.google.playservices@19.0.0" instead.

Why does my app fail to run on some devices?

There are some Android devices in which the GPU hardware/software subsystem does not work properly. This is typically due to poor design or improper validation by the manufacturer of that Android device. Your problem Android device probably falls under this category.

How do I stop "pull to refresh" from resetting and restarting my Crosswalk app?

See the code posted in this forum thread for a solution: /en-us/forums/topic/557191#comment-1827376.

An alternate solution is to add the following lines to your intelxdk.config.additions.xml file:

<!-- disable reset on vertical swipe down --><intelxdk:crosswalk xwalk-command-line="--disable-pull-to-refresh-effect" />

Which versions of Crosswalk are supported and why do you not support version X, Y or Z?

The specific versions of Crosswalk that are offered via the Intel XDK are based on what the Crosswalk project releases and the timing of those releases relative to Intel XDK build system updates. This is one of the reasons you do not see every version of Crosswalk supported by our Android-Crosswalk build system.

With the September, 2015 release of the Intel XDK, the method used to build embedded Android-Crosswalk versions changed to the "pluggable" webview Cordova build system. This new build system was implemented with the help of the Cordova project and became available with their release of the Android Cordova 4.0 framework (coincident with their Cordova CLI 5 release). With this change to the Android Cordova framework and the Cordova CLI build system, we can now more quickly adapt to new version releases of the Crosswalk project. Support for previous Crosswalk releases required updating a special build system that was forked from the Cordova Android project. This new "pluggable" webview build system means that the build system can now use the standard Cordova build system, because it now includes the Crosswalk library as a "pluggable" component.

The "old" method of building Android-Crosswalk APKs relied on a "forked" version of the Cordova Android framework, and is based on the Cordova Android 3.6.3 framework and is used when you select CLI 4.1.2 in the Project tab's build settings page. Only Crosswalk versions 7, 10, 11, 12 and 14 are supported by the Intel XDK when using this build setting.

Selecting CLI 5.1.1 in the build settings will generate a "pluggable" webview built app. A "pluggable" webview app (built with CLI 5.1.1) results in an app built with the Cordova Android 4.1.0 framework. As of the latest update to this FAQ, the CLI 5.1.1 build system supported Crosswalk 15. Future releases of the Intel XDK and the build system will support higher versions of Crosswalk and the Cordova Android framework.

In both cases, above, the net result (when performing an "embedded" build) will be two processor architecture-specific APKs: one for use on an x86 device and one for use on an ARM device. The version codes of those APKs are modified to insure that both can be uploaded to the Android store under the same app name, insuring that the appropriate APK is automatically delivered to the matching device (i.e., the x86 APK is delivered to Intel-based Android devices and the ARM APK is delivered to ARM-based Android devices).

For more information regarding Crosswalk and the Intel XDK, please review these documents:

How do I prevent my Crosswalk app from auto-completing passwords?

Use the Ionic Keyboard plugin and set the spellcheck attribute to false.

How can I improve the performance of my Construct2 game build with Crosswalk?

Beginning with the Intel XDK CLI 5.1.1 build system you must add the --ignore-gpu-blacklist option to your intelxdk.config.additions.xml file if you want the additional performance this option provides to blacklisted devices. See this forum post for additional details.

If you are a Construct2 game developer, please read this blog by another Construct2 game developer regarding how to properly configure your game for proper Crosswalk performance > How to build optimized Intel XDK Crosswalk app properly?<

Also, you can experiment with the CrosswalkAnimatable option in your intelxdk.config.additions.xml file (details regarding the CrosswalkAnimatable option are available in this Crosswalk Project wiki post: Android SurfaceView vs TextureView).

<!-- Controls configuration of Crosswalk-Android "SurfaceView" or "TextureView" --><!-- Default is SurfaceView if >= CW15 and TextureView if <= CW14 --><!-- Option can only be used with Intel XDK CLI5+ build systems --><!-- SurfaceView is preferred, TextureView should only be used in special cases --><!-- Enable Crosswalk-Android TextureView by setting this option to true --><preference name="CrosswalkAnimatable" value="false" />

See Chromium Command-Line Options for Crosswalk Builds with the Intel XDK for some additional tools that can be used to modify the Crosswalk's webview runtime parameters, especially the --ignore-gpu-blacklist option.

Why does the Google store refuse to publish my Crosswalk app?

For full details, please read Android and Crosswalk Cordova Version Code Issues. For a summary, read this FAQ.

There is a change to the version code handling by the Crosswalk and Android build systems based on Cordova CLI 5.0 and later. This change was implemented by the Apache Cordova project. This new version of Cordova CLI automatically modifies the android:versionCode when building for Crosswalk and Android. Because our CLI 5.1.1 build system is now more compatible with standard Cordova CLI, this change results in a discrepancy in the way your android:versionCode is handled when building for Crosswalk (15) or Android with CLI 5.1.1 when compared to building with CLI 4.1.2.

If you have never published an app to an Android store this change will have little or no impact on you. This change might affect attempts to side-load an app onto a device, in which case the simplest solution is to uninstall the previously side-loaded app before installing the new app.

Here's what Cordova CLI 5.1.1 (Cordova-Android 4.x) is doing with the android:versionCode number (which you specify in the App Version Code field within the Build Settings section of the Projects tab):

Cordova-Android 4.x (Intel XDK CLI 5.1.1 for Crosswalk or Android builds) does this:

  • multiplies your android:versionCode by 10

then, if you are doing a Crosswalk (15) build:

  • adds 2 to the android:versionCode for ARM builds
  • adds 4 to the android:versionCode for x86 builds

otherwise, if you are performing a standard Android build (non-Crosswalk):

  • adds 0 to the android:versionCode if the Minimum Android API is < 14
  • adds 8 to the android:versionCode if the Minimum Android API is 14-19
  • adds 9 to the android:versionCode if the Minimum Android API is > 19 (i.e., >= 20)

If you HAVE PUBLISHED a Crosswalk app to an Android store this change may impact your ability to publish a newer version of your app! In that case, if you are building for Crosswalk, add 6000 (six with three zeroes) to your existing App Version Code field in the Crosswalk Build Settings section of the Projects tab. If you have only published standard Android apps in the past and are still publishing only standard Android apps you should not have to make any changes to the App Version Code field in the Android Builds Settings section of the Projects tab.

The workaround described above only applies to Crosswalk CLI 5.1.1 and later builds!

When you build a Crosswalk app with CLI 4.1.2 (which uses Cordova-Android 3.6) you will get the old Intel XDK behavior where: 60000 and 20000 (six with four zeros and two with four zeroes) are added to the android:versionCode for Crosswalk builds and no change is made to the android:versionCode for standard Android builds.

NOTE:

  • Android API 14 corresponds to Android 4.0
  • Android API 19 corresponds to Android 4.4
  • Android API 20 corresponds to Android 5.0
  • CLI 5.1.1 (Cordova-Android 4.x) does not allow building for Android 2.x or Android 3.x

Why is my Crosswalk app generating errno 12 Out of memory errors on some devices?

If you are using the WebGL 2D canvas APIs and your app crashes on some devices because you added the --ignore-gpu-blacklist flag to your intelxdk.config.additions.xml file, you may need to also add the --disable-accelerated-2d-canvas flag. Using the --ignore-gpu-blacklist flag enables the use of the GPU in some problem devices, but can then result in problems with some GPUs that are not blacklisted. The --disable-accelerated-2d-canvas flag allows those non-blacklisted devices to operate properly in the presence of WebGL 2D canvas APIs and the --ignore-gpu-blacklist flag.

You likely have this problem if your app crashes after running a few seconds with the an error like the following:

<gsl_ldd_control:364>: ioctl fd 46 code 0xc00c092f (IOCTL_KGSL_GPMEM_ALLOC) failed: errno 12 Out of memory <ioctl_kgsl_sharedmem_alloc:1176>: ioctl_kgsl_sharedmem_alloc: FATAL ERROR : (null).

See Chromium Command-Line Options for Crosswalk Builds with the Intel XDK for additional info regarding the --ignore-gpu-blacklist flag and other Chromium option flags.

Construct2 Tutorial: How to use AdMob and IAP plugins with Crosswalk and the Intel XDK.

See this tutorial on the Scirra tutorials site > How to use AdMob and IAP official plugins on Android-Crosswalk/XDK < written by Construct2 developer Kyatric.

Also, see this blog written by a Construct2 game developer regarding how to build a Construct2 app using the Appodeal ad plugin with your Construct2 app and the Intel XDK > How to fix the build error with Intel XDK and Appodeal? <.

Back to FAQs Main

Developer Access Program for Intel® Xeon Phi™ Processor codenamed Knights Landing

$
0
0

Intel is bringing to market, in anticipation of general availability of the Intel® Xeon Phi™ Processor (codenamed Knights Landing), the Developer Access Program (DAP). DAP is an early access program for developers worldwide to purchase an Intel Xeon Phi Processor based system. This is a stand-alone box that has a single bootable Knights Landing processor for developers to start developing codes, optimizing applications, and getting to see the performance.

The turnkey Ninja Developer Platform for Knights Landing comes fully configured with memory, local storage, CentOS 7.2, Intel tools, and provides how-to and optimization guides, with support and training from Colfax and/or local OEMs. You can further customize the platform to meet your application memory or storage needs. Included in the package is a one year license for Intel® Parallel Studio XE that includes Intel C++ compilers, Fortran compilers, Intel® Data Analytics Acceleration Library, Intel® Threading Building Blocks for C++, Intel® Integrated Performance Primitives, Intel® Math Kernel Library, Intel® Open MP, Intel® Advisor XE, Intel® Inspector XE, and Intel® VTune Amplifier XE.

To learn more and to pre-order go here.

 

 

 


Using Intel Data Analytics Acceleration Library on Apache Spark*

$
0
0

Apache Spark* (http://spark.apache.org/) is a fast and general engine for large-scale data processing. Since its inception in 2014, Spark has become a widely adopted Big Data framework due to multiple advantages over Hadoop MapReduce. These advantages include: Fault-tolerant distributed data structures (Resilient Distributed Dataset), more operations available for data processing, ease-of-use (increased developer productivity), support for many types of clusters, and easy connection to many types of data sources. 

Spark comes with a stack of powerful libraries, including a popular machine learning library, MLlib (http://spark.apache.org/mllib/). MLlib is full of compute-intensive mathematical algorithms. However, the implementations in MLlib are not necessarily optimized for Intel Architectures. These days, Big Data infrastructures are predominantly built using Intel processors. It is therefore in many developers' interest to make Spark MLlib run faster on Intel based clusters. 

One way to make MLlib run faster is to replace MLlib algorithms with equivalent but more optimized implementations from the Intel® Data Analytics Acceleration Library (Intel® DAAL). This allows you to keep your workflow within Spark, so that at the same time your machine learning runs faster, you still enjoy Spark's other advantages, 

Intel DAAL is a software solution for developing data applications in C++, Java, or Python. The library provides a set of optimized building blocks that can be used in all stages of the data analytics workflow. These building blocks include data mining methods such as basic statistical moments, Principle Component Analysis, associating rule mining, anomaly detection, etc.; and supervised and unsupervised machine learning methods such as linear regression, classification, Support Vector Machine, clustering, etc.

See the attached presentation for a recipe on how to build faster data applications on Spark using Intel DAAL. A companion ZIP archive contains code samples discussed in the presentation. Download and unzip the archive, and build the samples with these steps:

  1. Edit pom.xml to set the correct path for 'daal.jar' on the build system. Let DAALROOT be an environment variable pointing to your Intel DAAL installation location, then 'daal.jar' is in $DAALROOT/daal.jar.
  2. Build the samples with Maven (version 3.3 and above is required): 

    mvn clean package -DskipTests

To learn more about Intel DAAL, please visit the product page: https://software.intel.com/en-us/intel-daal

If you have any questions, please ask them on our user forum: https://software.intel.com/en-us/forums/intel-data-analytics-acceleration-library 

 

 

Intel® XDK FAQs - Cordova

$
0
0

How do I set app orientation?

You set the orientation under the Build Settings section of the Projects tab.

To control the orientation of an iPad you may need to create a simply plugin that contains a single plugin.xml file like the following:

<config-file target="*-Info.plist" parent="UISupportedInterfaceOrientations~ipad" overwrite="true"><string></string></config-file><config-file target="*-Info.plist" parent="UISupportedInterfaceOrientations~ipad" overwrite="true"><array><string>UIInterfaceOrientationPortrait</string></array></config-file> 

Then add the plugin as a local plugin using the plugin manager on the Projects tab.

HINT: to import the plugin.xml file you created above, you must select the folder that contains the plugin.xml file; you cannot select the plugin.xml file itself, using the import dialg, because a typical plugin consists of many files, not a single plugin.xml. The plugin you created based on the instructions above only requires a single file, it is an atypical plugin.

Alternatively, you can use this plugin: https://github.com/yoik/cordova-yoik-screenorientation. Import it as a third-party Cordova* plugin using the plugin manager with the following information:

  • cordova-plugin-screen-orientation
  • specify a version (e.g. 1.4.0) or leave blank for the "latest" version

Or, you can reference it directly from its GitHub repo:

To use the screen orientation plugin referenced above you must add some JavaScript code to your app to manipulate the additional JavaScript API that is provided by this plugin. Simply adding the plugin will not automatically fix your orientation, you must add some code to your app that takes care of this. See the plugin's GitHub repo for details on how to use that API.

Is it possible to create a background service using Intel XDK?

Background services require the use of specialized Cordova* plugins that need to be created specifically for your needs. Intel XDK does not support development or debug of plugins, only the use of them as "black boxes" with your HTML5 app. Background services can be accomplished using Java on Android or Objective C on iOS. If a plugin that backgrounds the functions required already exists (for example, this plugin for background geo tracking), Intel XDK's build system will work with it.

How do I send an email from my App?

You can use the Cordova* email plugin or use web intent - PhoneGap* and Cordova* 3.X.

How do you create an offline application?

You can use the technique described here by creating an offline.appcache file and then setting it up to store the files that are needed to run the program offline. Note that offline applications need to be built using the Cordova* or Legacy Hybrid build options.

How do I work with alarms and timed notifications?

Unfortunately, alarms and notifications are advanced subjects that require a background service. This cannot be implemented in HTML5 and can only be done in native code by using a plugin. Background services require the use of specialized Cordova* plugins that need to be created specifically for your needs. Intel XDK does not support the development or debug of plugins, only the use of them as "black boxes" with your HTML5 app. Background services can be accomplished using Java on Android or Objective C on iOS. If a plugin that backgrounds the functions required already exists (for example, this plugin for background geo tracking) the Intel XDK's build system will work with it.

How do I get a reliable device ID?

You can use the Phonegap/Cordova* Unique Device ID (UUID) plugin for Android*, iOS* and Windows* Phone 8.

How do I implement In-App purchasing in my app?

There is a Cordova* plugin for this. A tutorial on its implementation can be found here. There is also a sample in Intel XDK called 'In App Purchase' which can be downloaded here.

How do I install custom fonts on devices?

Fonts can be considered as an asset that is included with your app, not shared among other apps on the device just like images and CSS files that are private to the app and not shared. It is possible to share some files between apps using, for example, the SD card space on an Android* device. If you include the font files as assets in your application then there is no download time to consider. They are part of your app and already exist on the device after installation.

How do I access the device's file storage?

You can use HTML5 local storage and this is a good article to get started with. Alternatively, there is aCordova* file plugin for that.

Why isn't AppMobi* push notification services working?

This seems to be an issue on AppMobi's end and can only be addressed by them. PushMobi is only available in the "legacy" container. AppMobi* has not developed a Cordova* plugin, so it cannot be used in the Cordova* build containers. Thus, it is not available with the default build system. We recommend that you consider using the Cordova* push notification plugin instead.

How do I configure an app to run as a service when it is closed?

If you want a service to run in the background you'll have to write a service, either by creating a custom plugin or writing a separate service using standard Android* development tools. The Cordova* system does not facilitate writing services.

How do I dynamically play videos in my app?

  1. Download the Javascript and CSS files from https://github.com/videojs and include them in your project file.
  2. Add references to them into your index.html file.
  3. Add a panel 'main1' that will be playing the video. This panel will be launched when the user clicks on the video in the main panel.

     
    <div class="panel" id="main1" data-appbuilder-object="panel" style=""><video id="example_video_1" class="video-js vjs-default-skin" controls="controls" preload="auto" width="200" poster="camera.png" data-setup="{}"><source src="JAIL.mp4" type="video/mp4"><p class="vjs-no-js">To view this video please enable JavaScript*, and consider upgrading to a web browser that <a href=http://videojs.com/html5-video-support/ target="_blank">supports HTML5 video</a></p></video><a onclick="runVid3()" href="#" class="button" data-appbuilder-object="button">Back</a></div>
  4. When the user clicks on the video, the click event sets the 'src' attribute of the video element to what the user wants to watch.

     
    Function runVid2(){
          Document.getElementsByTagName("video")[0].setAttribute("src","appdes.mp4");
          $.ui.loadContent("#main1",true,false,"pop");
    }
  5. The 'main1' panel opens waiting for the user to click the play button.

NOTE: The video does not play in the emulator and so you will have to test using a real device. The user also has to stop the video using the video controls. Clicking on the back button results in the video playing in the background.

How do I design my Cordova* built Android* app for tablets?

This page lists a set of guidelines to follow to make your app of tablet quality. If your app fulfills the criteria for tablet app quality, it can be featured in Google* Play's "Designed for tablets" section.

How do I resolve icon related issues with Cordova* CLI build system?

Ensure icon sizes are properly specified in the intelxdk.config.additions.xml. For example, if you are targeting iOS 6, you need to manually specify the icons sizes that iOS* 6 uses.

<icon platform="ios" src="images/ios/72x72.icon.png" width="72" height="72" /><icon platform="ios" src="images/ios/57x57.icon.png" width="57" height="57" />

These are not required in the build system and so you will have to include them in the additions file.

For more information on adding build options using intelxdk.config.additions.xml, visit: /en-us/html5/articles/adding-special-build-options-to-your-xdk-cordova-app-with-the-intelxdk-config-additions-xml-file

Is there a plugin I can use in my App to share content on social media?

Yes, you can use the PhoneGap Social Sharing plugin for Android*, iOS* and Windows* Phone.

Iframe does not load in my app. Is there an alternative?

Yes, you can use the inAppBrowser plugin instead.

Why are intel.xdk.istablet and intel.xdk.isphone not working?

Those properties are quite old and is based on the legacy AppMobi* system. An alternative is to detect the viewport size instead. You can get the user's screen size using screen.width and screen.height properties (refer to this article for more information) and control the actual view of the webview by using the viewport meta tag (this page has several examples). You can also look through this forum thread for a detailed discussion on the same.

How do I enable security in my app?

We recommend using the App Security API. App Security API is a collection of JavaScript API for Hybrid HTML5 application developers. It enables developers, even those who are not security experts, to take advantage of the security properties and capabilities supported by the platform. The API collection is available to developers in the form of a Cordova plugin (JavaScript API and middleware), supported on the following operating systems: Windows, Android & iOS.
For more details please visit: https://software.intel.com/en-us/app-security-api.

For enabling it, please select the App Security plugin on the plugins list of the Project tab and build your app as a Cordova Hybrid app. After adding the plugin, you can start using it simply by calling its API. For more details about how to get started with the App Security API plugin, please see the relevant sample app articles at: https://software.intel.com/en-us/xdk/article/my-private-photos-sample and https://software.intel.com/en-us/xdk/article/my-private-notes-sample.

Why does my build fail with Admob plugins? Is there an alternative?

Intel XDK does not support the library project that has been newly introduced in the com.google.playservices@21.0.0 plugin. Admob plugins are dependent on "com.google.playservices", which adds Google* play services jar to project. The "com.google.playservices@19.0.0" is a simple jar file that works quite well but the "com.google.playservices@21.0.0" is using a new feature to include a whole library project. It works if built locally with Cordova CLI, but fails when using Intel XDK.

To keep compatible with Intel XDK, the dependency of admob plugin should be changed to "com.google.playservices@19.0.0".

Why does the intel.xdk.camera plugin fail? Is there an alternative?

There seem to be some general issues with the camera plugin on iOS*. An alternative is to use the Cordova camera plugin, instead and change the version to 0.3.3.

How do I resolve Geolocation issues with Cordova?

Give this app a try, it contains lots of useful comments and console log messages. However, use Cordova 0.3.10 version of the geo plugin instead of the Intel XDK geo plugin. Intel XDK buttons on the sample app will not work in a built app because the Intel XDK geo plugin is not included. However, they will partially work in the Emulator and Debug. If you test it on a real device, without the Intel XDK geo plugin selected, you should be able to see what is working and what is not on your device. There is a problem with the Intel XDK geo plugin. It cannot be used in the same build with the Cordova geo plugin. Do not use the Intel XDK geo plugin as it will be discontinued.

Geo fine might not work because of the following reasons:

  1. Your device does not have a GPS chip
  2. It is taking a long time to get a GPS lock (if you are indoors)
  3. The GPS on your device has been disabled in the settings

Geo coarse is the safest bet to quickly get an initial reading. It will get a reading based on a variety of inputs, but is usually not as accurate as geo fine but generally accurate enough to know what town you are located in and your approximate location in that town. Geo coarse will also prime the geo cache so there is something to read when you try to get a geo fine reading. Ensure your code can handle situations where you might not be getting any geo data as there is no guarantee you'll be able to get a geo fine reading at all or in a reasonable period of time. Success with geo fine is highly dependent on a lot of parameters that are typically outside of your control.

Is there an equivalent Cordova* plugin for intel.xdk.player.playPodcast? If so, how can I use it?

Yes, there is and you can find the one that best fits the bill from the Cordova* plugin registry.

To make this work you will need to do the following:

  • Detect your platform (you can use uaparser.js or you can do it yourself by inspecting the user agent string)
  • Include the plugin only on the Android* platform and use <video> on iOS*.
  • Create conditional code to do what is appropriate for the platform detected

You can force a plugin to be part of an Android* build by adding it manually into the additions file. To see what the basic directives are to include a plugin manually:

  1. Include it using the "import plugin" dialog, perform a build and inspect the resulting intelxdk.config.android.xml file.
  2. Then remove it from your Project tab settings, copy the directive from that config file and paste it into the intelxdk.config.additions.xml file. Prefix that directive with <!-- +Android* -->.

More information is available here and this is what an additions file can look like:

<preference name="debuggable" value="true" /><preference name="StatusBarOverlaysWebView" value="false" /><preference name="StatusBarBackgroundColor" value="#000000" /><preference name="StatusBarStyle" value="lightcontent" /><!-- -iOS* --><intelxdk:plugin intelxdk:value="nl.nielsad.cordova.wifiscanner" /><!-- -Windows*8 --><intelxdk:plugin intelxdk:value="nl.nielsad.cordova.wifiscanner" /><!-- -Windows*8 --><intelxdk:plugin intelxdk:value="org.apache.cordova.statusbar" /><!-- -Windows*8 --><intelxdk:plugin intelxdk:value="https://github.com/EddyVerbruggen/Flashlight-PhoneGap-Plugin" />

This sample forces a plugin included with the "import plugin" dialog to be excluded from the platforms shown. You can include it only in the Android* platform by using conditional code and one or more appropriate plugins.

How do I display a webpage in my app without leaving my app?

The most effective way to do so is by using inAppBrowser.

Does Cordova* media have callbacks in the emulator?

While Cordova* media objects have proper callbacks when using the debug tab on a device, the emulator doesn't report state changes back to the Media object. This functionality has not been implemented yet. Under emulation, the Media object is implemented by creating an <audio> tag in the program under test. The <audio> tag emits a bunch of events, and these could be captured and turned into status callbacks on the Media object.

Why does the Cordova version number not match the Projects tab's Build Settings CLI version number, the Emulate tab, App Preview and my built app?

This is due to the difficulty in keeping different components in sync and is compounded by the version numbering convention that the Cordova project uses to distinguish build tool versions (the CLI version) from platform framework versions (the Cordova framework version) and plugin versions.

The CLI version you specify in the Projects tab's Build Settings section is the "Cordova CLI" version that the build system uses to build your app. Each version of the Cordova CLI tools come with a set of "pinned" Cordova platform framework versions, which are tied to the target platform.

NOTE: the specific Cordova platform framework versions shown below are subject to change without notice.

Our Cordova CLI 4.1.2 build system is "pinned" to: 

  • cordova-android@3.6.4 (Android Cordova framework version 3.6.4)
  • cordova-ios@3.7.0 (iOS Cordova framework version 3.7.0)
  • cordova-windows@3.7.0 (Cordova Windows framework version 3.7.0)

Our Cordova CLI 5.1.1 build system is "pinned" to:

  • cordova-android@4.1.1 (as of March 23, 2016)
  • cordova-ios@3.8.0
  • cordova-windows@4.0.0

Our Cordova CLI 5.4.1 build system is "pinned" to: 

  • cordova-android@5.0.0
  • cordova-ios@4.0.1
  • cordova-windows@4.3.1

Our CLI 5.4.1 build system really should be called "CLI 5.4.1+" because the platform framework versions it uses are closer to the "pinned" versions in the Cordova CLI 6.0.0 release than those "pinned" in the original CLI 5.4.1 release.

The Cordova platform framework version you get when you build an app does not equal the CLI version number in the Build Settings section of the Projects tab; it equals the Cordova platform framework version that is "pinned" to our build system's CLI version (see the list of pinned versions, above).

Technically, the target-specific Cordova frameworks can be updated [independently] for a given version of CLI tools. In some cases, our build system may use a Cordova platform framework version that is later than the version that was "pinned" to the CLI when it was originally released by the Cordova project (that is, the Cordova framework versions originally specified by the Cordova CLI x.y.z links above).

The reasons you may see Cordova framework version differences between the Emulate tab, App Preview and your built app are:

  • The Emulate tab has one specific Cordova framework version built into it. We try to make sure that version of the Cordova framework closely matches the default Intel XDK version of Cordova CLI.
  • App Preview is released independently of the Intel XDK and, therefore, may use a different version than what you will see reported by the Emulate tab or your built app. Again, we try to release App Preview so it matches the version of the Cordova framework that is considered the default version for the Intel XDK at the time App Preview is released; but since the various tools are not always released in perfect sync, that is not always possible.
  • Your app is built with a "pinned" Cordova platform framework version, which is determined by the Cordova CLI version you specified in the Projects tab's Build Settings section. There are always at least two different CLI versions available in the Intel XDK build system.
  • For those versions of Crosswalk that are built with the Intel XDK CLI 4.1.2 build system, the cordova-android framework version is determined by the Crosswalk project, not by the Intel XDK build system.
  • For those versions of Crosswalk that are built with Intel XDK CLI 5.1.1 and later build systems, the cordova-android framework version equals that specified in the lists above (it equals the "pinned" cordova-android platform version for that CLI version).

Do these Cordova framework version numbers matter? Occasionally, yes, but normally, not that much. There are some issues that come up that are related to the Cordova framework version, but they tend to be rare. The majority of the bugs and compatibility issues you will experience in your app have more to do with the versions and mix of Cordova plugins you choose to use and the HTML5 webview runtime on your test devices. See this blog for more details about what a webview is and why the webview matters to your app: When is an HTML5 Web App a WebView App?.

The "default version" of the CLI that the Intel XDK uses is rarely the most recent version of the Cordova CLI tools distributed by the Cordova project. There is always a lag between Cordova project releases and our ability to incorporate those releases into our build system and the various Intel XDK components. We are not able to provide every release that is made by the Cordova project.

How do I add a third party plugin?

Please follow the instructions on this doc page to add a third-party plugin: Adding Plugins to Your Intel® XDK Cordova* App -- this plugin is not being included as part of your app. You will see it in the build log if it was successfully added to your build.

How do I make an AJAX call that works in my browser work in my app?

Please follow the instructions in this article: Cordova CLI 4.1.2 Domain Whitelisting with Intel XDK for AJAX and Launching External Apps.

I get an "intel is not defined" error, but my app works in Test tab, App Preview and Debug tab. What's wrong?

When your app runs in the Test tab, App Preview or the Debug tab the intel.xdk and core Cordova functions are automatically included for easy debug. That is, the plugins required to implement those APIs on a real device are already included in the corresponding debug modules.

When you build your app you must include the plugins that correspond to the APIs you are using in your build settings. This means you must enable the Cordova and/or XDK plugins that correspond to the APIs you are using. Go to the Projects tab and insure that the plugins you need are selected in your project's plugin settings. See Adding Plugins to Your Intel® XDK Cordova* App for additional details.

How do I target my app for use only on an iPad or only on an iPhone?

There is an undocumented feature in Cordova that should help you (the Cordova project provided this feature but failed to document it for the rest of the world). If you use the appropriate preference in theintelxdk.config.additions.xml file you should get what you need:

<preference name="target-device" value="tablet" />     <!-- Installs on iPad, not on iPhone --><preference name="target-device" value="handset" />    <!-- Installs on iPhone, iPad installs in a zoomed view and doesn't fill the entire screen --><preference name="target-device" value="universal" />  <!-- Installs on iPhone and iPad correctly -->

If you need info regarding the additions.xml file, see the blank template or this doc file: Adding Intel® XDK Cordova Build Options Using the Additions File.

Why does my build fail when I try to use the Cordova* Capture Plugin?

The Cordova* Capture plugin has a dependency on the File Plugin. Please make sure you both plugins selected on the projects tab.

How can I pinch and zoom in my Cordova* app?

For now, using the viewport meta tag is the only option to enable pinch and zoom. However, its behavior is unpredictable in different webviews. Testing a few samples apps has led us to believe that this feature is better on Crosswalk for Android. You can test this by building the Hello Cordova sample app for Android and Crosswalk for Android. Pinch and zoom will work on the latter only though they both have:

<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes, minimum-scale=1, maximum-scale=2">.

Please visit the following pages to get a better understanding of when to build with Crosswalk for Android:

http://blogs.intel.com/evangelists/2014/09/02/html5-web-app-webview-app/

https://software.intel.com/en-us/xdk/docs/why-use-crosswalk-for-android-builds

Another device oriented approach is to enable it by turning on Android accessibility gestures.

How do I make my Android application use the fullscreen so that the status and navigation bars disappear?

The Cordova* fullscreen plugin can be used to do this. For example, in your initialization code, include this function AndroidFullScreen.immersiveMode(null, null);.

You can get this third-party plugin from here https://github.com/mesmotronic/cordova-fullscreen-plugin

How do I add XXHDPI and XXXHDPI icons to my Android or Crosswalk application?

The Cordova CLI 4.1.2 build system will support this feature, but our 4.1.2 build system (and the 2170 version of the Intel XDK) does not handle the XX and XXX sizes directly. Use this workaround until these sizes are supported directly:

  • copy your XX and XXX icons into your source directory (usually named www)
  • add the following lines to your intelxdk.config.additions.xml file
  • see this Cordova doc page for some more details

Assuming your icons and splash screen images are stored in the "pkg" directory inside your source directory (your source directory is usually named www), add lines similar to these into yourintelxdk.config.additions.xml file (the precise name of your png files may be different than what is shown here):

<!-- for adding xxhdpi and xxxhdpi icons on Android --><icon platform="android" src="pkg/xxhdpi.png" density="xxhdpi" /><icon platform="android" src="pkg/xxxhdpi.png" density="xxxhdpi" /><splash platform="android" src="pkg/splash-port-xhdpi.png" density="port-xhdpi"/><splash platform="android" src="pkg/splash-land-xhdpi.png" density="land-xhdpi"/>

The precise names of your PNG files are not important, but the "density" designations are very important and, of course, the respective resolutions of your PNG files must be consistent with Android requirements. Those density parameters specify the respective "res-drawable-*dpi" directories that will be created in your APK for use by the Android system. NOTE: splash screen references have been added for reference, you do not need to use this technique for splash screens.

You can continue to insert the other icons into your app using the Intel XDK Projects tab.

Which plugin is the best to use with my app?

We are not able to track all the plugins out there, so we generally cannot give you a "this is better than that" evaluation of plugins. Check the Cordova plugin registry to see which plugins are most popular and check Stack Overflow to see which are best supported; also, check the individual plugin repos to see how well the plugin is supported and how frequently it is updated. Since the Cordova platform and the mobile platforms continue to evolve, those that are well-supported are likely to be those that have good activity in their repo.

Keep in mind that the XDK builds Cordova apps, so whichever plugins you find being supported and working best with other Cordova (or PhoneGap) apps would likely be your "best" choice.

See Adding Plugins to Your Intel® XDK Cordova* App for instructions on how to include third-party plugins with your app.

What are the rules for my App ID?

The precise App ID naming rules vary as a function of the target platform (eg., Android, iOS, Windows, etc.). Unfortunately, the App ID naming rules are further restricted by the Apache Cordova project and sometimes change with updates to the Cordova project. The Cordova project is the underlying technology that your Intel XDK app is based upon; when you build an Intel XDK app you are building an Apache Cordova app.

CLI 5.1.1 has more restrictive App ID requirements than previous versions of Apache Cordova (the CLI version refers to Apache Cordova CLI release versions). In this case, the Apache Cordova project decided to set limits on acceptable App IDs to equal the minimum set for all platforms. We hope to eliminate this restriction in a future release of the build system, but for now (as of the 2496 release of the Intel XDK), the current requirements for CLI 5.1.1 are:

  • Each section of the App ID must start with a letter
  • Each section can only consist of letters, numbers, and the underscore character
  • Each section cannot be a Java keyword
  • The App ID must consist of at least 2 sections (each section separated by a period ".").

iOS /usr/bin/codesign error: certificate issue for iOS app?

If you are getting an iOS build fail message in your detailed build log that includes a reference to a signing identity error you probably have a bad or inconsistent provisioning file. The "no identity found" message in the build log excerpt, below, means that the provisioning profile does not match the distribution certificate that was uploaded with your application during the build phase.

Signing Identity:     "iPhone Distribution: XXXXXXXXXX LTD (Z2xxxxxx45)"
Provisioning Profile: "MyProvisioningFile"
                      (b5xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxe1)

    /usr/bin/codesign --force --sign 9AxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxA6 --resource-rules=.../MyApp/platforms/ios/build/device/MyApp.app/ResourceRules.plist --entitlements .../MyApp/platforms/ios/build/MyApp.build/Release-iphoneos/MyApp.build/MyApp.app.xcent .../MyApp/platforms/ios/build/device/MyApp.app
9AxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxA6: no identity found
Command /usr/bin/codesign failed with exit code 1

** BUILD FAILED **


The following build commands failed:
    CodeSign build/device/MyApp.app
(1 failure)

The excerpt shown above will appear near the very end of the detailed build log. The unique number patterns in this example have been replaced with "xxxx" strings for security reasons. Your actual build log will contain hexadecimal strings.

iOS Code Sign error: bundle ID does not match app ID?

If you are getting an iOS build fail message in your detailed build log that includes a reference to a "Code Sign error" you may have a bad or inconsistent provisioning file. The "Code Sign" message in the build log excerpt, below, means that the bundle ID you specified in your Apple provisioning profile does not match the app ID you provided to the Intel XDK to upload with your application during the build phase.

Code Sign error: Provisioning profile does not match bundle identifier: The provisioning profile specified in your build settings (MyBuildSettings) has an AppID of my.app.id which does not match your bundle identifier my.bundleidentifier.
CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 8.0'

** BUILD FAILED **

The following build commands failed:
    Check dependencies
(1 failure)
Error code 65 for command: xcodebuild with args: -xcconfig,...

The message above translates into "the bundle ID you entered in the project settings of the XDK does not match the bundle ID (app ID) that you created on Apples developer portal and then used to create a provisioning profile."

What are plugin variables used for? Why do I need to supply plugin variables?

Some plugins require details that are specific to your app or your developer account. For example, to authorize your app as an app that belongs to you, the developer, so services can be properly routed to the service provider. The precise reasons are dependent on the specific plugin and its function.

What happened to the Intel XDK "legacy" build options?

On December 14, 2015 the Intel XDK legacy build options were retired and are no longer available to build apps. The legacy build option is based on three year old technology that predates the current Cordova project. All Intel XDK development efforts for the past two years have been directed at building standard Apache Cordova apps.

Many of the intel.xdk legacy APIs that were supported by the legacy build options have been migrated to standard Apache Cordova plugins and published as open source plugins. The API details for these plugins are available in the README.md files in the respective 01.org GitHub repos. Additional details regarding the new Cordova implementations of the intel.xdk legacy APIs are available in the doc page titled Intel XDK Legacy APIs.

Standard Cordova builds do not require the use of the "intelxdk.js" and "xhr.js" phantom scripts. Only the "cordova.js" phantom script is required to successfully build Cordova apps. If you have been including "intelxdk.js" and "xhr.js" in your Cordova builds they have been quietly ignored. You should remove references to these files from your "index.html" file; leaving them in will do no harm, it simply results in a warning that the respective script file cannot be found at runtime.

The Emulate tab will continue to support some legacy intel.xdk APIs that are NOT supported in the Cordova builds (only those intel.xdk APIs that are supported by the open source plugins are available to a Cordova built app, and only if you have included the respective intel.xdk plugins). This Emulate tab discrepancy will be addressed in a future release of the Intel XDK.

More information can be found in this forum post > https://software.intel.com/en-us/forums/intel-xdk/topic/601436.

Which build files do I submit to the Windows Store and which do I use for testing my app on a device?

There are two things you can do with the build files generated by the Intel XDK Windows build options: side-load your app onto a real device (for testing) or publish your app in the Windows Store (for distribution). Microsoft has changed the files you use for these purposes with each release of a new platform. As of December, 2015, the packages you might see in a build, and their uses, are:

  • appx works best for side-loading, and can also be used to publish your app.
  • appxupload is preferred for publishing your app, it will not work for side-loading.
  • appxbundle will work for both publishing and side-loading, but is not preferred.
  • xap is for legacy Windows Phone; works for both publishing and side-loading.

In essence: XAP (WP7) was superseded by APPXBUNDLE (Win8 and WP8.0), which was superseded by APPX (Win8/WP8.1/UAP), which has been supplemented with APPXUPLOAD. APPX and APPXUPLOAD are the preferred formats. For more information regarding these file formats, see Upload app packages on the Microsoft developer site.

Side-loading a Windows Phone app onto a real device, over USB, requires a Windows 8+ development system (see Side-Loading Windows* Phone Apps for complete instructions). If you do not have a physical Windows development machine you can use a virtual Windows machine or use the Window Store Beta testing and targeted distribution technique to get your app onto real test devices.

Side-loading a Windows tablet app onto a Windows 8 or Windows 10 laptop or tablet is simpler. Extract the contents of the ZIP file that you downloaded from the Intel XDK build system, open the "*_Test" folder inside the extracted folder, and run the PowerShell script (ps1 file) contained within that folder on the test machine (the machine that will run your app). The ps1 script file may need to request a "developer certificate" from Microsoft before it will install your test app onto your Windows test system, so your test machine may require a network connection to successfully side-load your Windows app.

The side-loading process may not over-write an existing side-loaded app with the same ID. To be sure your test app properly side-loads, it is best to uninstall the old version of your app before side-loading a new version on your test system.

How do I implement local storage or SQL in my app?

See this summary of local storage options for Cordova apps written by Josh Morony, A Summary of Local Storage Options for PhoneGap Applications.

How do I prevent my app from auto-completing passwords?

Use the Ionic Keyboard plugin and set the spellcheck attribute to false.

Why does my PHP script not run in my Intel XDK Cordova app?

Your XDK app is not a page on a web server; you cannot use dynamic web server techniques because there is no web server associated with your app to which you can pass off PHP scripts and similar actions. When you build an Intel XDK app you are building a standalone Cordova client web app, not a dynamic server web app. You need to create a RESTful API on your server that you can then call from your client (the Intel XDK Cordova app) and pass and return data between the client and server through that RESTful API (usually in the form of a JSON payload).

Please see this StackOverflow post and this article by Ray Camden, a longtime developer of the Cordova development environment and Cordova apps, for some useful background.

Following is a lightly edited recommendation from an Intel XDK user:

I came from php+mysql web development. My first attempt at an Intel XDK Cordova app was to create a set of php files to query the database and give me the JSON. It was a simple job, but totally insecure.

Then I found dreamfactory.com, an open source software that automatically creates the REST API functions from several databases, SQL and NoSQL. I use it a lot. You can start with a free account to develop and test and then install it in your server. Another possibility is phprestsql.sourceforge.net, this is a library that does what I tried to develop by myself. I did not try it, but perhaps it will help you.

And finally, I'm using PouchDB and CouchDB"A database for the web." It is not SQL, but is very useful and easy if you need to develop a mobile app with only a few tables. It will also work with a lot of tables, but for a simple database it is an easy place to start.

I strongly recommend that you start to learn these new ways to interact with databases, you will need to invest some time but is the way to go. Do not try to use MySQL and PHP the old fashioned way, you can get it work but at some point you may get stuck.

Why doesn’t my Cocos2D game work on iOS?

This is an issue with Cocos2D and is not a reflection of our build system. As an interim solution, we have modified the CCBoot.js file for compatibility with iOS and App Preview. You can view an example of this modification in this CCBoot.js file from the Cocos2d-js 3.1 Scene GUI sample. The update has been applied to all cocos2D templates and samples that ship with Intel XDK. 

The fix involves two lines changes (for generic cocos2D fix) and one additional line (for it to work on App Preview on iOS devices):

Generic cocos2D fix -

1. Inside the loadTxt function, xhr.onload should be defined as

xhr.onload = function () {
    if(xhr.readyState == 4)
        xhr.responseText != "" ? cb(null, xhr.responseText) : cb(errInfo);
    };

instead of

xhr.onload = function () {
    if(xhr.readyState == 4)
        xhr.status == 200 ? cb(null, xhr.responseText) : cb(errInfo);
    };

2. The condition inside _loadTxtSync function should be changed to 

if (!xhr.readyState == 4 || (xhr.status != 200 || xhr.responseText != "")) {

instead of 

if (!xhr.readyState == 4 || xhr.status != 200) {

 

App Preview fix -

Add this line inside of loadTxtSync after _xhr.open:

xhr.setRequestHeader("iap_isSyncXHR", "true");

How do I change the alias of my Intel XDK Android keystore certificate?

If you have used a non-ASCII character in your Android app keystore (certificate), especially when you converted your legacy keystore to the new format used by version 3088 of the Intel XDK, you may be having trouble with failing builds or builds that do not work. You cannot change the alias within the Intel XDK, but you can download the existing keystore with the problem alias, change the alias on that keystore, and upload a new copy of the same keystore with a new alias.

Use the following procedure:

  • Download the converted legacy keystore from the Intel XDK (the one with the bad alias).
  • Locate the keytool app on your system (this assumes that you have a Java runtime installed on your system). On Windows, this is likely to be located at %ProgramFiles%\Java\jre8\bin (you might have to adjust the value of jre8 in the path to match the version of Java installed on your system). On Mac and Linux systems it is probably located in your path (in /usr/bin).
  • Change the alias of the keystore using this command:
    keytool -changealias -alias "existing-alias" -destalias "new-alias" -keypass keypass -keystore /path/to/keystore -storepass storepass

    See the keytool -changealias -help command for additional details.
  • Import this new keystore into the Intel XDK using the "Import Existing Keystore" option in the "Developer Certificates" section of the "person icon" located in the upper right corner of the Intel XDK.

 

Back to FAQs Main

Intel® IPP Functions Optimized for Intel® Advanced Vector Extensions 2 (Intel® AVX2)

$
0
0

Here is a list of Intel® Integrated Performance Primitives (Intel® IPP) functions that are optimized for Intel® Advanced Vector Extensions 2 (AVX2) on Haswell and Intel® microarchitecture code name Skylake. These functions include Convert, CrossCorr, Max/Min, PolarToCart, Sort, and some other arithmetic functions. The functions listed here are all hand-tuned for Intel® architecture. Intel IPP functions that are not listed here also get optimization benefit from Intel® Compiler. 

Optimization Notice

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and 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. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804

ippiConvert_16s16u_C1Rs
ippiConvert_16s32f_C1R
ippiConvert_16s32s_C1R
ippiConvert_16s8u_C1R
ippiConvert_16u32f_C1R
ippiConvert_16u32s_C1R
ippiConvert_16u8u_C1R
ippiConvert_16s8s_C1RSfs
ippiConvert_16u16s_C1RSfs
ippiConvert_16u8s_C1RSfs
ippiConvert_32f16s_C1RSfs
ippiConvert_32f16u_C1RSfs
ippiConvert_32f32s_C1RSfs
ippiConvert_32f8s_C1RSfs
ippiConvert_32f8u_C1RSfs
ippiCopy_16u_C1MR
ippiCopy_16u_C3MR
ippiCopy_32s_C1MR
ippiCopy_32s_C3MR
ippiCopy_32s_C4MR
ippiCopy_8u_C1MR
ippiCopy_8u_C1R
ippiCopy_8u_C3MR
ippiCopy_8u_C3P3R
ippiCopy_8u_C4P4R
ippiCopyConstBorder_16s_C3R
ippiCopyConstBorder_16s_C4R
ippiCopyConstBorder_16u_C1R
ippiCopyConstBorder_16u_C3R
ippiCopyConstBorder_16u_C4R
ippiCopyConstBorder_32f_C3R
ippiCopyConstBorder_32f_C4R
ippiCopyConstBorder_32s_C3R
ippiCopyConstBorder_32s_C4R
ippiCopyConstBorder_8u_C3R
ippiCopyConstBorder_8u_C4R
ippiCopyReplicateBorder_16s_C1IR
ippiCopyReplicateBorder_16s_C1R
ippiCopyReplicateBorder_16s_C3IR
ippiCopyReplicateBorder_16s_C3R
ippiCopyReplicateBorder_16s_C4IR
ippiCopyReplicateBorder_16s_C4R
ippiCopyReplicateBorder_16u_C1IR
ippiCopyReplicateBorder_16u_C1R
ippiCopyReplicateBorder_16u_C3IR
ippiCopyReplicateBorder_16u_C3R
ippiCopyReplicateBorder_16u_C4IR
ippiCopyReplicateBorder_16u_C4R
ippiCopyReplicateBorder_32f_C1IR
ippiCopyReplicateBorder_32f_C1R
ippiCopyReplicateBorder_32f_C3IR
ippiCopyReplicateBorder_32f_C3R
ippiCopyReplicateBorder_32f_C4IR
ippiCopyReplicateBorder_32f_C4R
ippiCopyReplicateBorder_32s_C1IR
ippiCopyReplicateBorder_32s_C1R
ippiCopyReplicateBorder_32s_C3IR
ippiCopyReplicateBorder_32s_C3R
ippiCopyReplicateBorder_32s_C4IR
ippiCopyReplicateBorder_32s_C4R
ippiCopyReplicateBorder_8u_C1IR
ippiCopyReplicateBorder_8u_C1R
ippiCopyReplicateBorder_8u_C3IR
ippiCopyReplicateBorder_8u_C3R
ippiCopyReplicateBorder_8u_C4IR
ippiCopyReplicateBorder_8u_C4R
ippiCopyMirrorBorder_16s_C1IR
ippiCopyMirrorBorder_16s_C1R
ippiCopyMirrorBorder_16s_C3IR
ippiCopyMirrorBorder_16s_C3R
ippiCopyMirrorBorder_16s_C4IR
ippiCopyMirrorBorder_16s_C4R
ippiCopyMirrorBorder_16u_C1IR
ippiCopyMirrorBorder_16u_C1R
ippiCopyMirrorBorder_16u_C3IR
ippiCopyMirrorBorder_16u_C3R
ippiCopyMirrorBorder_16u_C4IR
ippiCopyMirrorBorder_16u_C4R
ippiCopyMirrorBorder_32f_C1IR
ippiCopyMirrorBorder_32f_C1R
ippiCopyMirrorBorder_32f_C3IR
ippiCopyMirrorBorder_32f_C3R
ippiCopyMirrorBorder_32f_C4IR
ippiCopyMirrorBorder_32f_C4R
ippiCopyMirrorBorder_32s_C1IR
ippiCopyMirrorBorder_32s_C1R
ippiCopyMirrorBorder_32s_C3IR
ippiCopyMirrorBorder_32s_C3R
ippiCopyMirrorBorder_32s_C4IR
ippiCopyMirrorBorder_32s_C4R
ippiCopyMirrorBorder_8u_C1IR
ippiCopyMirrorBorder_8u_C1R
ippiCopyMirrorBorder_8u_C3IR
ippiCopyMirrorBorder_8u_C3R
ippiCopyMirrorBorder_8u_C4IR
ippiCopyMirrorBorder_8u_C4R
ippiCrossCorrNorm_32f_C1R
ippiCrossCorrNorm_16u32f_C1R
ippiCrossCorrNorm_8u32f_C1R
ippiCrossCorrNorm_8u_C1RSfs
ippiDilateBorder_32f_C1R
ippiDilateBorder_32f_C3R
ippiDilateBorder_32f_C4R
ippiDilateBorder_8u_C1R
ippiDilateBorder_8u_C3R
ippiDilateBorder_8u_C4R
ippiDistanceTransform_3x3_8u_C1R
ippiDistanceTransform_3x3_8u32f_C1R
ippiErodeBorder_32f_C1R
ippiErodeBorder_32f_C3R
ippiErodeBorder_32f_C4R
ippiErodeBorder_8u_C1R
ippiErodeBorder_8u_C3R
ippiErodeBorder_8u_C4R
ippiFilterBoxBorder_16s_C1R
ippiFilterBoxBorder_16s_C3R
ippiFilterBoxBorder_16s_C4R
ippiFilterBoxBorder_16u_C1R
ippiFilterBoxBorder_16u_C3R
ippiFilterBoxBorder_16u_C4R
ippiFilterBoxBorder_32f_C1R
ippiFilterBoxBorder_32f_C3R
ippiFilterBoxBorder_32f_C4R
ippiFilterBoxBorder_8u_C1R
ippiFilterBoxBorder_8u_C3R
ippiFilterBoxBorder_8u_C4R
ippiFilterLaplacianBorder_32f_C1R
ippiFilterLaplacianBorder_8u16s_C1R
ippiFilterMaxBorder_32f_C1R
ippiFilterMaxBorder_32f_C3R
ippiFilterMaxBorder_32f_C4R
ippiFilterMaxBorder_8u_C1R
ippiFilterMaxBorder_8u_C3R
ippiFilterMaxBorder_8u_C4R
ippiFilterMedianBorder_16s_C1R
ippiFilterMedianBorder_16u_C1R
ippiFilterMedianBorder_32f_C1R
ippiFilterMedianBorder_8u_C1R
ippiFilterMinBorder_32f_C1R
ippiFilterMinBorder_32f_C3R
ippiFilterMinBorder_32f_C4R
ippiFilterMinBorder_8u_C1R
ippiFilterMinBorder_8u_C3R
ippiFilterMinBorder_8u_C4R
ippiFilterScharrHorizMaskBorder_16s_C1R
ippiFilterScharrHorizMaskBorder_32f_C1R
ippiFilterScharrHorizMaskBorder_8u16s_C1R
ippiFilterScharrVertMaskBorder_16s_C1R
ippiFilterScharrVertMaskBorder_8u16s_C1R
ippiGetCentralMoment_64f
ippiGetNormalizedCentralMoment_64f
ippiGetSpatialMoment_64f
ippiHarrisCorner_32f_C1R
ippiHarrisCorner_8u32f_C1R
ippiHistogramEven_8u_C1R
ippiHoughLine_Region_8u32f_C1R
ippiLUTPalette_8u_C3R
ippiLUTPalette_8u_C4R
ippiMax_16s_C1R
ippiMax_16u_C1R
ippiMax_32f_C1R
ippiMax_8u_C1R
ippiMin_16s_C1R
ippiMin_16u_C1R
ippiMin_32f_C1R
ippiMin_8u_C1R
ippiMinEigenVal_32f_C1R
ippiMinEigenVal_8u32f_C1R
ippiMirror_16s_C1IR
ippiMirror_16s_C1R
ippiMirror_16s_C3IR
ippiMirror_16s_C3R
ippiMirror_16s_C4IR
ippiMirror_16s_C4R
ippiMirror_16u_C1IR
ippiMirror_16u_C1R
ippiMirror_16u_C3IR
ippiMirror_16u_C3R
ippiMirror_16u_C4IR
ippiMirror_16u_C4R
ippiMirror_32f_C1IR
ippiMirror_32f_C1R
ippiMirror_32f_C3IR
ippiMirror_32f_C3R
ippiMirror_32f_C4IR
ippiMirror_32f_C4R
ippiMirror_32s_C1IR
ippiMirror_32s_C1R
ippiMirror_32s_C3IR
ippiMirror_32s_C3R
ippiMirror_32s_C4IR
ippiMirror_32s_C4R
ippiMirror_8u_C1IR
ippiMirror_8u_C1R
ippiMirror_8u_C3IR
ippiMirror_8u_C3R
ippiMirror_8u_C4IR
ippiMirror_8u_C4R
ippiMoments64f_16u_C1R
ippiMoments64f_32f_C1R
ippiMoments64f_8u_C1R
ippiMul_16s_C1RSfs
ippiMul_16u_C1RSfs
ippiMul_32f_C1R
ippiMul_8u_C1RSfs
ippiMulC_16s_C1IRSfs
ippiMulC_32f_C1R
ippiSet_16s_C1MR
ippiSet_16s_C3MR
ippiSet_16s_C4MR
ippiSet_16u_C1MR
ippiSet_16u_C3MR
ippiSet_16u_C4MR
ippiSet_32f_C1MR
ippiSet_32f_C3MR
ippiSet_32f_C4MR
ippiSet_32s_C1MR
ippiSet_32s_C3MR
ippiSet_32s_C4MR
ippiSet_8u_C1MR
ippiSet_8u_C3MR
ippiSet_8u_C4MR
ippiSqr_32f_C1R
ippiSqrDistanceNorm_32f_C1R
ippiSqrDistanceNorm_8u32f_C1R
ippiSwapChannels_16u_C4R
ippiSwapChannels_32f_C4R
ippiSwapChannels_8u_C4R
ippiThreshold_GT_16s_C1R
ippiThreshold_GT_32f_C1R
ippiThreshold_GT_8u_C1R
ippiThreshold_GTVal_16s_C1R
ippiThreshold_GTVal_32f_C1R
ippiThreshold_GTVal_8u_C1R
ippiThreshold_LTVal_16s_C1R
ippiThreshold_LTVal_32f_C1R
ippiThreshold_LTVal_8u_C1R
ippiTranspose_16s_C1IR
ippiTranspose_16s_C1R
ippiTranspose_16s_C3IR
ippiTranspose_16s_C3R
ippiTranspose_16s_C4IR
ippiTranspose_16s_C4R
ippiTranspose_16u_C1IR
ippiTranspose_16u_C1R
ippiTranspose_16u_C3IR
ippiTranspose_16u_C3R
ippiTranspose_16u_C4IR
ippiTranspose_16u_C4R
ippiTranspose_32f_C1IR
ippiTranspose_32f_C1R
ippiTranspose_32f_C3IR
ippiTranspose_32f_C3R
ippiTranspose_32f_C4IR
ippiTranspose_32f_C4R
ippiTranspose_32s_C1IR
ippiTranspose_32s_C1R
ippiTranspose_32s_C3IR
ippiTranspose_32s_C3R
ippiTranspose_32s_C4IR
ippiTranspose_32s_C4R
ippiTranspose_8u_C1IR
ippiTranspose_8u_C1R
ippiTranspose_8u_C3IR
ippiTranspose_8u_C3R
ippiTranspose_8u_C4IR
ippiTranspose_8u_C4R
ippsDotProd_32f64f
ippsDotProd_64f
ippsFlip_16u_I
ippsFlip_32f_I
ippsFlip_64f_I
ippsFlip_8u_I
ippsMagnitude_32f
ippsMagnitude_64f
ippsMaxEvery_16u
ippsMaxEvery_32f
ippsMaxEvery_64f
ippsMaxEvery_8u
ippsMinEvery_16u
ippsMinEvery_32f
ippsMinEvery_64f
ippsMinEvery_8u
ippsPolarToCart_32f
ippsPolarToCart_64f
ippsSortAscend_16s_I
ippsSortAscend_16u_I
ippsSortAscend_32f_I
ippsSortAscend_32s_I
ippsSortAscend_64f_I
ippsSortAscend_8u_I
ippsSortDescend_16s_I
ippsSortDescend_16u_I
ippsSortDescend_32f_I
ippsSortDescend_32s_I
ippsSortDescend_64f_I
ippsSortDescend_8u_I
ippsSortIndexAscend_16s_I
ippsSortIndexAscend_16u_I
ippsSortIndexAscend_32f_I
ippsSortIndexAscend_32s_I
ippsSortIndexAscend_64f_I
ippsSortIndexAscend_8u_I
ippsSortIndexDescend_16s_I
ippsSortIndexDescend_16u_I
ippsSortIndexDescend_32f_I
ippsSortIndexDescend_32s_I
ippsSortIndexDescend_64f_I
ippsSortIndexDescend_8u_I
 
ippiAdd_8u_C1RSfs
ippiAdd_16u_C1RSfs
ippiAdd_16s_C1RSfs
ippiAdd_32f_C1R
ippiSub_8u_C1RSfs
ippiSub_16u_C1RSfs
ippiSub_16s_C1RSfs
ippiSub_32f_C1R
ippiMaxEvery_8u_C1R
ippiMaxEvery_16u_C1R
ippiMaxEvery_32f_C1R
ippiMinEvery_8u_C1R
ippiMinEvery_16u_C1R
ippiMinEvery_32f_C1R
ippiAnd_8u_C1R
ippiOr_8u_C1R
ippiXor_8u_C1R
ippiNot_8u_C1R
ippiCompare_8u_C1R
ippiCompare_16u_C1R
ippiCompare_16s_C1R
ippiCompare_32f_C1R
ippiSum_8u_C1R 
ippiSum_8u_C3R 
ippiSum_8u_C4R 
ippiSum_16u_C1R
ippiSum_16u_C3R
ippiSum_16u_C4R
ippiSum_16s_C1R
ippiSum_16s_C3R
ippiSum_16s_C4R
ippiSum_32f_C1R
ippiSum_32f_C3R
ippiSum_32f_C4R
ippiMean_8u_C1R 
ippiMean_8u_C3R 
ippiMean_8u_C4R 
ippiMean_16u_C1R
ippiMean_16u_C3R
ippiMean_16u_C4R
ippiMean_16s_C1R
ippiMean_16s_C3R
ippiMean_16s_C4R
ippiMean_32f_C1R
ippiMean_32f_C3R
ippiMean_32f_C4R
ippiNorm_Inf_8u_C1R
ippiNorm_Inf_8u_C3R 
ippiNorm_Inf_8u_C4R 
ippiNorm_Inf_16u_C1R
ippiNorm_Inf_16u_C3R
ippiNorm_Inf_16u_C4R
ippiNorm_Inf_16s_C1R
ippiNorm_Inf_16s_C3R
ippiNorm_Inf_16s_C4R
ippiNorm_Inf_32f_C1R
ippiNorm_Inf_32f_C3R
ippiNorm_Inf_32f_C4R
ippiNorm_L1_8u_C1R
ippiNorm_L1_8u_C3R 
ippiNorm_L1_8u_C4R 
ippiNorm_L1_16u_C1R
ippiNorm_L1_16u_C3R
ippiNorm_L1_16u_C4R
ippiNorm_L1_16s_C1R
ippiNorm_L1_16s_C3R
ippiNorm_L1_16s_C4R
ippiNorm_L1_32f_C1R
ippiNorm_L1_32f_C3R
ippiNorm_L1_32f_C4R
ippiNorm_L2_8u_C1R
ippiNorm_L2_8u_C3R 
ippiNorm_L2_8u_C4R 
ippiNorm_L2_16u_C1R
ippiNorm_L2_16u_C3R
ippiNorm_L2_16u_C4R
ippiNorm_L2_16s_C1R
ippiNorm_L2_16s_C3R
ippiNorm_L2_16s_C4R
ippiNorm_L2_32f_C1R
ippiNorm_L2_32f_C3R
ippiNorm_L2_32f_C4R
ippiNormRel_Inf_8u_C1R
ippiNormRel_Inf_16u_C1R
ippiNormRel_Inf_16s_C1R
ippiNormRel_Inf_32f_C1R
ippiNormRel_L1_8u_C1R
ippiNormRel_L1_16u_C1R
ippiNormRel_L1_16s_C1R
ippiNormRel_L1_32f_C1R
ippiNormRel_L2_8u_C1R
ippiNormRel_L2_16u_C1R
ippiNormRel_L2_16s_C1R
ippiNormRel_L2_32f_C1R
ippiNormDiff_Inf_8u_C1R
ippiNormDiff_Inf_8u_C3R 
ippiNormDiff_Inf_8u_C4R 
ippiNormDiff_Inf_16u_C1R
ippiNormDiff_Inf_16u_C3R
ippiNormDiff_Inf_16u_C4R
ippiNormDiff_Inf_16s_C1R
ippiNormDiff_Inf_16s_C3R
ippiNormDiff_Inf_16s_C4R
ippiNormDiff_Inf_32f_C1R
ippiNormDiff_Inf_32f_C3R
ippiNormDiff_Inf_32f_C4R
ippiNormDiff_L1_8u_C1R
ippiNormDiff_L1_8u_C3R 
ippiNormDiff_L1_8u_C4R 
ippiNormDiff_L1_16u_C1R
ippiNormDiff_L1_16u_C3R
ippiNormDiff_L1_16u_C4R
ippiNormDiff_L1_16s_C1R
ippiNormDiff_L1_16s_C3R
ippiNormDiff_L1_16s_C4R
ippiNormDiff_L1_32f_C1R
ippiNormDiff_L1_32f_C3R
ippiNormDiff_L1_32f_C4R
ippiNormDiff_L2_8u_C1R
ippiNormDiff_L2_8u_C3R 
ippiNormDiff_L2_8u_C4R 
ippiNormDiff_L2_16u_C1R
ippiNormDiff_L2_16u_C3R
ippiNormDiff_L2_16u_C4R
ippiNormDiff_L2_16s_C1R
ippiNormDiff_L2_16s_C3R
ippiNormDiff_L2_16s_C4R
ippiNormDiff_L2_32f_C1R
ippiNormDiff_L2_32f_C3R
ippiNormDiff_L2_32f_C4R
ippiSwapChannels_8u_C3C4R
ippiSwapChannels_16u_C3C4R
ippiSwapChannels_32f_C3C4R
ippiSwapChannels_8u_C4C3R
ippiSwapChannels_16u_C4C3R
ippiSwapChannels_32f_C4C3R
ippiSwapChannels_8u_C3R
ippiSwapChannels_16u_C3R
ippiSwapChannels_32f_C3R
ippiSwapChannels_8u_AC4R
ippiSwapChannels_16u_AC4R
ippiSwapChannels_32f_AC4R
ippiCopy_8u_AC4C3R
ippiCopy_16u_AC4C3R
ippiCopy_32f_AC4C3R
ippiCopy_8u_P3C3R
ippiCopy_16u_P3C3R
ippiCopy_32f_P3C3R
ippiMulC_32f_C1IR
ippiSet_8u_C1R
ippiSet_16u_C1R
ippiSet_32f_C1R
ippiSet_8u_C3R
ippiSet_16u_C3R
ippiSet_32f_C3R
ippiSet_8u_C4R
ippiSet_16u_C4R
ippiWarpAffineBack_8u_C1R 
ippiWarpAffineBack_8u_C3R 
ippiWarpAffineBack_8u_C4R 
ippiWarpAffineBack_16u_C1R
ippiWarpAffineBack_16u_C3R
ippiWarpAffineBack_16u_C4R
ippiWarpAffineBack_32f_C1R
ippiWarpAffineBack_32f_C3R
ippiWarpAffineBack_32f_C4R
ippiWarpPerspectiveBack_8u_C1R 
ippiWarpPerspectiveBack_8u_C3R 
ippiWarpPerspectiveBack_8u_C4R 
ippiWarpPerspectiveBack_16u_C1R
ippiWarpPerspectiveBack_16u_C3R
ippiWarpPerspectiveBack_16u_C4R
ippiWarpPerspectiveBack_32f_C1R
ippiWarpPerspectiveBack_32f_C3R
ippiWarpPerspectiveBack_32f_C4R
ippiCopySubpixIntersect_8u_C1R
ippiCopySubpixIntersect_8u32f_C1R
ippiCopySubpixIntersect_32f_C1R
ippiSqrIntegral_8u32f64f_C1R
ippiIntegral_8u32f_C1R
ippiSqrIntegral_8u32s64f_C1R
ippiIntegral_8u32s_C1R
ippiHaarClassifierFree_32f
ippiHaarClassifierInitAlloc_32f
ippiHaarClassifierFree_32f
ippiRectStdDev_32f_C1R
ippiApplyHaarClassifier_32f_C1R
ippiAbsDiff_8u_C1R
ippiAbsDiff_16u_C1R
ippiAbsDiff_32f_C1R
ippiMean_8u_C1MR 
ippiMean_16u_C1MR
ippiMean_32f_C1MR
ippiMean_8u_C3CMR 
ippiMean_16u_C3CMR
ippiMean_32f_C3CMR
ippiMean_StdDev_8u_C1MR 
ippiMean_StdDev_16u_C1MR
ippiMean_StdDev_32f_C1MR
ippiMean_StdDev_8u_C3CMR 
ippiMean_StdDev_16u_C3CMR
ippiMean_StdDev_32f_C3CMR
ippiMean_StdDev_8u_C1R 
ippiMean_StdDev_16u_C1R
ippiMean_StdDev_32f_C1R
ippiMean_StdDev_8u_C3CR 
ippiMean_StdDev_16u_C3CR
ippiMean_StdDev_32f_C3CR
ippiMinMaxIndx_8u_C1MR 
ippiMinMaxIndx_16u_C1MR
ippiMinMaxIndx_32f_C1MR
ippiMinMaxIndx_8u_C1R 
ippiMinMaxIndx_16u_C1R
ippiMinMaxIndx_32f_C1R
ippiNorm_Inf_8u_C1MR
ippiNorm_Inf_8s_C1MR 
ippiNorm_Inf_16u_C1MR
ippiNorm_Inf_32f_C1MR
ippiNorm_L1_8u_C1MR
ippiNorm_L1_8s_C1MR 
ippiNorm_L1_16u_C1MR
ippiNorm_L1_32f_C1MR
ippiNorm_L2_8u_C1MR
ippiNorm_L2_8s_C1MR 
ippiNorm_L2_16u_C1MR
ippiNorm_L2_32f_C1MR
ippiNorm_Inf_8u_C3CMR
ippiNorm_Inf_8s_C3CMR 
ippiNorm_Inf_16u_C3CMR
ippiNorm_Inf_32f_C3CMR
ippiNorm_L1_8u_C3CMR
ippiNorm_L1_8s_C3CMR 
ippiNorm_L1_16u_C3CMR
ippiNorm_L1_32f_C3CMR
ippiNorm_L2_8u_C3CMR
ippiNorm_L2_8s_C3CMR 
ippiNorm_L2_16u_C3CMR
ippiNorm_L2_32f_C3CMR
ippiNormRel_Inf_8u_C1MR
ippiNormRel_Inf_8s_C1MR 
ippiNormRel_Inf_16u_C1MR
ippiNormRel_Inf_32f_C1MR
ippiNormRel_L1_8u_C1MR
ippiNormRel_L1_8s_C1MR 
ippiNormRel_L1_16u_C1MR
ippiNormRel_L1_32f_C1MR
ippiNormRel_L2_8u_C1MR
ippiNormRel_L2_8s_C1MR 
ippiNormRel_L2_16u_C1MR
ippiNormRel_L2_32f_C1MR
ippiNormDiff_Inf_8u_C1MR
ippiNormDiff_Inf_8s_C1MR 
ippiNormDiff_Inf_16u_C1MR
ippiNormDiff_Inf_32f_C1MR
ippiNormDiff_L1_8u_C1MR
ippiNormDiff_L1_8s_C1MR 
ippiNormDiff_L1_16u_C1MR
ippiNormDiff_L1_32f_C1MR
ippiNormDiff_L2_8u_C1MR
ippiNormDiff_L2_8s_C1MR 
ippiNormDiff_L2_16u_C1MR
ippiNormDiff_L2_32f_C1MR
ippiNormDiff_Inf_8u_C3CMR
ippiNormDiff_Inf_8s_C3CMR 
ippiNormDiff_Inf_16u_C3CMR
ippiNormDiff_Inf_32f_C3CMR
ippiNormDiff_L1_8u_C3CMR
ippiNormDiff_L1_8s_C3CMR 
ippiNormDiff_L1_16u_C3CMR
ippiNormDiff_L1_32f_C3CMR
ippiNormDiff_L2_8u_C3CMR 
ippiNormDiff_L2_8s_C3CMR 
ippiNormDiff_L2_16u_C3CMR
ippiNormDiff_L2_32f_C3CMR
ippiFilterRowBorderPipelineGetBufferSize_32f_C1R
ippiFilterRowBorderPipelineGetBufferSize_32f_C3R
ippiFilterRowBorderPipeline_32f_C1R
ippiFilterRowBorderPipeline_32f_C3R
ippiDistanceTransform_5x5_8u32f_C1R
ippiTrueDistanceTransform_8u32f_C1R
ippiTrueDistanceTransformGetBufferSize_8u32f_C1R
ippiFilterScharrVertGetBufferSize_32f_C1R
 ippiFilterScharrVertMaskBorderGetBufferSize
ippiFilterScharrVertBorder_32f_C1R
 ippiFilterScharrVertMaskBorder_32f_C1R
ippiFilterScharrHorizGetBufferSize_32f_C1R
 ippiFilterScharrHorizMaskBorderGetBufferSize
ippiFilterScharrHorizBorder_32f_C1R
ippiFilterSobelNegVertGetBufferSize_8u16s_C1R
ippiFilterSobelNegVertBorder_8u16s_C1R
ippiFilterSobelHorizBorder_8u16s_C1R
ippiFilterSobelVertSecondGetBufferSize_8u16s_C1R
ippiFilterSobelVertSecondBorder_8u16s_C1R
ippiFilterSobelHorizSecondGetBufferSize_8u16s_C1R
ippiFilterSobelHorizSecondBorder_8u16s_C1R
ippiFilterSobelNegVertGetBufferSize_32f_C1R
ippiFilterSobelNegVertBorder_32f_C1R
ippiFilterSobelHorizGetBufferSize_32f_C1R
ippiFilterSobelHorizBorder_32f_C1R
ippiFilterSobelVertSecondGetBufferSize_32f_C1R
ippiFilterSobelVertSecondBorder_32f_C1R
ippiFilterSobelHorizSecondGetBufferSize_32f_C1R
ippiFilterSobelHorizSecondBorder_32f_C1R
ippiColorToGray_8u_C3C1R
ippiColorToGray_16u_C3C1R
ippiColorToGray_32f_C3C1R
ippiColorToGray_8u_AC4C1R
ippiColorToGray_16u_AC4C1R
ippiColorToGray_32f_AC4C1R
ippiRGBToGray_8u_C3C1R
ippiRGBToGray_16u_C3C1R
ippiRGBToGray_32f_C3C1R
ippiRGBToGray_8u_AC4C1R
ippiRGBToGray_16u_AC4C1R
ippiRGBToGray_32f_AC4C1R
ippiRGBToXYZ_8u_C3R
ippiRGBToXYZ_16u_C3R
ippiRGBToXYZ_32f_C3R
ippiXYZToRGB_8u_C3R
ippiXYZToRGB_16u_C3R
ippiXYZToRGB_32f_C3R
ippiRGBToHSV_8u_C3R
ippiRGBToHSV_16u_C3R
ippiHSVToRGB_8u_C3R
ippiHSVToRGB_16u_C3R
ippiRGBToHLS_8u_C3R
ippiRGBToHLS_16u_C3R
ippiRGBToHLS_32f_C3R
ippiHLSToRGB_8u_C3R
ippiHLSToRGB_16u_C3R
ippiHLSToRGB_32f_C3R
 ippiDotProd_8u64f_C1R
 ippiDotProd_16u64f_C1R
 ippiDotProd_16s64f_C1R
 ippiDotProd_32u64f_C1R
 ippiDotProd_32s64f_C1R
 ippiDotProd_32f64f_C1R
 ippiDotProd_8u64f_C3R
 ippiDotProd_16u64f_C3R
 ippiDotProd_16s64f_C3R
 ippiDotProd_32u64f_C3R
 ippiDotProd_32s64f_C3R
 ippiDotProd_32f64f_C3R
 ippiDotProd_8u64f_C4R
 ippiDotProd_16u64f_C4R
 ippiDotProd_16s64f_C4R
 ippiDotProd_32u64f_C4R
 ippiDotProd_32s64f_C4R
 ippiDotProd_32f64f_C4R

API without Secrets: Introduction to Vulkan* Part 1

$
0
0

Download [PDF 736 KB]

Go to: API without Secrets: Introduction to Vulkan* Part 0: Preface

Table of Contents

Tutorial 1: Vulkan* – The Beginning

We start with a simple application that unfortunately doesn’t display anything. I won’t present the full source code (with windowing, rendering loop, and so on) here in the text as the tutorial would be too long. The entire sample project with full source code is available in a provided example that can be found at https://github.com/gametechdev/IntroductionToVulkan. Here I show only the parts of the code that are relevant to Vulkan itself. There are several ways to use the Vulkan API in our application:

  1. We can dynamically load the driver’s library that provides Vulkan API implementation and acquire function pointers by ourselves from it.
  2. We can use the Vulkan SDK and link with the provided Vulkan Runtime (Vulkan Loader) static library.
  3. We can use the Vulkan SDK, dynamically load Vulkan Loader library at runtime, and load function pointers from it.

The first approach is not recommended. Hardware vendors can modify their drivers in any way, and it may affect compatibility with a given application. It may even break the application and requiredevelopers writing a Vulkan-enabled application to rewrite some parts of the code. That’s why it’s better to use some level of abstraction.

The recommended solution is to use the Vulkan Loader from the Vulkan SDK. It provides more configuration abilities and more flexibility without the need to modify Vulkan application source code. One example of the flexibility is Layers. The Vulkan API requires developers to create applications that strictly follow API usage rules. In case of any errors, the driver provides us with little feedback, only some severe and important errors are reported (for example, out of memory). This approach is used so the API itself can be as small (thin) and as fast as possible. But if we want to obtain more information about what we are doing wrong we have to enable debug/validation layers. There are different layers for different purposes such as memory usage, proper parameter passing, object life-time checking, and so on. These layers all slow down the application’s performance but provide us with much more information.

We also need to choose whether we want to statically link with a Vulkan Loader or whether we will load it dynamically and acquire function pointers by ourselves at runtime. This choice is just a matter of personal preference. This paper focuses on the third way of using Vulkan: dynamically loading function pointers from the Vulkan Runtime library. This approach is similar to what we had to do when we wanted to use OpenGL* on a Windows* system in which only some basic functions were provided by the default implementation. The remaining functions had to be loaded dynamically using wglGetProcAddress() or standard windows GetProcAddress() functions. This is what wrangler libraries such as GLEW or GL3W were created for.

Loading Vulkan Runtime Library and Acquiring Pointer to an Exported Function

In this tutorial we go through the process of acquiring Vulkan functions pointers by ourselves. We load them from the Vulkan Runtime library (Vulkan Loader) which should be installed along with the graphics driver that supports Vulkan. The dynamic library for Vulkan (Vulkan Loader) is named vulkan-1.dll on Windows* and libvulkan.so on Linux*.

From now on, I refer to the first tutorial’s source code, focusing on the Tutorial01.cpp file. So in the initialization code of our application we have to load the Vulkan library with something like this:

#if defined(VK_USE_PLATFORM_WIN32_KHR)
VulkanLibrary = LoadLibrary( "vulkan-1.dll" );

#elif defined(VK_USE_PLATFORM_XCB_KHR) || defined(VK_USE_PLATFORM_XLIB_KHR)
VulkanLibrary = dlopen( "libvulkan.so", RTLD_NOW );

#endif

if( VulkanLibrary == nullptr ) {
  printf( "Could not load Vulkan library!\n" );
  return false;
}

return true;

1.Tutorial01.cpp, function LoadVulkanLibrary()

VulkanLibrary is a variable of type HMODULE in Windows or just void* in Linux. If the value returned by the library loading function is not 0 we can load all exported functions. The Vulkan library, as well as Vulkan implementations (every driver from every vendor), are required to expose only one function that can be loaded with the standard techniques our OS possesses (like the previously mentioned GetProcAddress() in Windows or dlsym() in Linux). Other functions from the Vulkan API may also be available for acquiring using this method but it is not guaranteed (and even not recommended). The only function that must be exported is vkGetInstanceProcAddr().

This function is used to load all other Vulkan functions. To ease our work of obtaining addresses of all Vulkan API functions it is very convenient to place their names inside a macro. This way we won’t have to duplicate function names in multiple places (like definition, declaration, or loading) and can keep them in only one header file. This single file will be used later for different purposes with an #include directive. We can declare our exported function like this:

#if !defined(VK_EXPORTED_FUNCTION)
#define VK_EXPORTED_FUNCTION( fun )
#endif

VK_EXPORTED_FUNCTION( vkGetInstanceProcAddr )

#undef VK_EXPORTED_FUNCTION

2.ListOfFunctions.inl, -

Now we define the variables that will represent functions from the Vulkan API. This can be done with something like this:

#include "vulkan.h"

#define VK_EXPORTED_FUNCTION( fun ) PFN_##fun fun;
#define VK_GLOBAL_LEVEL_FUNCTION( fun ) PFN_##fun fun;
#define VK_INSTANCE_LEVEL_FUNCTION( fun ) PFN_##fun fun;
#define VK_DEVICE_LEVEL_FUNCTION( fun ) PFN_##fun fun;

#include "ListOfFunctions.inl"

3.VulkanFunctions.cpp

Here we first include the vulkan.h file, which is officially provided for developers that want to use Vulkan API in their applications. This file is similar to the gl.h file in the OpenGL library. It defines all enumerations, structures, types, and function types that are necessary for Vulkan application development. Next we define the macros for functions from each “level” (I will describe these levels soon). The function definition requires providing function type and a function name. Fortunately, function types in Vulkan can be easily derived from function names. For example, the definition of vkGetInstanceProcAddr() function’s type looks like this:

typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);

4.Vulkan.h

The definition of a variable that represents this function would then look like this:

PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;

This is what the macros from VulkanFunctions.cpp file expand to. They take the function name (hidden in a “fun” parameter) and add “PFN_” at the beginning. Then the macro places a space after the type, and adds a function name and a semicolon after that. Functions are “pasted” into the file in the line with the #include “ListOfFunctions.inl” directive.

But we must remember that when we want to define Vulkan functions’ prototypes by ourselves we must define the VK_NO_PROTOTYPES preprocessor directive. By default the vulkan.h header file contains definitions of all functions. This is useful when we are statically linking with Vulkan Runtime. So when we add our own definitions, there will be a compilation error claiming that the given variables (for function pointers) are defined more than once (since we would break the One Definition rule). We can disable definitions from vulkan.h file using the mentioned preprocessor macro.

Similarly we need to declare variables defined in the VulkanFunctions.cpp file so they would be seen in all other parts of our code. This is done in the same way, but the word “extern” is placed before each function. Compare to the VulkanFunctions.h file.

Now we have variables in which we can store addresses of functions acquired from the Vulkan library. To load the only one exported function, we can use the following code:

#if defined(VK_USE_PLATFORM_WIN32_KHR)

#define LoadProcAddress GetProcAddress

#elif defined(VK_USE_PLATFORM_XCB_KHR) || defined(VK_USE_PLATFORM_XLIB_KHR)

#define LoadProcAddress dlsym

#endif


#define VK_EXPORTED_FUNCTION( fun )                                     \

if( !(fun = (PFN_##fun)LoadProcAddress( VulkanLibrary, #fun )) ) {  \

printf( "Could not load exported function: " #fun "!\n" );          \

return false;                                                       \

}

#include "ListOfFunctions.inl"

return true;

5.Tutorial01.cpp, function LoadExportedEntryPoints()

This macro takes the function name from the “fun” parameter, converts it into a string (with #) and obtains its address from VulkanLibrary. The address is acquired using the GetProcAddress() (on Windows) or dlsym() (on Linux) function and is stored in the variable represented by fun. If this operation fails and the function is not exposed from the library, we report this problem by printing the proper information and returning false. The macro operates on lines included from ListOfFunctions.inl. This way we don’t have to write the names of functions multiple times.

Now that we have our main function-loading procedure, we can load the rest of the Vulkan API procedures. These can be divided into three types:

  • Global-level functions. Allow us to create a Vulkan instance.
  • Instance-level functions. Check what Vulkan-capable hardware is available and what Vulkan features are exposed.
  • Device-level functions. Responsible for performing jobs typically done in a 3D application (like drawing).

We will start with acquiring instance creation functions from the global level.

Acquiring Pointers to Global-Level Functions

Before we can create a Vulkan instance we must acquire the addresses of functions that will allow us to do it. Here is a list of these functions:

  • vkCreateInstance
  • vkEnumerateInstanceExtensionProperties
  • vkEnumerateInstanceLayerProperties

The most important function is vkCreateInstance(), which allows us to create a “Vulkan instance.” From application point of view Vulkan instance can be thought of as an equivalent of OpenGL’s rendering context. It stores per-application state (there is no global state in Vulkan) like enabled instance-level layers and extensions. The other two functions allow us to check what instance layers are available and what instance extensions are available. Validation layers are divided into instance and device levels depending on what functionality they debug. Extensions in Vulkan are similar to OpenGL’s extensions: they expose additional functionality that is not required by core specifications, and not all hardware vendors may implement them. Extensions, like layers, are also divided into instance and device levels, and extensions from different levels must be enabled separately. In OpenGL, all extensions are (usually) available in created contexts; using Vulkan we have to enable them before the functionality exposed by them can be used.

We call the function vkGetInstanceProcAddr() to acquire addresses of instance-level procedures. It takes two parameters: an instance, and a function name. We don’t have an instance yet so we provide “null” for the first parameter. That’s why these functions may sometimes be called null-instance or no-instance level functions. The second parameter required by the vkGetInstanceProcAddr() function is a name of a procedure address of which we want to acquire. We can only load global-level functions without an instance. It is not possible to load any other function without an instance handle provided in the first parameter.

The code that loads global-level functions may look like this:

#define VK_GLOBAL_LEVEL_FUNCTION( fun )                             \

if( !(fun = (PFN_##fun)vkGetInstanceProcAddr( nullptr, #fun )) ) {  \

  printf( "Could not load global level function: " #fun "!\n" );    \

  return false;                                                     \

}

#include "ListOfFunctions.inl"

return true;

6.Tutorial01.cpp, function LoadGlobalLevelEntryPoints()

The only difference between this code and the code used for loading the exported function (vkGetInstanceProcAddr() exposed by the library) is that we don’t use function provided by the OS, like GetProcAddress(), but we call vkGetInstanceProcAddr() where the first parameter is set to null.

If you follow this tutorial and write the code yourself, make sure you add global-level functions wrapped in a properly named macro to ListOfFunctions.inl header file:

#if !defined(VK_GLOBAL_LEVEL_FUNCTION)

#define VK_GLOBAL_LEVEL_FUNCTION( fun )

#endif


VK_GLOBAL_LEVEL_FUNCTION( vkCreateInstance )

VK_GLOBAL_LEVEL_FUNCTION( vkEnumerateInstanceExtensionProperties )

VK_GLOBAL_LEVEL_FUNCTION( vkEnumerateInstanceLayerProperties )


#undef VK_GLOBAL_LEVEL_FUNCTION

7.ListOfFunctions.inl

Creating a Vulkan Instance

Now that we have loaded global-level functions, we can create a Vulkan instance. This is done by calling the vkCreateInstance() function, which takes three parameters.

  • The first parameter has information about our application, the requested Vulkan version, and the instance level layers and extensions we want to enable. This all is done with structures (structures are very common in Vulkan).
  • The second parameter provides a pointer to a structure with list of different functions related to memory allocation. They can be used for debugging purposes but this feature is optional and we can rely on built-in memory allocation methods.
  • The third parameter is an address of a variable in which we want to store Vulkan instance handle. In the Vulkan API it is common that results of operations are stored in variables we provide addresses of. Return values are used only for some pass/fail notifications. Here is the full source code for instance creation:
VkApplicationInfo application_info = {

  VK_STRUCTURE_TYPE_APPLICATION_INFO,             // VkStructureType            sType

  nullptr,                                        // const void                *pNext

  "API without Secrets: Introduction to Vulkan",  // const char                *pApplicationName

  VK_MAKE_VERSION( 1, 0, 0 ),                     // uint32_t                   applicationVersion

  "Vulkan Tutorial by Intel",                     // const char                *pEngineName

  VK_MAKE_VERSION( 1, 0, 0 ),                     // uint32_t                   engineVersion

  VK_API_VERSION                                  // uint32_t                   apiVersion

};

VkInstanceCreateInfo instance_create_info = {

  VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,         // VkStructureType            sType

  nullptr,                                        // const void*                pNext

  0,                                              // VkInstanceCreateFlags      flags

  &application_info,                              // const VkApplicationInfo   *pApplicationInfo

  0,                                              // uint32_t                   enabledLayerCount

  nullptr,                                        // const char * const        *ppEnabledLayerNames

  0,                                              // uint32_t                   enabledExtensionCount

  nullptr                                         // const char * const        *ppEnabledExtensionNames

};

if( vkCreateInstance( &instance_create_info, nullptr, &Vulkan.Instance ) != VK_SUCCESS ) {
  printf( "Could not create Vulkan instance!\n" );
  return false;
}

return true;

8.Tutorial01.cpp, function CreateInstance()

Most of the Vulkan structures begin with a field describing the type of the structure. Parameters are provided to functions by pointers to avoid copying big memory chunks. Sometimes, inside structures, pointers to other structures, are also provided. For the driver to know how many bytes it should read and how members are aligned, the type of the structure is always provided. So what exactly do all these parameters mean?

  • sType – Type of the structure. In this case it informs the driver that we are providing information for instance creation by providing a value of VK_STRUCTURE_TYPE_APPLICATION_INFO.
  • pNext – Additional information for instance creation may be provided in future versions of Vulkan API and this parameter will be used for that purpose. For now, it is reserved for future use.
  • flags – Another parameter reserved for future use; for now it must be set to 0.
  • pApplicationInfo – An address of another structure with information about our application (like name, version, required Vulkan API version, and so on).
  • enabledLayerCount – Defines the number of instance-level validation layers we want to enable.
  • ppEnabledLayerNames – This is an array of enabledLayerCount elements with the names of the layers we would like to enable.
  • enabledExtensionCount – The number of instance-level extensions we want to enable.
  • ppEnabledExtensionNames – As with layers, this parameter should point to an array of at least enabledExtensionCount elements containing names of instance-level extensions we want to use.

Most of the parameters can be nulls or zeros. The most important one (apart from the structure type information) is a parameter pointing to a variable of type VkApplicationInfo. So before specifying instance creation information, we also have to specify an additional variable describing our application. This variable contains the name of our application, the name of the engine we are using, or the Vulkan API version we require (which is similar to the OpenGL version; if the driver doesn’t support this version, the instance will not be created). This information may be very useful for the driver. Remember that some graphics card vendors provide drivers that can be specialized for a specific title, such as a specific game. If a graphics card vendor knows what graphics the engine game uses, it can optimize the driver’s behavior so the game performs faster. This application information structure can be used for this purpose. The parameters from the VkApplicationInfo structure include:

  • sType – Type of structure. Here VK_STRUCTURE_TYPE_APPLICATION_INFO, information about the application.
  • pNext – Reserved for future use.
  • pApplicationName – Name of our application.
  • applicationVersion – Version of our application; it is quite convenient to use Vulkan macro for version creation. It packs major, minor, and patch numbers into one 32-bit value.
  • pEngineName – Name of the engine our application uses.
  • engineVersion – Version of the engine we are using in our application.
  • apiVersion – Version of the Vulkan API we want to use. It is best to provide the version defined in the Vulkan header we are including, which is why we use VK_API_VERSION found in the vulkan.h header file.

So now that we have defined these two structures we can call the vkCreateInstance() function and check whether an instance was created. If successful, instance handle will be stored in a variable we provided the address of and VK_SUCCESS (which is zero!) is returned.

Acquiring Pointers to Instance-Level Functions

We have created a Vulkan instance. Next we can acquire pointers to functions that allow us to create a logical device, which can be seen as a user view on a physical device. There may be many different devices installed on a computer that support Vulkan. Each of these devices may have different features and capabilities and different performance, or may support different functionalities. When we want to use Vulkan, we must specify which device to perform the operations on. We may use many devices for different purposes (such as one for rendering 3D graphics, one for physics calculations, and one for media decoding). We must check what devices and how many of them are available, what their capabilities are, and what operations they support. This is all done with instance-level functions. We get the addresses of these functions using the vkGetInstanceProcAddr() function used earlier. But this time we will provide handle to a created Vulkan instance.

Loading every Vulkan procedure using the vkGetInstanceProcAddr() function and Vulkan instance handle comes with some trade-offs. When we use Vulkan for data processing, we must create a logical device and acquire device-level functions. But on the computer that runs our application, there may be many devices that support Vulkan. Determining which device to use depends on the mentioned logical device. But vkGetInstanceProcAddr() doesn’t recognize a logical device, as there is no parameter for it. When we acquire device-level procedures using this function we in fact acquire addresses of a simple “jump” functions. These functions take the handle of a logical device and jump to a proper implementation (function implemented for a specific device). The overhead of this jump can be avoided. The recommended behavior is to load procedures for each device separately using another function. But we still have to use the vkGetInstanceProcAddr() function to load functions that allow us to create such a logical device.

Some of the instance level functions include:

  • vkEnumeratePhysicalDevices
  • vkGetPhysicalDeviceProperties
  • vkGetPhysicalDeviceFeatures
  • vkGetPhysicalDeviceQueueFamilyProperties
  • vkCreateDevice
  • vkGetDeviceProcAddr
  • vkDestroyInstance

These are the functions that are required and are used in this tutorial to create a logical device. But there are other instance-level functions, that is, from extensions. The list in a header file from the example solution’s source code will expand. The source code used to load all these functions is:

#define VK_INSTANCE_LEVEL_FUNCTION( fun )                                   \

if( !(fun = (PFN_##fun)vkGetInstanceProcAddr( Vulkan.Instance, #fun )) ) {  \

  printf( "Could not load instance level function: " #fun "\n" );           \

  return false;                                                             \

}

#include "ListOfFunctions.inl"

return true;

9.Tutorial01.cpp, function LoadInstanceLevelEntryPoints()

The code for loading instance-level functions is almost identical to the code loading global-level functions. We just change the first parameter of vkGetInstanceProcAddr() function from null to create Vulkan instance handle. Of course we also operate on instance-level functions so now we redefine the VK_INSTANCE_LEVEL_FUNCTION() macro instead of a VK_GLOBAL_LEVEL_FUNCTION() macro. We also need to define functions from the instance level. As before, this is best done with a list of macro-wrapped names collected in a shared header, for example:

#if !defined(VK_INSTANCE_LEVEL_FUNCTION)

#define VK_INSTANCE_LEVEL_FUNCTION( fun )

#endif



VK_INSTANCE_LEVEL_FUNCTION( vkDestroyInstance )

VK_INSTANCE_LEVEL_FUNCTION( vkEnumeratePhysicalDevices )

VK_INSTANCE_LEVEL_FUNCTION( vkGetPhysicalDeviceProperties )

VK_INSTANCE_LEVEL_FUNCTION( vkGetPhysicalDeviceFeatures )

VK_INSTANCE_LEVEL_FUNCTION( vkGetPhysicalDeviceQueueFamilyProperties )

VK_INSTANCE_LEVEL_FUNCTION( vkCreateDevice )

VK_INSTANCE_LEVEL_FUNCTION( vkGetDeviceProcAddr )

VK_INSTANCE_LEVEL_FUNCTION( vkEnumerateDeviceExtensionProperties )


#undef VK_INSTANCE_LEVEL_FUNCTION

10.ListOfFunctions.inl

Instance-level functions operate on physical devices. In Vulkan we can see “physical devices” and “logical devices” (simply called devices). As the name suggests, a physical device refers to any physical graphics card (or any other hardware component) that is installed on a computer running a Vulkan-enabled application that is capable of executing Vulkan commands. As mentioned earlier, such a device may expose and implement different (optional) Vulkan features, may have different capabilities (like total memory or ability to work on buffer objects of different sizes), or may provide different extensions. Such hardware may be a dedicated (discrete) graphics card or an additional chip built (integrated) into a main processor. It may even be the CPU itself. Instance-level functions allow us to check all these parameters. After we check them, we must decide (based on our findings and our needs) which physical device we want to use. Maybe we even want to use more than one device, which is also possible, but this scenario is too advanced for now. So if we want to harness the power of any physical device we must create a logical device that represents our choice in the application (along with enabled layers, extensions, features, and so on). After creating a device (and acquiring queues) we are prepared to use Vulkan, the same way as we are prepared to use OpenGL after creating rendering context.

Creating a Logical Device

Before we can create a logical device, we must first check to see how many physical devices are available in the system we execute our application on. Next we can get handles to all available physical devices:

uint32_t num_devices = 0;

if( (vkEnumeratePhysicalDevices( Vulkan.Instance, &num_devices, nullptr ) != VK_SUCCESS) ||

    (num_devices == 0) ) {

  printf( "Error occurred during physical devices enumeration!\n" );

  return false;

}



std::vector<VkPhysicalDevice> physical_devices( num_devices );

if( vkEnumeratePhysicalDevices( Vulkan.Instance, &num_devices, &physical_devices[0] ) != VK_SUCCESS ) {

  printf( "Error occurred during physical devices enumeration!\n" );

  return false;

}

11.Tutorial01.cpp, function CreateDevice()

To check how many devices are available, we call the vkEnumeratePhysicalDevices() function. We call it twice, first with the last parameter set to null. This way the driver knows that we are asking only for the number of available physical devices. This number will be stored in the variable we provided the address of in the second parameter.

Now that we know how many physical devices are available we can prepare storage for their handles. I use a vector so I don’t need to worry about memory allocation and deallocation. When we call vkEnumeratePhysicalDevices() again, this time with all the parameters not equal to null, we will acquire handles of the physical devices in the array we provided addresses of in the last parameter. This array may not be the same size as the number returned after the first call, but it must hold the same number of elements as defined in the second parameter.

Example: we can have four physical devices available, but we are interested only in the first one. So after the first call we set a value of four in num_devices. This way we know that there is any Vulkan-compatible device and that we can proceed. We overwrite this value with one as we only want to use one (any) such device, no matter which. And we will get only one physical device handle after the second call.

The number of devices we provided will be replaced by the actual number of enumerated physical devices (which of course will not be greater than the value we provided). Example: we don’t want to call this function twice. Our application supports up to 10 devices and we provide this value along with a pointer to a static, 10-element array. The driver always returns the number of actually enumerated devices. If there is none, zero is stored in the variable address we provided. If there is any such device, we will also know that. We will not be able to tell if there are more than 10 devices.

Now that we have handles of all the Vulkan compatible physical devices we can check the properties of each device. In the sample code, this is done inside a loop:

VkPhysicalDevice selected_physical_device = VK_NULL_HANDLE;

uint32_t selected_queue_family_index = UINT32_MAX;

for( uint32_t i = 0; i < num_devices; ++i ) {

  if( CheckPhysicalDeviceProperties( physical_devices[i], selected_queue_family_index ) ) {

    selected_physical_device = physical_devices[i];

  }

}

12.Tutorial01.cpp, function CreateDevice()

Device Properties

I created the CheckPhysicalDeviceProperties() function. It takes the handle of a physical device and checks whether the capabilities of a given device are enough for our application to work properly. If so, it returns true and stores the queue family index in the variable provided in the second parameter. Queues and queue families are discussed in a later section.

Here is the first half of a CheckPhysicalDeviceProperties() function:

VkPhysicalDeviceProperties device_properties;

VkPhysicalDeviceFeatures   device_features;



vkGetPhysicalDeviceProperties( physical_device, &device_properties );

vkGetPhysicalDeviceFeatures( physical_device, &device_features );



uint32_t major_version = VK_VERSION_MAJOR( device_properties.apiVersion );

uint32_t minor_version = VK_VERSION_MINOR( device_properties.apiVersion );

uint32_t patch_version = VK_VERSION_PATCH( device_properties.apiVersion );



if( (major_version < 1) &&

    (device_properties.limits.maxImageDimension2D < 4096) ) {

  printf( "Physical device %p doesn't support required parameters!\n", physical_device );

  return false;

}

13.Tutorial01.cpp, function CheckPhysicalDeviceProperties()

At the beginning of this function, the physical device is queried for its properties and features. Properties contain fields such as supported Vulkan API version, device name and type (integrated or dedicated/discrete GPU), Vendor ID, and limits. Limits describe how big textures can be created, how many samples in anti-aliasing are supported, or how many buffers in a given shader stage can be used.

Device Features

Features are additional hardware capabilities that are similar to extensions. They may not necessarily be supported by the driver and by default are not enabled. Features contain items such as geometry and tessellation shaders multiple viewports, logical operations, or additional texture compression formats. If a given physical device supports any feature we can enable it during logical device creation. Features are not enabled by default in Vulkan. But the Vulkan spec points out that some features may have performance impact (like robustness).

After querying for hardware info and capabilities, I have provided a small example of how these queries can be used. I “reversed” the VK_MAKE_VERSION macro and retrieved major, minor, and patch versions from the apiVersion field of device properties. I check whether it is above some version I want to use, and also check whether I can create 2D textures of a given size. In this example I’m not using features at all, but if we want to use any feature (that is,  geometry shaders) we must check whether it is supported and we must (explicitly) enable it later, during logical device creation. And this is the reason why we need to create a logical device and not use physical device directly. A logical device represents a physical device and all the features and extensions we enabled for it.

The next part of checking physical device’s capabilities—queues—requires additional explanation.

Queues, Queue Families, and Command Buffers

When we want to process any data (that is, draw a 3D scene from vertex data and vertex attributes) we call Vulkan functions that are passed to the driver. These functions are not passed directly, as sending each request separately down through a communication bus is inefficient. It is better to aggregate them and pass in groups. In OpenGL this was done automatically by the driver and was hidden from the user. OpenGL API calls were queued in a buffer and if this buffer was full (or if we requested to flush it) whole buffer was passed to hardware for processing. In Vulkan this mechanism is directly visible to the user and, more importantly, the user must specifically create and manage buffers for commands. These are called (conveniently) command buffers.

Command buffers (as whole objects) are passed to the hardware for execution through queues. However, these buffers may contain different types of operations, such as graphics commands (used for generating and displaying images like in typical 3D games) or compute commands (used for processing data). Specific types of commands may be processed by dedicated hardware, and that’s why queues are also divided into different types. In Vulkan these queue types are called families. Each queue family may support different types of operations. That’s why we also have to check if a given physical device supports the type of operations we want to perform. We can also perform one type of operation on one device and another type of operation on another device, but we have to check if we can. This check is done in the second half of CheckPhysicalDeviceProperties() function:

uint32_t queue_families_count = 0;

vkGetPhysicalDeviceQueueFamilyProperties( physical_device, &queue_families_count, nullptr );

if( queue_families_count == 0 ) {

  printf( "Physical device %p doesn't have any queue families!\n", physical_device );

  return false;

}



std::vector<VkQueueFamilyProperties> queue_family_properties( queue_families_count );

vkGetPhysicalDeviceQueueFamilyProperties( physical_device, &queue_families_count, &queue_family_properties[0] );

for( uint32_t i = 0; i < queue_families_count; ++i ) {

  if( (queue_family_properties[i].queueCount > 0) &&

      (queue_family_properties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) ) {

    queue_family_index = i;

    return true;

  }

}



printf( "Could not find queue family with required properties on physical device %p!\n", physical_device );

return false;

14.Tutorial01.cpp, function CheckPhysicalDeviceProperties()

We must first check how many different queue families are available in a given physical device. This is done in a similar way to enumerating physical devices. First we call vkGetPhysicalDeviceQueueFamilyProperties() with the last parameter set to null. This way, in a “queue_count” a variable number of different queue families is stored. Next we can prepare a place for this number of queue families’ properties (if we want to—the mechanism is similar to enumerating physical devices). Next we call the function again and the properties for each queue family are stored in a provided array.

The properties of each queue family contain queue flags, the number of available queues in this family, time stamp support, and image transfer granularity. Right now, the most important part is the number of queues in the family and flags. Flags (which is a bitfield) define which types of operations are supported by a given queue family (more than one may be supported). It can be graphics, compute, transfer (memory operations like copying), and sparse binding (for sparse resources like mega-textures) operations. Other types may appear in the future.

In our example we check for graphics operations support, and if we find it we can use the given physical device. Remember that we also have to remember the selected family index. After we chose the physical device we can create logical device that will represent it in the rest of our application, as shown in the example:

if( selected_physical_device == VK_NULL_HANDLE ) {

  printf( "Could not select physical device based on the chosen properties!\n" );

  return false;

}



std::vector<float> queue_priorities = { 1.0f };



VkDeviceQueueCreateInfo queue_create_info = {

  VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,     // VkStructureType              sType

  nullptr,                                        // const void                  *pNext

  0,                                              // VkDeviceQueueCreateFlags     flags

  selected_queue_family_index,                    // uint32_t                     queueFamilyIndex

  static_cast<uint32_t>(queue_priorities.size()), // uint32_t                     queueCount&queue_priorities[0]                            // const float                 *pQueuePriorities

};



VkDeviceCreateInfo device_create_info = {

  VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,           // VkStructureType                    sType

  nullptr,                                        // const void                        *pNext

  0,                                              // VkDeviceCreateFlags                flags

  1,                                              // uint32_t                           queueCreateInfoCount

  &queue_create_info,                             // const VkDeviceQueueCreateInfo     *pQueueCreateInfos

  0,                                              // uint32_t                           enabledLayerCount

  nullptr,                                        // const char * const                *ppEnabledLayerNames

  0,                                              // uint32_t                           enabledExtensionCount

  nullptr,                                        // const char * const                *ppEnabledExtensionNames

  nullptr                                         // const VkPhysicalDeviceFeatures    *pEnabledFeatures

};



if( vkCreateDevice( selected_physical_device, &device_create_info, nullptr, &Vulkan.Device ) != VK_SUCCESS ) {

  printf( "Could not create Vulkan device!\n" );

  return false;

}



Vulkan.QueueFamilyIndex = selected_queue_family_index;

return true;

15.Tutorial01.cpp, function CreateDevice()

First we make sure that after we exited the device features loop, we have found the device that supports our needs. Next we can create a logical device, which is done by calling vkCreateDevice(). It takes the handle to a physical device and an address of a structure that contains the information necessary for device creation. This structure is of type VkDeviceCreateInfo and contains the following fields:

  • sType – Standard type of a provided structure, VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO here that means we are providing parameters for a device creation.
  • pNext – Parameter pointing to an extension specific structure; here we set it to null.
  • flags – Another parameter reserved for future use which must be zero.
  • queueCreateInfoCount – Number of different queue families from which we create queues along with the device.
  • pQueueCreateInfos – Pointer to an array of queueCreateInfoCount elements specifying queues we want to create.
  • enabledLayerCount – Number of device-level validation layers to enable.
  • ppEnabledLayerNames – Pointer to an array with enabledLayerCount names of device-level layers to enable.
  • enabledExtensionCount – Number of extensions to enable for the device.
  • ppEnabledExtensionNames – Pointer to an array with enabledExtensionCount elements; each element must contain the name of an extension that should be enabled.
  • pEnabledFeatures – Pointer to a structure indicating additional features to enable for this device (see the “Device ” section).

Features (as I have described earlier) are additional hardware capabilities that are disabled by default. If we want to enable all available features, we can’t simply fill this structure with ones. If some feature is not supported, the device creation will fail. Instead, we should pass a structure that was filled when we called vkGetPhysicalDeviceFeatures(). This is the easiest way to enable all supported features. If we are interested only in some specific features, we query the driver for available features and clear all unwanted fields. If we don’t want any of the additional features we can clear this structure (fill it with zeros) or pass a null pointer for this parameter (like in this example).

Queues are created automatically along with the device. To specify what types of queues we want to enable, we provide an array of additional VkDeviceQueueCreateInfo structures. This array must contain queueCreateInfoCount elements. Each element in this array must refer to a different queue family; we refer to a specific queue family only once.

The VkDeviceQueueCreateInfo structure contains the following fields:

  • sType –Type of structure, here VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO  indicating it’s queue creation information.
  • pNext – Pointer reserved for extensions.
  • flags – Value reserved for future use.
  • queueFamilyIndex – Index of a queue family from which queues should be created.
  • queueCount – Number of queues we want to enable in this specific queue family (number of queues we want to use from this family) and a number of elements in the pQueuePriorities array.
  • pQueuePriorities – Array with floating point values describing priorities of operations performed in each queue from this family.

As I mentioned previously, each element in the array with VkDeviceQueueCreateInfo elements must describe a different queue family. Its index is a number that must be smaller than the value provided by the vkGetPhysicalDeviceQueueFamilyProperties() function (must be smaller than number of available queue families). In our example we are only interested in one queue from one queue family. And that’s why we must remember the queue family index. It is used right here. If we want to prepare a more complicated scenario, we should also remember the number of queues in each family as each family may support a different number of queues. And we can’t create more queues than are available in a given family!

It is also worth noting that different queue families may have similar (or even identical properties) meaning they may support similar types of operations, that is, there may be more than one queue families that support graphics operations. And each family may contain different number of queues.

We must also assign a floating point value (from 0.0 to 1.0, both inclusive) to each queue. The higher the value we provide for a given queue (relative to values assigned to other queues) the more time the given queue may have for processing commands (relatively to other queues). But this relation is not guaranteed. Priorities also don’t influence execution order. It is just a hint.

Priorities are relative only on a single device. If operations are performed on multiple devices, priorities may impact processing time in each of these devices but not between them. A queue with a given value may be more important only than queues with lower priorities on the same device. Queues from different devices are treated independently. Once we fill these structures and call vkCreateDevice(), upon success a created logical device is stored in a variable we provided an address of (in our example it is called VulkanDevice). If this function fails, it returns a value other than VK_SUCCESS.

Acquiring Pointers to Device-Level Functions

We have created a logical device. We can now use it to load functions from the device level. As I have mentioned earlier in real-life scenarios, there will be situations where more than one hardware vendor on a single computer will provide us with Vulkan implementation. With OpenGL it is happening now. Many computers have dedicated/discrete graphics card used mainly for gaming, but they also have Intel’s graphics card built into the processor (which of course can also be used for games). So in the future there will be more than one device supporting Vulkan. And with Vulkan we can divide processing into whatever hardware we want. Remember when there were extension cards dedicated for physics processing? Or going farther into the past, a normal “2D” card with additional graphics “accelerator” (do you remember Voodoo cards)? Vulkan is ready for any such scenario.

So what should we do with device-level functions if there can be so many devices? We can load universal procedures. This is done with the vkGetInstanceProcAddr() function. It returns the addresses of dispatch functions that perform jumps to proper implementations based on a provided logical device handle. But we can avoid this overhead by loading functions for each logical device separately. With this method, we must remember that we can call the given function only with the device we loaded this function from. So if we are using more devices in our application we must load functions from each of these devices. It’s not that difficult. And despite this leading to storing more functions (and grouping them based on a device they were loaded from), we can avoid one level of abstraction and save some processor time. We can load functions similarly to how we have loaded exported, global-, and instance-level functions:

#define VK_DEVICE_LEVEL_FUNCTION( fun )                                 \

if( !(fun = (PFN_##fun)vkGetDeviceProcAddr( Vulkan.Device, #fun )) ) {  \

  printf( "Could not load device level function: " #fun "!\n" );        \

  return false;                                                         \

}


#include "ListOfFunctions.inl"

return true;

16.Tutorial01.cpp, function LoadDeviceLevelEntryPoints()

This time we used the vkGetDeviceProcAddr() function along with a logical device handle. Functions from device level are placed in a shared header. This time they are wrapped in a VK_DEVICE_LEVEL_FUNCTION() macro like this:

#if !defined(VK_DEVICE_LEVEL_FUNCTION)

#define VK_DEVICE_LEVEL_FUNCTION( fun )

#endif


VK_DEVICE_LEVEL_FUNCTION( vkGetDeviceQueue )

VK_DEVICE_LEVEL_FUNCTION( vkDestroyDevice )

VK_DEVICE_LEVEL_FUNCTION( vkDeviceWaitIdle )


#undef VK_DEVICE_LEVEL_FUNCTION

17.ListOfFunctions.inl

All functions that are not from the exported, global or instance levels are from the device level. Another distinction can be made based on a first parameter: for device-level functions, the first parameter in the list may only be of type VkDevice, VkQueue, or VkCommandBuffer. In the rest of the tutorial if a new function appears it must be added to ListOfFunctions.inl and further added in the VK_DEVICE_LEVEL_FUNCTION portion (with a few noted exceptions like extensions).

Retrieving Queues

Now that we have created a device, we need a queue that we can submit some commands to for processing. Queues are automatically created with a logical device, but in order to use them we must specifically ask for a queue handle. This is done with vkGetDeviceQueue() like this:

vkGetDeviceQueue( Vulkan.Device, Vulkan.QueueFamilyIndex, 0, &Vulkan.Queue );

18.Tutorial01.cpp, function GetDeviceQueue()

To retrieve the queue handle we must provide the logical device we want to get the queue from. The queue family index is also needed and it must by one of the indices we’ve provided during logical device creation (we cannot create additional queues or use queues from families we didn’t request). One last parameter is a queue index from within a given family; it must be smaller than the total number of queues we requested from a given family. For example if the device supports five queues in family number 3 and we want two queues from that family, the index of a queue must be smaller than two. For each queue we want to retrieve we have to call this function and make a separate query. If the function call succeeds, it will store a handle to a requested queue in a variable we have provided the address of in the final parameter. From now on, all the work we want to perform (using command buffers) can be submitted for processing to the acquired queue.

Tutorial01 Execution

As I have mentioned, the example provided with this tutorial doesn’t display anything. But we have learned enough information for one lesson. So how do we know if everything went fine? If the normal application window appears and nothing is printed in the console/terminal, this means the Vulkan setup was successful. Starting with the next tutorial, the results of our operations will be displayed on the screen.

Cleaning Up

There is one more thing we need to remember: cleaning up and freeing resources. Cleanup must be done in a specific order that is (in general) a reversal of the order of creation.

After the application is closed, the OS should release memory and all other resources associated with it. This should include Vulkan; the driver usually cleans up unreferenced resources. Unfortunately, this cleaning may not be performed in a proper order, which might lead to application crash during the closing process. It is always good practice to do the cleaning ourselves. Here is the sample code required to release resources we have created during this first tutorial:

if( Vulkan.Device != VK_NULL_HANDLE ) {

  vkDeviceWaitIdle( Vulkan.Device );

  vkDestroyDevice( Vulkan.Device, nullptr );

}


if( Vulkan.Instance != VK_NULL_HANDLE ) {

  vkDestroyInstance( Vulkan.Instance, nullptr );

}


if( VulkanLibrary ) {

#if defined(VK_USE_PLATFORM_WIN32_KHR)

  FreeLibrary( VulkanLibrary );

#elif defined(VK_USE_PLATFORM_XCB_KHR) || defined(VK_USE_PLATFORM_XLIB_KHR)

  dlclose( VulkanLibrary );

#endif

}

19.Tutorial01.cpp, destructor

We should always check to see whether any given resource was created. Without a logical device there are no device-level function pointers so we are unable to call even proper resource cleaning functions. Similarly, without an instance we are unable to acquire pointer to a vkDestroyInstance() function. In general we should not release resources that weren’t created.

We must ensure that before deleting any object, it is not being used by a device. That’s why there is a wait function, which will block until all processing on all queues of a given device is finished. Next, we destroy the logical device using the vkDestroyDevice() function. All queues associated with it are destroyed automatically, then the instance is destroyed. After that we can free (unload or release) a Vulkan library from which all these functions were acquired.

Conclusion

This tutorial explained how to prepare to use Vulkan in our application. First we “connect” with the Vulkan Runtime library and load global level functions from it. Then we create a Vulkan instance and load instance-level functions. After that we can check what physical devices are available and what are their features, properties, and capabilities. Next we create a logical device and describe what and how many queues must be created along with the device. After that we can retrieve device-level functions using the newly created logical device handle. One additional thing to do is to retrieve queues through which we can submit work for execution.

Go to: API without Secrets: Introduction to Vulkan* Part 2

 

2016 Intel® University Games Showcase

$
0
0

Download Document

Q: What do the following things have in common?

  • A multiplayer game set in a demon-possessed carnival town that uses split screen as a novel and fundamental game mechanic
  • A game where cute but bloodthirsty octopi take out senior citizens accompanied by happy elevator music
  • A 3D single-player action puzzler where players use fire and ice to manipulate their environment as they progress through an ancient, mysterious temple
  • A driving game with an extreme art style that uses only three colors
  • A third-person, physics-based flying soccer game where players control a robot athlete in a space arena

A: These were all games developed by student game development teams participating in the third annual Intel® University Games Showcase (IUGS).

One of last year’s winning teams coined a term that described this year’s event as well: “Super fun deluxe!” Intel was privileged to once again invite the best student projects from the best university game developer programs from around the United States. Intel provided USD35,000 in hardware prizes to the top three games in the categories of Best Gameplay and Best Visual Quality.

Once again the quality bar was high and the competition was fierce. The games and presentations were so good that in his GDC wrap-up article, VentureBeat’s Dean Takahashi praised the students participating in the IUGS in the same sentence with Epic’s Tim Sweeney. “The game industry is full of innovations and bright people, including the luminaries like Epic Games Chief Executive Tim Sweeney, who has more than two decades of game graphics and engine experience, and the students from 11 universities who attended the Intel University Games Showcase on Thursday night.” VentureBeat later published a great article summarizing the IUGS and the games that were presented and stated that the games “should be published right now.”

Congratulations to the winners at the 2016 IUGS (video of winners being announced here):

Best Gameplay:

  • 1st place, USD 10,000 prize – Drexel University, Mirrors of Grimaldi
  • 2nd place, USD 5,000 prize – Denius-Sams Gaming Academy, University of Texas, Roots of Sarkos
  • 3rd place, USD 2,500 prize – Savannah College of Art and Design, Battery Jam

Best Visual Quality:

  • 1st place, USD 10,000 prize – The Guildhall at Southern Methodist University (SMU), Inua
  • 2nd place, USD 5,000 prize – Savannah College of Art and Design (SCAD), Battery Jam
  • 3rd place, USD 2,500 prize – Rochester Institute of Technology (RIT), Hack, Slash & Backstab

The crowd of nearly 500 people roared when Drexel University’s Mirrors of Grimaldi was announced as the first place winner for Best Gameplay. The game’s designers describe their creation this way: “Mirrors of Grimaldi is an experimental local multiplayer game. You play together with three of your friends in the same physical space. It innovates the core gameplay of its genre – split screen. Unlike the standard split screens that are fixed, such as in Mario Kart*, players of Mirrors of Grimaldi constantly fight for their portion of the individual screens. Each player scrambles frantically to avoid swarms of enemies or swat them away and into the screen of an opponent. The better they survive in this fictional demon-possessed carnival town, the larger their screen size. The split screens themselves can become a friend or foe. For players who are not doing so well, the smaller screen size makes it easier for them to whack enemy trolls across the split-screen boundaries, and this provides them with a chance for a glorious comeback.”


Figure 1:In addition to being non-rectangular, the split screen in Mirrors of Grimaldi is used as a fundamental game play mechanic in the game. Note the different sizes and shapes depicting views for four players.

The Guildhall at SMU put on another strong showing with their game Inua, which lets you use your powers of ice and fire to change the environment and advance through the game. The Guildhall won both first place prizes in the first IUGS in 2014. This year, their game’s visuals impressed the judging panel and allowed them to win their third first-place prize in the three years of the event. According to The Guildhall team, in this game “the player takes the role of a young woman named Kaya, who ventures into the temple of a nature goddess. Kaya must obtain her totem element, an external expression of her nature that each individual in her tribe must achieve. To her surprise, she obtains control of both ice and fire. Presented with more questions than answers at the start of her spiritual journey, Kaya’s adventure continues to the highest terrace, the Elemental Temple.” The shifting color palate, cool for ice powers and warm for fire, is a unique feature of the game.




Figure 2:Two different scenes from the game Inua by students at The Guildhall at SMU, illustrating the differing color palates used in conjunction with ice powers (top) and fire powers (bottom).

SCAD, this year’s lone newcomer to the contest, impressed and took home two prizes with Battery Jam. In their words, “Battery Jam is a competitive party brawler game where you and up to three friends kick the bolts out of each other in multiple game modes. You’ll use tricky gadgets and flashy abilities to take out other Jammers by maneuvering them into deadly environmental hazards. Choose from multiple Jammers with distinct personalities and some of the sharpest dance moves a robot arena has ever seen. Ever.”

Features of Battery Jam include:

  • An easy-to-learn, four-button control scheme that brings even your clumsiest friends up to speed in minutes.
  • Clever and clean mechanics designed to let anyone play, while being clever enough to keep you thinking.
  • Dynamic maps with unique traps and hazards that can be used to take out your opponents.
  • Eight extraordinary items that are built to knock, blow, pull, and bounce your opponents into the deadly arena traps.

The panel of judges and the audience loved the game’s frenetic pace and the bright, bold visual style.


Figure 3:Judges awarded TWO prizes to SCAD’s colorful and fast-paced game, Battery Jam.

The Denius-Sams Gaming Academy at the University of Texas had a strong showing their second year in the competition, nabbing second place for Best Gameplay with Roots of Sarkos. According to the team, “In Roots of Sarkos, communication is key. It’s a networked, asymmetric platformer with an emphasis on cooperation between two players. Both players must rely on each other's individual strengths and abilities in order to escape the mysterious floating islands of Sarkos. One player guides, the other acts, and both work together in this digital equivalent of a trust-fall.”




Figure 4:The wide angle view of Roots of Sarkos (top) shows the 3D terrain that must be cooperatively navigated by characters with differing powers. In the close-up screenshot (bottom), one character is climbing an obstacle while aided by the second player. Players can reverse gravity in order to make it past seemingly impossible obstacles.

RIT came to defend their first-place finish for Best Visual Quality in the 2015 IUGS. They didn’t disappoint, taking third place in that category with Hack, Slash & Backstab. In this game, you and some of your so-called “friends” cooperate to progress and ultimately compete to become the sole survivor. Trust and betrayal abound, just like real-life team situations where individual success is still an important goal. “We offer this tool of momentary exploration without real-world consequence as a mirror to our own behavior. Can we be better team members, players, managers, and collaborators? Can we somehow change our environments to more readily accept and value friends, colleagues, and partners? Can we begin to understand that there doesn’t have to be a clear winner in life? Can we use a small arcade game to reflect on the real world, and rethink in earnest some of the ways in which we work and play? Or will we learn only to defend more cynically, shift alliances faster, and betray with ever more subtlety and surprise?”


Figure 5:A screenshot from the RIT game Hack, Slash & Backstab.

While not every team took home prizes for their university, all of them succeeded in entertaining and impressing the large crowd that had assembled for this must-see event at GDC 2016. USC’s Magnus team gave a spirited demonstration of their third-person, physics-based flying soccer game. The University of Utah showed Tentacult, a “cute-yet-brutal horde-mode puzzle game.” UC Santa Cruz showed Aura a 2D exploration-based music game that combined the designers’ encompassing love for games and music. Carnegie Mellon University gaming students showed an interactive graphic novel that educates and empowers people to act in situations that have a potential to lead to sexual harassment or assault. New York University showcased a racing game called Dire that used an extreme art style consisting of only three colors: red, white, and black. And DigiPen Institute of Technology brought Orion to life to explore the mysterious lands of Krino in their game, Ascension.

The lively evening was made even more fun with audience prizes provided by Epic, Unity, Disney, and Intel. The all-star panel of judges kept the contestants on their toes by asking insightful questions to help draw out more details about the games and the choices made in development. Some of the tweets from those in attendance summed it up:

@MagnusArena
March 18, 2016
GGWP to all of the competition at this year's #IUGS ! Seriously inspiring to see all the awesome work other student devs accomplished!

@real_rahjur
March 17, 2016
So excited to see the amazing games at the Intel Student Showcase!!! #supportStudentGames #iugs

@YaffeTheYounger
#GDC16 !! So excited to show off #MirrorsOfGrimaldi in the Intel walkway! #intelgamedev #indiedev #studentdev https://t.co/xZK0TAP0ql
March 16, 2016

@BaconElk
I finally got to #iugs like 15 minutes ago, and had no idea what to expect. YOU GUYS. This is all so cool!! #gdc16 #intelgamedev
March 18, 2016

@smuguildhall
March 18, 2016
So awesome to have this group of students, alumni, staff &amp; faculty gather togetherat #GDC16! #IUGS

@Official_GDC https://t.co/2RvQ9bnRpe
Thanks to all participants, judges, faculty, and partners for supporting the 2016 Intel University Games Showcase. See you in 2017!


Figure 6:Nine of the IUGS projects were on display and drew a constant crowd in the Intel Engagement Zone at GDC 2016.


Figure 7:The IUGS trophies took a lickin’ but kept on tickin’. One was knocked to the floor twice during the event, but suffered no apparent damage.



 
Figure 8:The audience had its share of winners too!


Figure 9:Congratulations to the Mirrors of Grimaldi team from Drexel University!


Figure 10:Congratulations to the Inua team from The Guildhall at SMU!

Additional Information

Event Video

Team and Game Information

Viewing all 3384 articles
Browse latest View live


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