4

shortVisual Studio 2012(x64)がからへの変換をベクトル化したくない理由を理解しようとしていfloatます。誰かが理由や回避策を持っていますか?

//unsigned short* __restrict A,B,C,D    
for (int j = 0; j < H*W;j++) 
{
    float Gs = D[j]-B[j];
    float Gc = A[j]-C[j];
    in[j]=atan2f(Gs,Gc);
}

info C5002:理由「1101」のためにループがベクトル化されていません

解像度

ショートパンツを使用し、ベクトル化しないランタイムは約800ms

すべてのintへのランタイム変換と自動ベクトル化は約140ms(!!!)

4

1 に答える 1

2

このページから、「ループにベクトル化できない変換操作が含まれている(暗黙的である可能性があります)」ように見えます。float最初に(など)と同じ幅のタイプに変換してみましたintか?

より具体的な理由については、こちらをご覧ください。明らかに、SSEには、shortのベクトルで構成されるSSEレジスタをfloatのベクトルに変換する直接的な方法はありませんが、32ビット整数をfloatに変換する命令があります。

于 2013-03-22T04:12:12.137 に答える