saruman
Последно редактирано на 13.12.2020 от saruman, видяно: 1913 пъти. #21575
Компилатора на Ръст е смотан?
|
Създадено на 13.12.2020, видяно: 1898 пъти. #21577
По-малко сравнения? По-малък шанс за branch misprediction?
П.П. Двете програми не са еквивалентни.
saruman
Последно редактирано на 13.12.2020 от saruman, видяно: 1891 пъти. #21578
Аз на пръв поглед без да бенчмарквам бих предположил,че трябва да са точно обратните резултати,а именно там където се ползва [] оператора да е по-бавно,въпреки,че паметта е алокирана на едно място
|
Създадено на 13.12.2020, видяно: 1876 пъти. #21579
Това всъщност показва, че компилатора на Ръст е доста добър.
saruman
Създадено на 13.12.2020, видяно: 1868 пъти. #21580
По-малко сравнения? По-малък шанс за branch misprediction?
П.П. Двете програми не са еквивалентни.
Аз на пръв поглед без да бенчмарквам бих предположил,че трябва да са точно обратните резултати,а именно там където се ползва [] оператора да е по-бавно,въпреки,че паметта е алокирана на едно място
Това всъщност показва, че компилатора на Ръст е доста добър.
Стига ве,и само заради branch prediction-а ли да прави такива разлики,забележи че долу ползва даже <= оператор,ако ползва само < още би трябвало да падне времето
|
Създадено на 13.12.2020, видяно: 1860 пъти. #21581
По-малко сравнения? По-малък шанс за branch misprediction?
П.П. Двете програми не са еквивалентни.
Аз на пръв поглед без да бенчмарквам бих предположил,че трябва да са точно обратните резултати,а именно там където се ползва [] оператора да е по-бавно,въпреки,че паметта е алокирана на едно място
Това всъщност показва, че компилатора на Ръст е доста добър.
Стига ве,и само заради branch prediction-а ли да прави такива разлики,забележи че долу ползва даже <= оператор,ако ползва само < още би трябвало да падне времето
Какво значение има дали ще е <= или <?
saruman
Създадено на 13.12.2020, видяно: 1858 пъти. #21582
Е как какво,първото ти прави < и след това ==,това са две операции,а второто само <
|
Създадено на 13.12.2020, видяно: 1854 пъти. #21583
Е как какво,първото ти прави < и след това ==,това са две операции,а второто само <
Струва ми се, че Иванушка Пъдаря ще ти се кара, че не знаеш асемблерските инструкции. :)
saruman
Последно редактирано на 13.12.2020 от saruman, видяно: 1849 пъти. #21584
Е как какво,първото ти прави < и след това ==,това са две операции,а второто само <
Струва ми се, че Иванушка Пъдаря ще ти се кара, че не знаеш асемблерските инструкции. :)
По-важното е,че ако я нямаше тая тема,щях да си продължавам да си живея в заблуда,че едното е по-бързо от другото :(
ДонРеба
Създадено на 13.12.2020, видяно: 1842 пъти. #21586
Стига ве,и само заради branch prediction-а ли да прави такива разлики,забележи че долу ползва даже <= оператор,ако ползва само < още би трябвало да падне времето
да, само заради него е. обаче и на правец 16 дето няма конвеери мисля че "аритметичния" вариант ще е по-бърз, но няма да е с толкова много. ифа дори на платформа без конвеери монвеери е няколко операции и замяната му с аритметична операция (индексиране) още от фортранските времена си е била далавера. компилаторите от много отдавна като компилират switch гледат дали клоновете са последователни числа, и ако да компилират аритметично, без ифове.
|
Последно редактирано на 13.12.2020 от |, видяно: 1835 пъти. #21590
На мен това diff-1 изобщо не ми харесва помеже може да доведе до array under/overflow. Ако разбирач правилно, че usize e unsigned, аз бих го написал като ... mut prev = 1 извън цикъла, и в цикъла prev = i + 1, индекса diff
П.П. всъщност най-добре е просто масива да се направи с 4 елемента.
ДонРеба
Създадено на 13.12.2020, видяно: 1832 пъти. #21591
На мен това diff-1 изобщо не ми харесва помеже може да доведе до array under/overflow.
ами не може, ако можеше ръста няма да го компилира. и да, точно защото е без знак, ако е негативно ще стане просто голямо число.
|
Създадено на 13.12.2020, видяно: 1830 пъти. #21592
На мен това diff-1 изобщо не ми харесва помеже може да доведе до array under/overflow.
ами не може, ако можеше ръста няма да го компилира. и да, точно защото е без знак, ако е негативно ще стане просто голямо число.
затова съм написал under/overflow.
ДонРеба
Създадено на 13.12.2020, видяно: 1828 пъти. #21593
деа, май си прав, какво става при нула? защо ръста го позволява?
|
Създадено на 13.12.2020, видяно: 1788 пъти. #21614
деа, май си прав, какво става при нула? защо ръста го позволява?
Нямам идея, не трябва ли да го позволява?
ДонРеба
Създадено на 13.12.2020, видяно: 1772 пъти. #21631
не трябва, идеята е че ръста по време на компилация трябва да го види като грешка, но не го вижда, а и програмата не гърми, така че нещо недоглеждам
|
Последно редактирано на 13.12.2020 от |, видяно: 1770 пъти. #21632
не трябва, идеята е че ръста по време на компилация трябва да го види като грешка, но не го вижда, а и програмата не гърми, така че нещо недоглеждам
Хмм, толкова ли му е добър статичния анализ? Чувал съм, че Ръст се опитва да осигури някаква коректност at compile time, но е ясно и че не всичко може да се направи тогава.
Това означава ли, че всеки достъп до елемент на масив трябва да е guard-нат от екплицитна проверка дали индекса е в размерите на масива?
Масивите имат bound checks. Ако индекса е извън границите на масива ще се паникьоса и умре в рънтайм. Обаче ако LLVM се усети, че индекса винаги ще е в границата на масива, то тогава ще махне bounds check-a като dead code.
Отделно debug билдовете се инструментират от компилатора с проверки за over/under flow. Което ти позволява да хванеш разни тъпи грешки. Обаче в release mode ги няма тези проверки, защото доста забавят.