私はいくつかのコードを改善しようとしましたが、できませんでしたのでここで助けを求めます。また、組み込み関数で試しましたが、組み込み関数を使用するにはGCCコンパイラを使用する必要があります。このコンパイラはLLVMよりも低速のコードをコンパイルしますが、すべてのコードが遅くなります。そのため、最適なオプションは直接asmを使用することです。 私は両方の機能を私が改善したい、ネオンのコードに入れて、コードはナンセンスの数字を返しています。 私は本当にこれで助けが必要です、正しい方向への任意のポイントは私をたくさん助けることができます。ネオンで改善するコード
私は改善したいコード:
inline unsigned des(const unsigned char* v0)
{
unsigned r;
r = v0[0]*v0[0];
r += v0[1]*v0[1];
r += v0[2]*v0[2];
r += v0[3]*v0[3];
r += v0[4]*v0[4];
r += v0[5]*v0[5];
r += v0[6]*v0[6];
r += v0[7]*v0[7];
return r;
}
inline unsigned suma(const unsigned char* v0)
{
unsigned r;
r = v0[0];
r += v0[1];
r += v0[2];
r += v0[3];
r += v0[4];
r += v0[5];
r += v0[6];
r += v0[7];
return r;
}
ネオンコードが
unsigned desneon(unsigned v0[8])
{
asm volatile (
"vld1.32 {d2- d5}, [%0] \n\t"
"vld1.32 {d6- d9}, [%0] \n\t"
"vmul.s32 d0, d2, d6 \n\t" //d0= d2*d6
"vmla.s32 d0, d3, d7 \n\t" //d0 = d0 + d3*d7
"vmla.s32 d0, d4, d8 \n\t" //d0 = d0 + d4*d8
"vmla.s32 d0, d5, d9 \n\t" //d0 = d0 + d5*d9
"vpadd.s32 d0, d0 \n\t" //d0 = d[0] + d[1]
:: "r"(v0) :
);
}
おかげでたくさん働いていません!
あなたは実際にそのメソッドから何も返されていません。 'd0'はあなたが望む結果で終わりますが、実際には返す必要があります。 – mattjgalloway
Accelerate.frameworkでvDSP関数を使用しないのはなぜですか? – Nyx0uf
vDSPは浮動小数点数を使用していますが、これによりアプリケーションが遅くなると思いますか? – Gustavo