目次 - API(機能別) - CPU仕様の検知 - SDL_SIMDAlloc

SDL_SIMDAlloc

メモリをSIMDに適した方法で確保する

構文

void* SDL_SIMDAlloc(const size_t len)(void)

引数

len確保するブロックのバイト長. 実際に確保されるブロックはパッディング等で指定より長くなる

戻り値

新しく確保されたブロックを戻す. メモリが足りないときNULLを戻す.

詳細

この関数はSIMD命令に適したメモリブロックを確保する. 特に, システムのベクトル命令に適したアライメントとパッディングが行われる.

戻されるメモリはパッディングされているので, メモリブロックの終端でも安全に不完全なベクトルを読み書きできる. これは, SIMD処理ループの最後で確保したバッファをオーバーフローせずに終端の要素を扱うためにスカラに戻る必要がないため有用である.

このメモリは必ずSDL_FreeSIMD()で解放しなければならない. free(), SDL_free(), delete[]等ではない.

SDLが扱えるのはSDLが知っているSIMD命令セットのみなので注意すること; 例えば, SDL 2.0.8はSSEが16バイトベクトル(SDL_HasSSE())を, AVX2が32バイトベクトル(SDL_HasAVX2())を必要とすることは知っているが, AVX-512が64バイトを必要とすることは知らない. 明確に言うと, SDL_Has*()関数にあなたが使用する命令セットがなければ, その命令セットでこの関数で確保したメモリを使用してはならない.

SDL_AllocSIMD(0)でもNULLではないポインタを戻す. システムのメモリが不足していないことを確認するために使える. しかし, ポインタの示す値を得ることはできない(バッファサイズは0のため).

バージョン

SDL 2.0.10以降

関連項目(関数)

SDL_SIMDAlignment
SDL_SIMDRealloc
SDL_SIMDFree

SDL Wikiへのリンク

SDL_SIMDAlloc - SDL Wiki