0

私は高パフォーマンスの C++ プログラムを実装しようとしています。各サイクルで 8 バイトを MMX レジスタにロードしてから処理しますが、もちろん、文字列の終わりに達したときに停止したいと考えています。

したがって、これが私が見つけた解決策です。各サイクルは8バイトをロードし、各バイトを\ 0と比較し、\ 0がある場合は予防策を講じます。これに関する問題は、データが 4 バイトで、最初のサイクルで 8 バイトをロードすると、別のアプリケーションのメモリ空間から 4 バイトをロードすることです。

これは私に問題を引き起こしますか?または、これらのバイトから単に「ノイズ」が発生しますが、\0 文字について学習したらすぐに処理するので、私にとってはまったく問題ありません。

4

2 に答える 2

0

SIMD 命令を使用してパフォーマンスを向上させる場合は、独自のメモリ割り当てを使用することも合理的です。あなたの場合、使用されるSIMD命令の幅の倍数であるメモリブロックを割り当てる必要があります.MMXの場合は8、SSEの場合は16、AVXの場合は32です。これを行うには、標準関数 _mm_malloc および _mm_free (Visual Studio の場合) または posix_memalign (GCC の場合) を使用することをお勧めします。

于 2015-11-25T12:35:24.717 に答える