__m256i *pIn0, *pIn1,*pOut;
__m256i a, b, thres = _mm256_set1_epi8(15); //Threshold value is set to 15
for (int i = 0; i < nHeight; i++)
{
pIn0 = (__m256i*)(pY1 + i * nStepSize); //buffer 1 having 8 bit unsigned integers
pIn1 = (__m256i*)(pY2 + i * nStepSize); //buffer 2 having 8 bit unsigned integers
pOut = (__m256i*)(pdiffAnd + i * nStepSize);
int wLimit = nWidth / 32;
for (int j = 0; j < wLimit; j++)
{
a = _mm256_lddqu_si256(pIn0++); //32 values of UINT8 type
b = _mm256_lddqu_si256(pIn1++); //32 values of UINT8 type
__m256i diff1 = _mm256_or_si256(_mm256_subs_epu8(a, b), _mm256_subs_epu8(b, a)); //taking their absolute difference
/* here _mm256_cmpgt_epi8 is comparing values assuming 8 bit Signed integers so values greater than 127 are not getting compared */
__m256i diff1Mask = _mm256_cmpgt_epi8(diff1, thres);
__m256i blend1 = _mm256_blendv_epi8(diff1, diff1Mask, diff1Mask);
_mm256_store_si256(pOut++, blend1);
}
}
Я думал, что можно найти все значения меньше 0 и выполнить побитовое ИЛИ с помощью diff1Mask, но также застрял на поиске значений меньше 0.
PS: Я новичок
Я хочу определить пороговые значения больше 15 с помощью инструкций AVX2, но он сравнивает только числа со знаком. [code] __m256i *pIn0, *pIn1,*pOut; __m256i a, b, thres = _mm256_set1_epi8(15); //Threshold value is set to 15
for (int i = 0; i < nHeight; i++) { pIn0 = (__m256i*)(pY1 + i * nStepSize); //buffer 1 having 8 bit unsigned integers pIn1 = (__m256i*)(pY2 + i * nStepSize); //buffer 2 having 8 bit unsigned integers pOut = (__m256i*)(pdiffAnd + i * nStepSize);
int wLimit = nWidth / 32; for (int j = 0; j < wLimit; j++) { a = _mm256_lddqu_si256(pIn0++); //32 values of UINT8 type b = _mm256_lddqu_si256(pIn1++); //32 values of UINT8 type
/* here _mm256_cmpgt_epi8 is comparing values assuming 8 bit Signed integers so values greater than 127 are not getting compared */ __m256i diff1Mask = _mm256_cmpgt_epi8(diff1, thres);
_mm256_store_si256(pOut++, blend1); } } [/code] Я думал, что можно найти все значения меньше 0 и выполнить побитовое ИЛИ с помощью diff1Mask, но также застрял на поиске значений меньше 0. PS: Я новичок
API для перетасовки поддерживает только байты и сбайты
//
// Summary:
// __m256i _mm256_shuffle_epi8 (__m256i a, __m256i b)
//
// VPSHUFB ymm, ymm, ymm/m256
//
// Parameters:
// value:
//
// mask:
public static Vector256 Shuffle(Vector256 value,...
Цель создания неопределенного поведения переполнения знакового целого числа — разрешить оптимизацию компилятора. Но разве это не в равной степени веский аргумент в пользу неопределенного поведения переполнения беззнакового целого числа?
Я хочу написать функцию одного аргумента с множественными перегрузками для разных типов целочисленных целого числа. Он хочет иметь возможность назвать его как с типами определяемого реализацией размера (подписанный char, shot, int, long, long), так...
Я хочу написать функцию одного аргумента с множественными перегрузками для разных типов целочисленных целого числа. Он хочет иметь возможность назвать его как с типами определяемого реализацией размера (подписанный char, shot, int, long, long), так...
Я хочу написать функцию одного аргумента с несколькими перегрузками для разных целочисленных типов. Он хочет иметь возможность вызывать его как с типами размера, определяемыми реализацией (подписанный char,shot, int, long, long long), так и с...