Итого, погнали по следам
предыдущего поста.
- На двухъядерном линуксе у dmitry_vk моя лисповая реализация оказалась быстрее жабьей почти на 40% ( пруф)
- У меня на ноуте (Core Duo T6600) бенчмарк отработал еще быстрее: 2.956s (напомню: на десктопе Core Quad Q6600, результат 7.4s)
- Задачу зааппрувили на shootout, она ожидаемо неплохо выступила на x86 Core Quad и x64 Core Quad (восьмое и девятое место соответственно), но омерзительно адски слила всем на одном ядре, включая даже петон.
Выводы следующие. Как правильно было замечено
здесь, Core Quad является специфическим процессором: это скорее двухпроцессорный Core Duo, чем четырехъядерный cpu. Отсюда несравненно лучшие результаты бенча на Core Duo.
Если б у меня была возможность четко приклеить нити к физическим ядрам, я бы получил суровый выигрыш, запуская первую игру на одном "процессоре", а вторую на "втором". Отсюда вопрос первый: правильно ли я понимаю, что в SBCL управлять affinity я не могу никак?
Вывод второй: запускаясь на однопроцессорной машине мне надо, во-первых, обнаружить это (вопрос: как?), а во-вторых, убрать пустой спин из ожидания, крутясь на thread-yield. Есть ли какой-нибудь универсальный способ определить однопроцессорность рантайма, помимо распарсивания /proc/cpuinfo в луниксе и sysctl в bsd?