On Mon, Jun 05, 2006 at 05:17:09AM +0400, Alexey Tourbin wrote: > > > > ATLAS w/ SSE2: > > > > > mm <- matrix(rnorm(10^6), ncol = 10^3) > > > > > system.time(crossprod(mm)) > > > > > > > > [1] 0.344 0.020 0.369 0.000 0.000 ^^^^^^^^^^^^^^^^^ > > > А вот с GotoBLAS 1.2 (P4 2.8GHz, R 2.3.0): > > > > > > > mm <- matrix(rnorm(10^6), ncol = 10^3) > > > > system.time(crossprod(mm)) > > > [1] 0.232 0.012 0.270 0.000 0.000 > > > > model name : AMD Athlon(tm) 64 Processor 3200+ > > cpu MHz : 2050.186 > > cache size : 512 KB > > > В общем, если это будет работать из коробки как надо и если по сравнению > > с GotoBLAS разница будет не хуже, чем в полтора раза, тогда я буду > > доволелен. Потому что основной разрыв по сравнению с фортраном всё > > равно ликвидирован, а 10-20% на практике редко что решают. > > А вот ATLAS без оптимизации под P4SSE2: > > > mm <- matrix(rnorm(10^6), ncol = 10^3) > > system.time(crossprod(mm)) > [1] 0.584 0.012 0.624 0.000 0.000 А вот собранный под Athlon64 (HAMMER32SSE2, т.е. ближе всего к тому процессору, что у меня). > mm <- matrix(rnorm(10^6), ncol = 10^3) > system.time(crossprod(mm)) [1] 0.312 0.016 0.330 0.000 0.000 Т.е. немного лучше, чем для P4SSE2. (Набор инструкций в данном случае не отличается, отличаются только некоторые параметры управления L1/L2 кешем, или что там ещё). SSE2 сейчас является общим знаменателем для P4 и современных атлонов. Поскольку x86 ещё некоторое время будет существовать, то софт, для которого специфическая оптимизация имеет смысл (и дает существенный выигрыш, как в случае с числодробильными библиотеками), стоит собирать праллельно и ставить в /usr/lib/sse2. Правда, кроеме ATLAS сходу на ум ничего не приходит. А вообще надо переходить на x86_64, как я понимаю проблем с оптимизацией "под архитектуру" там будет гораздо меньше (т.е. в первых Athlon64 не было SSE3, а в P4 есс-но нет 3dNow, но остальное всё совпадает).