the absolute bleed edge fastest way to strip out bits from 4 bytes of hex

조회 수: 1(최근 30일)
Robert Scott
Robert Scott 2021년 8월 1일
편집: DGM 2021년 8월 2일
I am looking for the absolute top dog in speed to do the following
If i have an 8 byte char for example
test = {a a a a a a a a }
I need to be able to break it down into two pieces
x bits to y bits
and
m bits to n bits
So far i have done a speed test on an old process like this
answer = dec2bin(hex2dec(strcat(word_1,word_2)));
answer = answer(1:22);
answer = bin2dec(answer);
Then i ran a speed test on a newer function
hex2binaryvector
Then using the bi2de function that i beleive is newer
Im seeing a 10X slow down in the new function
Can anyone confirm?
  댓글 수: 1
DGM
DGM 2021년 8월 1일
Assuming these are character vectors, you can get a chunk of speed by just using
[word_1,word_2]
instead of strcat().
Given that dec2bin() and hex2dec() seem to be doing the math in m-code, I imagine you can roll a pedestrian hex2bin() function that's faster than the two together, but maybe not by much.

댓글을 달려면 로그인하십시오.

채택된 답변

DGM
DGM 2021년 8월 1일
편집: DGM 2021년 8월 2일
There's this.
word_1 = 'DEAD';
word_2 = 'BEEF';
answer = hex2bin([word_1,word_2]);
answer = bin2dec(answer(1:22));
Using the simplified concatenation and the combined hex2bin conversion reduces execution time by about 70% for me. There are probably faster ways yet, but eh. I'll leave that to others ... probably.
Attached is a modified version of this FEX submission:
I thought it'd be quick enough to just grab it, but I ended up changing it to output character vectors and be case-insensitive. It's not really any faster.
If you use the attached version of bin2dec(), you can squeeze a bit more out. About the fastest I've managed is an 80% reduction in time. EDIT: updated to fix a dumb error! I guess I oversimplified a bit too much and didn't catch it.
  댓글 수: 1
Robert Scott
Robert Scott 2021년 8월 2일
Thanks!
So your telling me your version of hex2bin is faster then the matlab one?
Im going to give that a speed test myself

댓글을 달려면 로그인하십시오.

추가 답변(1개)

Walter Roberson
Walter Roberson 2021년 8월 1일
The absolute top dog in speed is to have (y-x+n-m+2) different 8 dimensional lookup tables, each of which is (102 x 102 x 102 x 102 x 102 x 102 x 102 x 102) entries and each of which returns one bit. If you can promise upper case instead of lower case then the dimensions can be 70 instead of 102.
The memory requirements can be drastically reduced by very simple calculations, but that will not give you absolute top dog performance.
This approach requires more memory than any publicly known x64 implementation can use (the public x64 design only defines 48 address lines), but so what? It is faster than the alternatives.
When you ask for absolute top dog, you are asking for all of the safety measures to be taken out, including safety precautions against it requiring more hardware than you can possibly afford.
  댓글 수: 1
Robert Scott
Robert Scott 2021년 8월 1일
really intertesting results Walter
I just got rid of all my hextobinaryvector calls and just went back to the code that is actually 5 lines longer and got a 10X speedup
Apparently, hextobinaryvector has to much overhead
answer = dec2bin(hex2dec(strcat(word_1,word_2)));
answer = answer(1:22);
answer = bin2dec(answer);
This worked much much faster

댓글을 달려면 로그인하십시오.

제품


릴리스

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by