インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) を使用して優れたパフォーマンスを引き出す場合や、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 関数の実行で一貫性のある結果を得る必要がある場合は、データ配列をアライメントする必要があります。次の例は、64 ビット境界でアライメントする方法を示しています。以下のコードサンプルで示されているように、システムが提供するメモリー・アロケーターの代わりに mkl_malloc() を使用します。
// ******* C 言語 *******
...
#include <stdlib.h>
#include <mkl.h>
...
void *darray;
int workspace;
// アライメントの値を設定
int alignment=64;
...
// アライメントされたワークスペースを割り当て
darray = mkl_malloc( sizeof(double)*workspace, alignment );
...
// oneMKLを使用してプログラムを呼び出し
mkl_app( darray );
...
// ワークスペースを解放
mkl_free( darray );
! ******* Fortran 言語 *******
...
! アライメントの値を設定
integer alignment
parameter (alignment=64)
...
! oneMKL ルーチンを宣言
integer*8 mkl_malloc
external mkl_malloc, mkl_free, mkl_app
...
double precision darray
pointer (p_wrk,darray(1))
integer workspace
...
! アライメントされたワークスペースを割り当て
p_wrk = mkl_malloc( %val(8*workspace), %val(alignment) )
...
! oneMKLを使用してプログラムを呼び出し
call mkl_app( darray )
...
! ワークスペースを解放
call mkl_free(p_wrk)