swizard (swizard) wrote,
swizard
swizard

Category:

Оптимизация: i386?

Блин, там в этом open street map еще один баг: в российском файлике russian_federation.osm (тот самый, который двухгиговый xml) обнаружился relation, который включает сам себя (бесконечная рекурсия). Ладно, надеюсь, этот конкурс от fprog.ru поможет проекту osm.

Но не суть, у меня вот какой вопрос.

Допустим, мне в программе нужно задействовать крупный integer. Например, считать offset в огромном файле или сохранить какой-нибудь id в толстой базе. Разумеется, я нахожусь в пределах длиннющего цикла и поэтому мне нужен очень быстрый ассемблер.

На sbcl/amd64 я с чистой душой пользуюсь типом '(unsigned-byte 60) (какие-то биты откушены под таг), он прекрасно влезает в регистр и мгновенно считается.

А на sbcl/i386 такой тип в регистр уже не влезает, и переменная начинает бокситься, плюс вся арифметика с таким числом генерируется #GENERIC- :(

Я, честно говоря, сломал бошку, как заоптимизировать это место на i386. 1349 вон подсказывает, что из юзер-левела можно как-то определять свои типы. Наверное, что-то можно изобразить для 64-х битного числа на базе (simple-array '(unsigned-byte 8) (8))? Или это будет еще тормознее #GENERIC-операций?
Tags: amd64, bug, code, common lisp, i386, lisp, optimization, osm, question
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 11 comments