Я имел ввиду, если у тя значения в таблице не байтовые, а размером в слово или двойное слово... да еще не сначала сегмента табличка начинается (мож не рационально, но такое бывает) (не помню сколько тактов на адресацию по базе со смещением уходит %) ) Кстати у тя есть инфа про тайтлы вообще, а то чет чувствую недопонимаю это дело... а дело походу оч хорошее
Aloner: Про тайлы вообще не много пишут: индустрия [временно] отвернулась от них в сторону всяких шейдеров. Так что если разберёшься, порвёшь всех
сначала нада написать весь кусок кода, оптимизировать под конкретный проц (распараллелить и т.п.) а потом такты считать
Помнится я про них у в DEMO3dDesing читал...но напрактике пока не реализовывал... ксатати в статейку которую ты скидывал, я тоже не во все воткнул
Чтение памяти на любом проце не менее 3 тактов - это если данные в кэше L1, иначе 10-20 из L2 или 100-300 из ОЗУ Засунуть всю таблицу в кэш - сами понимаете..., если только размер позволяет и если ее специально предварительно запрефетчить - иначе придется ориентироваться на среднюю латентность между 3 и 300 Желающие есть "сначала код написать, а затем такты считать" ?
Значит табличку выгодно только для больших расчетов считать (например лайтмэпы), и самый быстрый способ возвести в квадрат - это все таки напрямую умножить число с фиксированной запятой само на себя (умножение помоему за 3 такта осуществляется на современных процах).
Да и к тому же таблички должны быть сравнительно малого размера и обращение к ним должно быть сравнительно частым - тогда можно расчитывать, что они будут сидеть в кэше. В AMD 64 за 3, в атлонах ХР и интеловских P6 за 4. Только в горячих монстрах P4Е за 10, а в первых моделях и вовсе за 14 (но зато у них частоты задраны за 3ГГц). Однако напомню, что несмотря на приличную латентность, независимые умножения (впрочем как и загрузки из памяти) могут выполняться в каждом такте, поэтому при достаточно простых расчетах в цикле латентность умножения может вообще не сказываться (Т.е. задержка одного умножения = 4, но задержка цепочки скажем из 100 независимых умножений подряд = 4+100, т.е. чуть больше 1 такта в пересчете на каждое)
Да уж, тут надо четко под код все рассчитывать, что бы получить максимум. Я вот до сих пор так и не решил юзать фиксированную точку или с плавающей все таки работать... Первые все таки быстрее (у меня в коде), а плавающие более гибкие, да и вроде можно работу с ними хорошо оптимизировать... Кармак тоже фиксы рекомендовал %)))
Я вообще данную тему не понимаю, о каких вычислениях идет речь, о графических ли картах или о чем другом... Только вот мне кажется, что fixed point это абсолютно тоже самое, что и целый тип. Так, если мы работаем в целых 32 разрядах, а в уме держим знаменатель 2^32 или 2^16, то это и будет фиксированная точка, разве не так?
Ну наверное не совсем... В fixed point после целочисленного умножения нужно проводить коррекцию - отбрасывать младшие разряды.. что это за термин кривой - not fixed? Float или floating вроде того...