saruman
Последно редактирано на 13.12.2020 от saruman, видяно: 1914 пъти. #21575
Компилатора на Ръст е смотан?
|
Създадено на 13.12.2020, видяно: 1899 пъти. #21577
По-малко сравнения? По-малък шанс за branch misprediction?
П.П. Двете програми не са еквивалентни.
saruman
Последно редактирано на 13.12.2020 от saruman, видяно: 1892 пъти. #21578
Аз на пръв поглед без да бенчмарквам бих предположил,че трябва да са точно обратните резултати,а именно там където се ползва [] оператора да е по-бавно,въпреки,че паметта е алокирана на едно място
|
Създадено на 13.12.2020, видяно: 1877 пъти. #21579
Това всъщност показва, че компилатора на Ръст е доста добър.
saruman
Създадено на 13.12.2020, видяно: 1869 пъти. #21580
По-малко сравнения? По-малък шанс за branch misprediction?
П.П. Двете програми не са еквивалентни.
Аз на пръв поглед без да бенчмарквам бих предположил,че трябва да са точно обратните резултати,а именно там където се ползва [] оператора да е по-бавно,въпреки,че паметта е алокирана на едно място
Това всъщност показва, че компилатора на Ръст е доста добър.
Стига ве,и само заради branch prediction-а ли да прави такива разлики,забележи че долу ползва даже <= оператор,ако ползва само < още би трябвало да падне времето
|
Създадено на 13.12.2020, видяно: 1861 пъти. #21581
По-малко сравнения? По-малък шанс за branch misprediction?
П.П. Двете програми не са еквивалентни.
Аз на пръв поглед без да бенчмарквам бих предположил,че трябва да са точно обратните резултати,а именно там където се ползва [] оператора да е по-бавно,въпреки,че паметта е алокирана на едно място
Това всъщност показва, че компилатора на Ръст е доста добър.
Стига ве,и само заради branch prediction-а ли да прави такива разлики,забележи че долу ползва даже <= оператор,ако ползва само < още би трябвало да падне времето
Какво значение има дали ще е <= или <?
saruman
Създадено на 13.12.2020, видяно: 1859 пъти. #21582
Е как какво,първото ти прави < и след това ==,това са две операции,а второто само <
|
Създадено на 13.12.2020, видяно: 1855 пъти. #21583
Е как какво,първото ти прави < и след това ==,това са две операции,а второто само <
Струва ми се, че Иванушка Пъдаря ще ти се кара, че не знаеш асемблерските инструкции. :)
saruman
Последно редактирано на 13.12.2020 от saruman, видяно: 1850 пъти. #21584
Е как какво,първото ти прави < и след това ==,това са две операции,а второто само <
Струва ми се, че Иванушка Пъдаря ще ти се кара, че не знаеш асемблерските инструкции. :)
По-важното е,че ако я нямаше тая тема,щях да си продължавам да си живея в заблуда,че едното е по-бързо от другото :(
ДонРеба
Създадено на 13.12.2020, видяно: 1843 пъти. #21586
Стига ве,и само заради branch prediction-а ли да прави такива разлики,забележи че долу ползва даже <= оператор,ако ползва само < още би трябвало да падне времето
да, само заради него е. обаче и на правец 16 дето няма конвеери мисля че "аритметичния" вариант ще е по-бърз, но няма да е с толкова много. ифа дори на платформа без конвеери монвеери е няколко операции и замяната му с аритметична операция (индексиране) още от фортранските времена си е била далавера. компилаторите от много отдавна като компилират switch гледат дали клоновете са последователни числа, и ако да компилират аритметично, без ифове.
|
Последно редактирано на 13.12.2020 от |, видяно: 1836 пъти. #21590
На мен това diff-1 изобщо не ми харесва помеже може да доведе до array under/overflow. Ако разбирач правилно, че usize e unsigned, аз бих го написал като ... mut prev = 1 извън цикъла, и в цикъла prev = i + 1, индекса diff
П.П. всъщност най-добре е просто масива да се направи с 4 елемента.
ДонРеба
Създадено на 13.12.2020, видяно: 1833 пъти. #21591
На мен това diff-1 изобщо не ми харесва помеже може да доведе до array under/overflow.
ами не може, ако можеше ръста няма да го компилира. и да, точно защото е без знак, ако е негативно ще стане просто голямо число.
|
Създадено на 13.12.2020, видяно: 1831 пъти. #21592
На мен това diff-1 изобщо не ми харесва помеже може да доведе до array under/overflow.
ами не може, ако можеше ръста няма да го компилира. и да, точно защото е без знак, ако е негативно ще стане просто голямо число.
затова съм написал under/overflow.
ДонРеба
Създадено на 13.12.2020, видяно: 1829 пъти. #21593
деа, май си прав, какво става при нула? защо ръста го позволява?
|
Създадено на 13.12.2020, видяно: 1789 пъти. #21614
деа, май си прав, какво става при нула? защо ръста го позволява?
Нямам идея, не трябва ли да го позволява?
ДонРеба
Създадено на 13.12.2020, видяно: 1773 пъти. #21631
не трябва, идеята е че ръста по време на компилация трябва да го види като грешка, но не го вижда, а и програмата не гърми, така че нещо недоглеждам
|
Последно редактирано на 13.12.2020 от |, видяно: 1771 пъти. #21632
не трябва, идеята е че ръста по време на компилация трябва да го види като грешка, но не го вижда, а и програмата не гърми, така че нещо недоглеждам
Хмм, толкова ли му е добър статичния анализ? Чувал съм, че Ръст се опитва да осигури някаква коректност at compile time, но е ясно и че не всичко може да се направи тогава.
Това означава ли, че всеки достъп до елемент на масив трябва да е guard-нат от екплицитна проверка дали индекса е в размерите на масива?
Масивите имат bound checks. Ако индекса е извън границите на масива ще се паникьоса и умре в рънтайм. Обаче ако LLVM се усети, че индекса винаги ще е в границата на масива, то тогава ще махне bounds check-a като dead code.
Отделно debug билдовете се инструментират от компилатора с проверки за over/under flow. Което ти позволява да хванеш разни тъпи грешки. Обаче в release mode ги няма тези проверки, защото доста забавят.