|
Последно редактирано на 30.09.2020 от |, видяно: 1775 пъти. #13241
Според мен изводите са: а) езика за програмиране няма особено значение; б) структурите данни ИМАТ значение; в) Ако имаш embarassingly parallel проблем, използвай GPU. :)
Все пак ще имплементирам чист брутфорс на Го да видя колко време ще отнеме (защото този, който използвам е твърде абстрактен).
|
Създадено на 30.09.2020, видяно: 1773 пъти. #13242
Аз ли? Apple clang version 12.0.0 (clang-1200.0.32.2)
Накрая да вземе някой да сумира резултатите че станах разноглед - платформи, машини, оптимизиран/неоптимизиран и т.н.
Някой да напише с думи прости - МРЕТЕ СЕЛЯНИ ПРОСТИ, ASM РУЛИРА! или С-то си е С, дядките с асемблера в recycle-bin-а!
Според мен изводите са: а) езика за програмиране няма особено значение; б) структурите данни ИМАТ значение; в) Ако имаш embarassingly parallel проблем, използвай GPU. :)
Все пак ще имплементирам чист брутфорс на Го да видя колко време ще отнеме (защото този, който използвам е твърде абстрактен).
Мерси, ще ми е интересно да видя крайните резултати.
johnfound
Създадено на 30.09.2020, видяно: 1763 пъти. #13245
За ред с номер 3 пак имаш невероятно малко време - 30 пъти по-бързо от ред 0.
Ред 0 е един от най-тежките за смятане. Особеност на подреждането на данните в Dataset.csv. При друго подреждане и времената са други.
По-надолу в редицата има и други подобни случаи, даже и по-малки времена от ред 3. Но резултата е правилен. Сигурно във програмите на HLL нещо не правите както трябва.
|
Последно редактирано на 30.09.2020 от |, видяно: 1752 пъти. #13250
Мерси, ще ми е интересно да видя крайните резултати.
Редактирах мнението с резултатите и го добавих. Надявам се да не съм направил някоя идиотщина, защото още не съм си изпил сутрeшното кафе. :)
Thanks, ще пробвам. Но ще трябва да ги пусна всичките на друга машина, защото не поддържаш macOS. :)
|
Последно редактирано на 30.09.2020 от |, видяно: 1688 пъти. #13287
В кода, proc Levenstein е предишната имплементация с MMX и опит за паралелна обработка (не много ефективна при Левенщейн), а сегашният фаворит е proc Levenstein2.
Следващата стъпка ще е по аналогия - ако по-малкият код се изпълнява по-бързо, следва да се приеме, че и по-малките данни ще се изпълняват по-бързо. Следователно си струва да се опита с пакетирани данни - по 2 бита на символ. (Защото това са данни за ДНК, а при тях символите са само 4).
Според мен асемблера ще блести най-много ако използваш avx(512) и смяташ разстоянията на повече (64?) стринга едновременно.
Трябва в един момент най-после да науча OpenMP и да видя колко добре ще се справи с векторизиране на С код.
|
Създадено на 30.09.2020, видяно: 1678 пъти. #13291
Executable което съм свалил от форум в Интернет няма как да пусна. Това ми е принцип и няма значение дали вярвам на пусналия го или не.
fossil clone https://fresh.flatassembler.net/fossil/repo/fresh MY_REPOS/fresh.fossil
mkdir /WORK/FreshLibDev
cd /WORK/FreshLibDev
fossil open MY_REPOS/fresh.fossil FreshLibDev
После:
fossil clone https://asm32.info/fossil/BioData MY_REPOS/BioData.fossil
mkdir /WORK/AsmLeven
cd /WORK/AsmLeven
fossil open MY_REPOS/BioData.fossil
После сетваш променливите:
TargetOS=Linux # Win32 - за Windows версията.
lib=/WORK/FreshLibDev/freshlib
После компилираш така:
cd /WORK/AsmLeven
fasm -m 300000 ./Levenshtein.asm
Трябва да се появи или Linux или Windоws изпълним файл, в зависимост от променливата TargetOS.
~/tmp/work/AsmLeven$ fasm -m 300000 ./Levenshtein.asm
flat assembler version 1.73.22 (300000 kilobytes memory)
error: out of stack space.
|
Последно редактирано на 30.09.2020 от |, видяно: 1661 пъти. #13299
ръста е още на LLVM 10 :)
Това вероятно има значение. Ето резултатите компилирано с gcc и clang на машина с AMD EPYC 7742.
# GCC
0: 4 6962.730499 ms
1: 4 5661.941457 ms
2: 4 5847.619775 ms
3: 4 1527.305740 ms
4: 40 5923.693092 ms
5: 4 3892.952103 ms
6: 9 4221.266831 ms
7: 6 5516.135584 ms
8: 4 2777.935761 ms
9: 6 4492.822948 ms
10: 58 7285.167814 ms
#CLANG
0: 4 3644.049879 ms
1: 4 2519.609612 ms
2: 4 2596.144889 ms
3: 4 710.885451 ms
4: 40 2639.906794 ms
5: 4 2388.691301 ms
6: 9 2232.470938 ms
7: 6 2458.542905 ms
8: 4 1260.388534 ms
9: 6 2006.592793 ms
10: 58 3208.214118 ms
Къде е оня експерт по компилаторите bvbfan да обясни колко е добро GCC. :)
P.S. Хмм, при това e инсталиран clang 10. Сега ще компилирам най-новия. :)
johnfound
Създадено на 30.09.2020, видяно: 1659 пъти. #13300
Според мен асемблера ще блести най-много ако използваш avx(512) и смяташ разстоянията на повече (64?) стринга едновременно.
Това също го мислех, но искам първо да изследвам класическото решение за един стринг. Не за друго, но така или иначе отдавна се каня да пиша нещо като diff, но така и не бях се занимавал със подобни алгоритми.