ПредишенСледващото

TL; DR. плава. както се очаква, бързо се удвои. така че, ако се работи с големи обеми от данни, както и да имате достатъчно поплавък прецизност. След това изберете поплавъка. Ако точността поплавък не е достатъчно, тогава вашият избор е малък - двойно. Ако не разполагат с никакви претенции - да изберат нещо, ще видите разликата.

Аз, като член от него спор, реших да напиша отговор. За да се разбере какво ще бъде изпълнението, реших първо да се научат някои теория, за това, аз написах следния код:

За което ние имаме следната асемблер (ССЗ):

Това не е цялата продукция, но има достатъчно информация. Ние сме заинтересовани тук две инструкции: addss. addsd - всеки от тях SIMD инструкции за плувка (първата) и двойно. Първата мисъл - че е необходимо да се търсят за употреба, може да се запише, което е по-бързо? Това ръководство е. но бърза проверка показа, че отговорът стигна там - съдейки по ръчен Тези инструкции трябва да се изпълняват еднакво бързо. Добре. Нека оставим този начин и да се опита да събере предишният с AVX2 в студиото, получаваме следния ASM:

Код почти непроменени, с изключение, че операцията стана известно vaddsd и vaddss. Аз не се получи в инструкцията за тези команди, аз вярвам, че ситуацията там е подобна на тези, които видяхме по-рано.

Друг важен фактор, който може да плава да внесе е неговият по-малък ефект върху парични средства: като тя е два пъти по-малко от това, и на натоварването на кеш паметта ще бъде по-малък. По този начин, не разпъват и боядисване колкото повече се до следното заключение, което, като цяло, веднага ми идва на ум: плаваш по-бързо от двойно.

Остава да го тестват на практика, за това ние използваме следния код:

Разбира се, измерванията са доста прости, но мотивите е доста повърхностно (не се стремим да завършим проучването, в момента аз нямам време за него), но дори и това показва, че хората се твърди, че по подразбиране трябва да бъде избран два пъти, и че двойното бързо плувката - погрешно.

И още един тест, при който аз използвах intrinsiki да се изчисли сумата (не мога да ги използват по най-добрия начин, но това е като това е - от друга страна не знам):

С този код на същата машина, получавам увеличение от 2,3-2,5 пъти.

Добър отговор, но възниква въпросът. Например, защо ние се ръст само x1.2-1.3, имайки предвид, че за работата, можем да се справим 8 плувка и и 4 двойни. Идеята е разликата трябва да бъде x2, но ние не го виждам. Освен това, моя тест на C # (също съвсем проста), показва разлика в изпълнението на по-малко от 1%, но също и в полза на поплавъка. и сравняване на производителността с прости операции, т.е. Ние не използваме функциите, които връщат двойно. Тази разлика ме кара да мисля, че ССЗ не използва най-оптимални указанията за предоставяне на различни платформи. - Мстислав Павлов 18 Януари '16 в 11:24

"Защо се получи растеж само x1.2-1.3, имайки предвид, че за работата, можем да се справим 8 floatov и 4 двойни?" - @ MstislavPavlov, най-вероятно, това е за мен въпросът, макар @ixSci по принцип, той е казал. Погледнете отново ръководството за летателна експлоатация. Тук основно команди за работа с паметта. Извън кеша е много бавен екип. В действителност, сега можете не се смята, скоростта на добавяне на плувка # 47; двойни вектори, и скоростта на изтеглянето им към кеша. Аз съм в отговора си на кода последния тест просто е направил грешка, за да се покаже ефектът върху резултата от кеша. - мега 18 януари '16 в 11:48

"Ако изключите вашия съзнателен" грешка ", разликата ще бъде още по-малко, аз ви разбирам правилно?" - брои себе си: предпоследния резултат - вече без грешки. Аз просто не @avp каже дали своите характеристики за RAM. но показва, че неговите резултати са по-добри, така че аз го направих последния "хитър" тест. @ixSci може да направи същия тест в последния ми пример. - мега 18 януари '16 в 12:49

Въз основа на същата архитектура, може да се каже, че флоат работата по-бързо, най-малко 2 пъти. Например: 128-битов вектор регистър се вписва 2 или 4 двойно поплавък. Защо най-малко - защото подготовката на векторите може да поддържа допълнителни разходи, за да бъдат оценени в същото съотношение. Езикът, избран тук малко зависи, по-скоро - съставител на неговите качество optimizatsiionnyh алгоритми при участието на ССИ. - мега 18 януари '16 в 04:47

Свързани статии

Подкрепете проекта - споделете линка, благодаря!