で安定していない、誰もが彼ら速度は、私は時々、0.1ms、時には10ミリ秒を要したコードのパッチを持ってNDK
for (uint32_t k = 0; k < 32; k++, dataOff += stp)
{
uint8x16_t d0 = vld1q_u8((const uint8_t *)dataOff);
uint8x16_t d1 = vld1q_u8((const uint8_t *)(dataOff + 16));
maxValue = vmaxq_u8(maxValue, vmaxq_u8(d0, d1));
minValue = vminq_u8(minValue, vminq_u8(d0, d1));
}
maxValue1 = vmax_u8(vget_high_u8(maxValue), vget_low_u8(maxValue));
minValue1 = vmin_u8(vget_high_u8(minValue), vget_low_u8(minValue));
maxValue1 = vmax_u8(maxValue1, vext_u8(maxValue1, maxValue1, 4));
minValue1 = vmin_u8(minValue1, vext_u8(minValue1, minValue1, 4));
maxValue1 = vmax_u8(maxValue1, vext_u8(maxValue1, maxValue1, 2));
minValue1 = vmin_u8(minValue1, vext_u8(minValue1, minValue1, 2));
maxValueUchar = __max(vget_lane_u8(maxValue1, 0), vget_lane_u8(maxValue1, 1));
minValueUchar = __min(vget_lane_u8(minValue1, 0), vget_lane_u8(minValue1, 1));
if (maxValueUchar - minValueUchar < hist_th_grid)continue;//bright delta < 64, NO
else if (maxValueUchar < hist_th_grid)continue;//all dark, NO
dataOff = data;
uint16x8_t sum = vdupq_n_u16(0);
uint32x4_t sum32;
uint8_t sumInt;
for (uint32_t k = 0; k < 32; k++, dataOff += stp)
{
uint8x16_t d0 = vld1q_u8((const uint8_t *)dataOff);
uint8x16_t d1 = vld1q_u8((const uint8_t *)(dataOff + 16));
sum = vaddq_u16(sum, vaddq_u16(vpaddlq_u8(d0), vpaddlq_u8(d1)));
}
sum32 = vpaddlq_u16(sum);
sum32 = vaddq_u32(sum32, vextq_u32(sum32, sum32, 2));
sum32 = vaddq_u32(sum32, vextq_u32(sum32, sum32, 1));
sumInt = __min((vgetq_lane_u32(sum32, 0) >> 10) + brt_th_grid,255u);
のための私にいくつかアドバイスを提供できているとより多くの私は何このコードがsamsung galaxy s7よりもsamsung galaxy s7よりも安定していることがわかりました。なぜ誰に教えてもらえますか?
どのように測定していますか? –
私はopencvのcv :: getTickCount()を使用していますが、測定値は正しいと思います。 –
エラーが発生した場所でテストループを表示する必要があります。 – sh1