メモリーのアクセスは、ポインターがデータにアライメントされていると高速になります。インテル® IPP 関数は、ポインターがアライメントされているデータを処理すると、より高速に実行されます。
ポインターのアライメント、メモリーの割り当ておよび割り当て解除には、以下のインテル® IPP 関数を使用します。
void* ippAlignPtr(void* ptr, int alignBytes)
ポインターを 2 の累乗、つまり 2、4、8、16... バイト境界にアライメントします。
void* ippMalloc(int length)
32 バイト境界にアライメントされたメモリーを割り当てます。メモリーを解放するには、ippFree 関数を使用します。
void ippFree(void* ptr)
ippMalloc 関数を使用して割り当てられたメモリーを解放します。
Ipp<datatype>* ippsMalloc_<datatype>(int len)
異なるデータ型の信号要素に、32 バイト境界にアライメントされたメモリーを割り当てます。メモリーを解放するには、ippsFree 関数を使用します。
void ippsFree(void* ptr)
ippsMalloc 関数を使用して割り当てられたメモリーを解放します。
Ipp<datatype>* ippiMalloc_<mod>(int widthPixels, int heightPixels, int* pStepBytes) -
すべての行がゼロでパディングされている画像に、32 バイト境界にアライメントされたメモリーを割り当てます。メモリーを解放するには、ippiFree 関数を使用します。
void ippiFree(void* ptr) -
ippiMalloc 関数を使用して割り当てられたメモリーを解放します。
割り当て可能なメモリー容量は、オペレーティング・システムとシステムのハードウェアによって決まります。ただし、2GB を超えることはできません。
ippFree、ippsFree および ippiFree 関数はそれぞれ、ippMalloc、ippsMalloc および ippiMalloc 関数を使用して割り当てられたメモリーを解放します。
ippFree、ippsFree および ippiFree 関数は、標準の malloc および calloc 標準関数を使用して割り当てられたメモリーの解放には使用できません。 ippMalloc、ippsMalloc および ippiMalloc 関数を使用して割り当てられたメモリーを、標準の free 関数を使用して解放することはできません。
以下のコード例は、ippiMalloc 関数を呼び出す方法を示しています。
#include "stdafx.h" #include "ipp.h" #include "tools.h" int main(int argc, char *argv[]) { IppiSize size = {320, 240}; int stride; Ipp8u* pSrc = ippiMalloc_8u_C3(size.width, size.height, &stride); ippiImageJaehne_8u_C3R(pSrc, stride, size); ipView_8u_C3R(pSrc, stride, size, "Source image", 0); int dstStride; Ipp8u* pDst = ippiMalloc_8u_C3(size.width, size.height, &dstStride); ippiCopy_8u_C3R(pSrc, stride, pDst, dstStride, size); ipView_8u_C3R(pDst, dstStride, size, "Destination image 1", 0); IppiSize ROISize = { size.width/2, size.height/2 }; ippiCopy_8u_C3R(pSrc, stride, pDst, dstStride, ROISize); ipView_8u_C3R(pDst, dstStride, ROISize, "Destination image, small", 0); IppiPoint srcOffset = { size.width/4, size.height/4 }; ippiCopy_8u_C3R(pSrc + srcOffset.x*3 + srcOffset.y*stride, stride, pDst, dstStride, ROISize); ipView_8u_C3R(pDst, dstStride, ROISize, "Destination image, small & shifted", 1); return 0; }
© 2007 - 2010 Intel Corporation. 無断での引用、転載を禁じます。