メモリー・アライメント

メモリーのアクセスは、ポインターがデータにアライメントされていると高速になります。インテル® 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 を超えることはできません。

Caution icon警告

以下のコード例は、ippiMalloc 関数を呼び出す方法を示しています。

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;
                }
                

このヘルプトピックについてのフィードバックを送信

© 2008 - 2010 Intel Corporation. 無断での引用、転載を禁じます。