<bgdev />free

Вход

Задача НЕ за интервю
7

0 1 2 3 4 ....14 15 16 17 18 ....31 32 33 34 35 36
#14040 (ツ) BIGBUGEX
Създадено на 06.10.2020, видяно: 1648 пъти.

Old:

0: Dist: 4, Time: 288 ms
1: Dist: 4, Time: 270 ms
2: Dist: 4, Time: 280 ms
3: Dist: 4, Time: 9 ms
4: Dist: 40, Time: 285 ms
5: Dist: 4, Time: 157 ms
6: Dist: 9, Time: 243 ms
7: Dist: 6, Time: 289 ms
8: Dist: 4, Time: 88 ms
9: Dist: 6, Time: 258 ms

New:

0: Dist: 4, Time: 86 ms
1: Dist: 4, Time: 80 ms
2: Dist: 4, Time: 83 ms
3: Dist: 4, Time: 3 ms
4: Dist: 40, Time: 84 ms
5: Dist: 4, Time: 47 ms
6: Dist: 9, Time: 72 ms
7: Dist: 6, Time: 86 ms
8: Dist: 4, Time: 26 ms
9: Dist: 6, Time: 77 ms
#14041 (ツ) BIGBUGEX
Последно редактирано на 06.10.2020 от BIGBUGEX, видяно: 1643 пъти.
johnfound
BIGBUGEX

Windows има по-добрата конвенция на извикване в 64 битов режим.

М-м-м-м, много спорно. Още повече пък относно точно тази програма. Конвенциите за викане касаят само системните функции, които тука не играят никаква роля. А в твоя код можеш да си правиш каквото си искаш на която и да е операционна система.

Не е съвсем така. В 64 битов режим стека винаги трябва да е подравнен до 16 при извикване на чуждо апи. И има само една конвенция на извикване за операционната система. Всички апита я спазват.

#14042 (ツ) johnfound
Създадено на 06.10.2020, видяно: 1641 пъти.
BIGBUGEX

Old:

0: Dist: 4, Time: 288 ms
1: Dist: 4, Time: 270 ms
2: Dist: 4, Time: 280 ms
3: Dist: 4, Time: 9 ms
4: Dist: 40, Time: 285 ms
5: Dist: 4, Time: 157 ms
6: Dist: 9, Time: 243 ms
7: Dist: 6, Time: 289 ms
8: Dist: 4, Time: 88 ms
9: Dist: 6, Time: 258 ms

New:

0: Dist: 4, Time: 86 ms
1: Dist: 4, Time: 80 ms
2: Dist: 4, Time: 83 ms
3: Dist: 4, Time: 3 ms
4: Dist: 40, Time: 84 ms
5: Dist: 4, Time: 47 ms
6: Dist: 9, Time: 72 ms
7: Dist: 6, Time: 86 ms
8: Dist: 4, Time: 26 ms
9: Dist: 6, Time: 77 ms

Да-а-а, интересно – същият ефект. А са променени само 3 инструкции и премахнато едно четене от паметта, което по принцип би трябвало да е кеширано (и явно на Интелските процесори е):

 .loop1:
         mov       edx, [.len16]

         movdqa    xmm3, [ebx + edx]
         movdqa    xmm2, xmm3
+        movdqa    xmm5, xmm3
         paddb     xmm3, xmm1
         movdqa    [ebx + edx], xmm3

         mov       al, [edi]
         lea       edi, [edi+1]

         mov       ah, al
         movd      xmm0, eax
         punpcklbw xmm0, xmm0
         punpcklbw xmm0, xmm0
         punpcklbw xmm0, xmm0

         mov       esi, [.pString16]

 .loop2:
         sub       edx, 16

         movdqa    xmm3, [esi]
.................................................................
         lea       esi, [esi+16]

         pcmpeqb   xmm3, xmm0
         paddb     xmm2, xmm3


         movdqa    xmm4, [ebx + edx]
-        pminub    xmm2, [ebx + edx + 16]
+        pminub    xmm2, xmm5
         pminub    xmm2, xmm4

         paddb     xmm2, xmm1

         movdqa    [ebx + edx], xmm2
+        movdqa    xmm5, xmm2
         movdqa    xmm2, xmm4

         jnz       .loop2
#14043 (ツ) synergie
Последно редактирано на 06.10.2020 от synergie, видяно: 1625 пъти.

Жонка на всички е ясно че запуши устата на Пипона доста отдавна. Можеш да му спестиш дийп троут-а които организираш в момента.

#14044 (ツ) johnfound
Създадено на 06.10.2020, видяно: 1621 пъти.
synergie

Жонка на всички е ясно че запуши устата на Пипона доста отдавна можеш да му спестиш дийп троут-а които организираш в момента.

Е-е-е, на мене темата просто ми стана интересна...

Левенщейн разстоянията и родствените diff алгоритми определено смятам да използвам (включително в AsmBB).

А с MMX/SSE/AVX разширенията банално ми липсва практика, така че всяко упражнение е от полза.

#14045 (ツ) |
Последно редактирано на 06.10.2020 от |, видяно: 1604 пъти.
synergie

Жонка на всички е ясно че запуши устата на Пипона доста отдавна. Можеш да му спестиш дийп троут-а които организираш в момента.

Я, клюкарката пак се опита да изквичи нещо. :) Останалите се забавляваме. :)

#14066 (ツ) synergie
Създадено на 06.10.2020, видяно: 1584 пъти.
|

Я, клюкарката пак се опита да изквичи нещо. :) Останалите се забавляваме. :)

Единствено курвите и научните сътрудници дървени философи могат да се забавлят като рандъм хора по форуми ги дийп троутват по материя дето уж им е специалността :)

#14068 (ツ) |
Създадено на 06.10.2020, видяно: 1575 пъти.
synergie
|

Я, клюкарката пак се опита да изквичи нещо. :) Останалите се забавляваме. :)

Единствено курвите и научните сътрудници дървени философи могат да се забавлят като рандъм хора по форуми ги дийп троутват по материя дето уж им е специалността :)

Я, клюкарката пак се опита да изквичи. :)

#14069 (ツ) synergie
Последно редактирано на 06.10.2020 от synergie, видяно: 1571 пъти.
|
synergie
|

Я, клюкарката пак се опита да изквичи нещо. :) Останалите се забавляваме. :)

Единствено курвите и научните сътрудници дървени философи могат да се забавлят като рандъм хора по форуми ги дийп троутват по материя дето уж им е специалността :)

Я, клюкарката пак се опита да изквичи. :)

Проблемът на това че си некомпетентен, е че губиш 2 седмици от живота на някой който чака програмата дето си написал да приключи :)

#14071 (ツ) |
Създадено на 06.10.2020, видяно: 1564 пъти.
synergie
|
synergie
|

Я, клюкарката пак се опита да изквичи нещо. :) Останалите се забавляваме. :)

Единствено курвите и научните сътрудници дървени философи могат да се забавлят като рандъм хора по форуми ги дийп троутват по материя дето уж им е специалността :)

Я, клюкарката пак се опита да изквичи. :)

Проблемът на това че си некомпетентен, е че губиш 2 седмици от живота на някой който чака програмата дето си написал да приключи :)

Я, клюкарката пак се опита да изквичи и измучи едновременно. Прозвуча като пръдня. А може би и беше. :)

#14072 (ツ) synergie
Последно редактирано на 06.10.2020 от synergie, видяно: 1558 пъти.
|

Я, клюкарката пак се опита да изквичи и измучи едновременно. Прозвуча като пръдня. А може би и беше. :)

Тука масово установихме, че си най-некадърния научен сътрудник в околията. С тоя детски хумур който вкарваш в отговорите си, наистина ли искаш да си развалиш и репутацията си на добрия и забавен клоун на форума?

#14073 (ツ) |
Създадено на 06.10.2020, видяно: 1556 пъти.
synergie
|

Я, клюкарката пак се опита да изквичи и измучи едновременно. Прозвуча като пръдня. А може би и беше. :)

Тука масово установихме, че си най-некадърния научен сътрудник в околията. С тоя детски хумур който вкарваш в отговорите си, наистина ли искаш да си развалиш и репутацията на добрия и забавен клоун на форума?

Я, форумната клюкарка пак изквича. :)

#14074 (ツ) Евлампи
Създадено на 06.10.2020, видяно: 1552 пъти.
|

Я, форумната клюкарка пак изквича. :)

Пайп, вържи се към некой изотоп поне да менкаш рандом отчаяните еднообразни лафчета като Синерги ти плющи чимберите

#14085 (ツ) |
Създадено на 06.10.2020, видяно: 1535 пъти.
Евлампи
|

Я, форумната клюкарка пак изквича. :)

Пайп, вържи се към некой изотоп поне да менкаш рандом отчаяните еднообразни лафчета като Синерги ти плющи чимберите

Ох, горкото... И другия идиот, който не е писал абсолютно нищо по темата реши да се изходи в нея. :)

#14088 (ツ) Евлампи
Създадено на 06.10.2020, видяно: 1532 пъти.
|

Ох, горкото... И другия идиот, който не е писал абсолютно нищо по темата реши да се изходи в нея. :)

Go, go, go :)

#14089 (ツ) |
Създадено на 06.10.2020, видяно: 1530 пъти.
Евлампи
|

Ох, горкото... И другия идиот, който не е писал абсолютно нищо по темата реши да се изходи в нея. :)

Go, go, go :)

I am using Go.

#14113 (ツ) BIGBUGEX
Създадено на 07.10.2020, видяно: 1510 пъти.

johnfound, би ли дал адреса на сорсовете си / игралната ти площадка. Май го няма в темата. Иначе, биеш авх2 решението с 350мс общо на моята машина.

#14114 (ツ) johnfound
Последно редактирано на 07.10.2020 от johnfound, видяно: 1505 пъти.
BIGBUGEX

johnfound, би ли дал адреса на сорсовете си / игралната ти площадка. Май го няма в темата. Иначе, биеш авх2 решението с 350мс общо на моята машина.

Давах го адреса няколко пъти бе. Но то и темата стана голяма де. Ето го пак: https://asm32.info/fossil/BioData

Ето в този пост съм написал и как се сваля и компилира.

В репозиторито има 2 бранча - "trunk" за класическото решение и "MMX" за решенията със SIMD.

А иначе, AVX2 решението би трябвало да е по-бързо и значително - все пак 256 бита срещу 128.

#14125 (ツ) BIGBUGEX
Последно редактирано на 08.10.2020 от BIGBUGEX, видяно: 1488 пъти.
johnfound

А иначе, AVX2 решението би трябвало да е по-бързо и значително - все пак 256 бита срещу 128.

Щото режеш еднаквите части от началото. И аз трябва да го пробвам това. Освен това аз групирам низовете динамично. Което не е голяма драма. Иначе, ти препоръчвам да обработваш всички от група Б с едно обхождане на група А. Няма да можеш да извеждаш непосредствено времето за всеки низ но ще ти падне общото време на обработка с около секунда.

edit: С последната модификация 46мс средно на низ. Общо 4642мс за авх2 срещу 5717мс за ссе на johnfound.

Attached files:
FileSizeUploadedDownloadsMD5 hash
bench.7z3208452 bytes08.10.20201195a01d372443d93904ed5b7b96864dfa3
#14268 (ツ) johnfound
Създадено на 08.10.2020, видяно: 1444 пъти.
BIGBUGEX
johnfound

А иначе, AVX2 решението би трябвало да е по-бързо и значително - все пак 256 бита срещу 128.

Щото режеш еднаквите части от началото. И аз трябва да го пробвам това. Освен това аз групирам низовете динамично. Което не е голяма драма. Иначе, ти препоръчвам да обработваш всички от група Б с едно обхождане на група А. Няма да можеш да извеждаш непосредствено времето за всеки низ но ще ти падне общото време на обработка с около секунда.

edit: С последната модификация 46мс средно на низ. Общо 4642мс за авх2 срещу 5717мс за ссе на johnfound.

Това повече прилича на истина. Жалко, че нямам процесор с AVX2 да го тествам. Следва решение с AVX-512. rofl

Трябва да се отбележи обаче, че колкото повече стрингове се обработват едновременно, толкова е по-къс става префикса, който може да не се обработва. Може би затова и времето не намалява двойно при двойно увеличаване на разрядноста.

0 1 2 3 4 ....14 15 16 17 18 ....31 32 33 34 35 36

Задача НЕ за интервю
7

AsmBB v3.0 (check-in: a316dab8b98d07d9); SQLite v3.42.0 (check-in: 831d0fb2836b71c9);
©2016..2023 John Found; Licensed under EUPL. Powered by Assembly language Created with Fresh IDE