0

次のコードがあるとします。

float *data = (float*)_mm_malloc(N*sizeof(float), 16);//allocate 16-byte aligned array of N elements
const int loop_bound1 = .....;//some value
const int loop_step  = .....;//some value
const int loop_bound2 = ....;//some value
for(auto i=0; i<loop_bound; i+=loop_step)
{
    auto inter_data1 = data + i;//inter_data1 may be not aligned
    for(int j=0; j<loop_bound2; ++j)
    {
        auto inter_data2 = inter_data1 + j;//inter_data2 also may be not aligned
        __m128 a = _mm_loadu_ps(inter_data2);//it's ok, but I want use _mm_load_ps instead
    }
}

_mm_loadu_psの代わりに_mm_load_psを呼び出すには、 inter_data1inter_data2を16 バイト アラインしておく必要があります。これらのポインターを整列させるための最良の (安全で最小限のオーバーヘッドで) 方法は何ですか? std::alignを検討しますが、それが正しい選択かどうかはわかりません。

4

2 に答える 2

1

_aligned_mallocWindows またはLinux でメモリを割り当てるとmemalign、ポインターがスタック上で整列されます。または、メモリをヒープに配置する場合は、#pragma pack.

于 2013-07-27T01:07:13.340 に答える