home bbs files messages ]

Just a sample of the Echomail archive

COMPLANC:

<< oldest | < older | list | newer > | newest >> ]

 Message 242,470 of 243,097 
 Bonita Montero to All 
 Re: is_binary_file() 
 17 Dec 25 07:57:42 
 
From: Bonita.Montero@gmail.com

Am 17.12.2025 um 04:19 schrieb Michael Sanders:
> On Tue, 16 Dec 2025 17:24:49 +0100, Bonita Montero wrote:
>
>> How long have you been dealing with that ? 10 days ?
>> I finished the AVX-512 version in C++ in two hours.
> As long as I want to.
>
Here, about 11 times faster than your solution:

bool asciiAllowedAvx( string_view buf, double prop )
{
     char const
         *pBegin = buf.data(),
         *pEnd = pBegin + buf.size();
     size_t
         uBegin = (size_t)pBegin,
         uEnd = (size_t)pEnd,
         head = uBegin & 63,
         tail = uEnd & 63;
     __m512i
         *p64Begin = (__m512i *)(uBegin - head),
         *p64End = (__m512i *)((uEnd + 63) & -64);
     span<__m512i const> range( p64Begin, p64End );
     __m512i const
         prnt = _mm512_set1_epi8( (char)0x20 ),
         cr = _mm512_set1_epi8( (char)'\r' ),
         lf = _mm512_set1_epi8( (char)'\n' ),
         tab = _mm512_set1_epi8( (char)'\t' );
     uint64_t mask = (uint64_t)-1ll << head;
     ptrdiff_t nFits = 0;
     auto cur = range.begin(), end = range.end();
     auto doChunk = [&]()
     {
         __m512i chunk = _mm512_loadu_epi8( (void *)to_address( cur ) );
         uint64_t
             prntMask = _mm512_cmpge_epu8_mask( chunk, prnt ),
             crMask = _mm512_cmpeq_epi8_mask( chunk, cr ),
             lfMask = _mm512_cmpeq_epi8_mask( chunk, lf ),
             tabMask = _mm512_cmpeq_epi8_mask( chunk, tab );
         nFits += popcount( (prntMask | crMask | lfMask | tabMask) & mask
);
     };
     for( ; cur != end - (bool)tail; ++cur, mask = -1ll )
         doChunk();
     if( tail )
     {
         mask &= ~((uint64_t)-1ll << tail);
         doChunk();
     }
     return 1.0 - (double)nFits / (double)(ptrdiff_t)buf.size() > prop;
}

--- SoupGate-Win32 v1.05
 * Origin: you cannot sedate... all the things you hate (1:229/2)

<< oldest | < older | list | newer > | newest >> ]


(c) 1994,  bbs@darkrealms.ca