А так и надо, чтоб к телеку :) Подключите еще мышку/клаву, залейте в recovery linux и играйтесь. Текущая технология позволяет dual boot (Android в основном разделе, linux в recovery partition @ NAND). С внешней карточки без перепрошивания пока не запускается.
С этими устройствами и их названиями полная чехарда. Моя железяка от SainSmart, в паспорте у нее написано AK802. При этом в ревью то написано про Allwinner, то про Rockchip, и похоже бывают обе модификации. Те же жесть с именованиями MK808, MK806, UG007, UG802 etc — каждый производитель/продавец по-своему переименовывает. Возможно я усложняю, но я так и не разобрался. Внимательно посмотрите на спецификацию той самой железяки, которую вы купили, лучше всего прямо в описании товара.
Я ее брал на Amazon.co.uk (я в Англии живу).
Allwinner A10 тоже неплохо, по крайней мере у него давно с линуксом хорошо, ну и полтора гигагерца там есть. Но только одно ядро.
Кстати, еще камент — утверждать что нужен PC с линуксом немного опрометчиво. Во-первых, прямо сейчас нет стабильного способа перепрошивать эту железяку из-под линукса, для этого нужны программы под винду (RK Batch tool, RK ROM Flash tool). Несколько пользователей из-под линукса перепрошивали железки, но каждый раз со своим бубном и у кого-то не получалось совсем. Но линукс нужен затем, чтоб подготовить rootfs. В принципе для этого и LiveCD/USB с линуксом хватит.
Без аппаратного ускорения (GPU + VPU) потому что RK3066 закрытая платформа, а до попытки пришить открытый проект драйверов у умельцев руки пока не дошли (есть и более базовые проблемы).
С другой стороны, есть дофига причин пользоваться этой железякой и без всякого аппаратного ускорения. На нем уже гоняют web server, и предварительные замеры производительности (на моей железяке с 1Ghz, при том что платформа позволяет разгоняться до 1.6Ghz) очень вдохновляющие. Например: компилляция сложного крайне шаблонизированного С++ проекта (gcc) на двух ядрах занимает всего в 10 раз больше времени, чем на 4 ядрах на моем лаптопе с i7-2640M CPU @ 2.80GHz. То есть абсолютная производительность в перерасчете на ядро одинаковой частоты — в 1.78 раз медленнее почти топового мобильного sandy bridge. И это при том, что у него кэша очень мало!
Как владелец железяки AK802 на RK3066 и участник форума на slatedroid, где этот линукс обсуждают и допиливают, уточню — это даже не бета. PicUntu основана на pre-alpha ядре пользователя AndrewDB. Кроме того, буквально сегодня на slatedroid залили экспериментальное ядро и rootfs для дебиана.
в том виде как он есть и правда неясно, что это. Но сама технология крайне интересная, по крайней мере идея динамического распараллеливания, это ж рай программиста: можно о параллельности не думать, компиллятор независимые участки сам размечает, а дальше оно само на полной скорости…
Как у вас получается 15? Я считал так: одна операция j+=0.0008, четыре операции в оптимизированном выражении ( result+=i*(j*4+0.0012) ), итого 5 во внутреннем цикле, и не забыть i+=0.0002, которое приходит в ~10^3 раз реже, но все-таки учел.
А вообще, если разработчики процессора это читают, было бы полезно заодно ввести отдельные команды для скалярного и косого произведения — в железе ведь это уже есть, а польза очевидна. Плюс к этому, если б была операция для произведения любых полиномов первого порядка, не только по i, у этого тоже наверняка нашлось бы применение: интерполяция, методы конечных элементов высокого порядка (там идеи близкие к интерполяции) и т.п.
Кстати, я правильно же понимаю, что у вашего кода получилось выжать ((1÷0.0002)×(1 + (1÷0.0008)×(1+4))÷6.8 ~ 4596323.5 flops ~ 4.6 Mflops? И у вас получилось 6.8*80*1000^2/((1÷0.0002)×(1 + (1÷0.0008)×(1+4) = 17.4 такта на итерацию? Получается 3.48 такта на флопс, а это очень много, если сравнивать с x86. Тут либо бесконечно медленная память, либо не упакованная арифметика, либо все вместе.
кстати, подумалось, а все не так отвратительно, для специфических задач.
Сначала вопрос для уточнения — под скалярным умножением двух комплексных чисел z = a+bi и w = c+di имеется ввиду обычное умножение z*w=(ac-bd)+i(ad+bc), или адамарово, ac + bdi? У первого выражения 7 арифметических операций, 2.4Gflops/7 ~ 342 Mflops на одну операцию, примерно соответствует производительности арифметических операций поодиночке, значит видимо речь все-таки о простом умножении комплексных чисел.
Дело в том, что это очень неплохо, когда нужно считать детерминанты (их можно блочно-матрично считать, элементарный блок 2х2 получается за один такт — хорошо!), произведения полиномов и просто скалярные умножения векторов. Особенно можно развернуться с алгоритмами типа умножения Карацубы. То есть, я предлагаю выполнить команду, расчитанную на умножения комплексных чисел, но половину результата отбросить, в зависимости от того, нужно косое произведение как в детерминанте 2х2 или скалярное произведение. Для скалярных произведений, правда, придется периодически знак минус пририсовывать и потом убирать обратно.
Совсем не обязательно, по крайней мере для базовых тестов. Чтоб посмотреть разницу во времени доступа к регистрам и памяти (не знаю как устроена, но для простоты наверное можно предполагать, что это такой L1 cache), достаточно векторов операции сложности O(n) типа скалярного умножения, запустить ее для разных n и посмотреть насколько просели, когда кончился регистровый файл. Хотя я может не ловлю каких-то частностей неоптимизирующего компиллятора и архитектуры.
Вообще, было бы интересно поиграть с вашей помощью, например вести вики со списком уже пройденных тестов
Спасибо за первые тесты производительности. Получается, от плотного BLAS'a следует ждать 800MFLOPs максимум. Хотя: напомните, пожалуйста, для скалярных умножений комплексных чисел там одна сложная команда или несколько составных? Если второе, то может специальные ухищрения с чередованием арифметики и загрузки могут помочь выжать больше. Для сомневающихся — GotoBLAS/OpenBLAS писан на смеси си и ассемблера для достижения максимальной производительности. Когда дело касается высокой производительности, люди готовы выкладываться несмотря на «время программиста стоит дорого».
Да вам спасибо за площадку, где можно наконец задать вопрос о накипевшем :) У меня этот аккаунт на хабре уже три года как лежал, но мотивации идти в каменты все не было. А тут ГП + символьная регрессия = «да сколько ж можно».
В моем предыдущем комментарии я пытался суммировать свое понимание вашего же описания работы с ячейкой памяти и скалярным умножением. Как вы можете увидеть, получилась полная лажа, я ничего не понял. И по прежнему не понимаю. Но вы лучше сейчас не тратьте время в каментах, а напишите еще хотя бы одну статью, взяв некоторый вычислительный алгоритм и разложив процесс его выполнения на мультиклетный ассемблер и пару возможных сценариев выполнения (у вас же не гарантируется определенный порядок выполнения? Значит возможны по крайней мере два).
Я ее брал на Amazon.co.uk (я в Англии живу).
Allwinner A10 тоже неплохо, по крайней мере у него давно с линуксом хорошо, ну и полтора гигагерца там есть. Но только одно ядро.
С другой стороны, есть дофига причин пользоваться этой железякой и без всякого аппаратного ускорения. На нем уже гоняют web server, и предварительные замеры производительности (на моей железяке с 1Ghz, при том что платформа позволяет разгоняться до 1.6Ghz) очень вдохновляющие. Например: компилляция сложного крайне шаблонизированного С++ проекта (gcc) на двух ядрах занимает всего в 10 раз больше времени, чем на 4 ядрах на моем лаптопе с i7-2640M CPU @ 2.80GHz. То есть абсолютная производительность в перерасчете на ядро одинаковой частоты — в 1.78 раз медленнее почти топового мобильного sandy bridge. И это при том, что у него кэша очень мало!
Сначала вопрос для уточнения — под скалярным умножением двух комплексных чисел z = a+bi и w = c+di имеется ввиду обычное умножение z*w=(ac-bd)+i(ad+bc), или адамарово, ac + bdi? У первого выражения 7 арифметических операций, 2.4Gflops/7 ~ 342 Mflops на одну операцию, примерно соответствует производительности арифметических операций поодиночке, значит видимо речь все-таки о простом умножении комплексных чисел.
Дело в том, что это очень неплохо, когда нужно считать детерминанты (их можно блочно-матрично считать, элементарный блок 2х2 получается за один такт — хорошо!), произведения полиномов и просто скалярные умножения векторов. Особенно можно развернуться с алгоритмами типа умножения Карацубы. То есть, я предлагаю выполнить команду, расчитанную на умножения комплексных чисел, но половину результата отбросить, в зависимости от того, нужно косое произведение как в детерминанте 2х2 или скалярное произведение. Для скалярных произведений, правда, придется периодически знак минус пририсовывать и потом убирать обратно.
Вообще, было бы интересно поиграть с вашей помощью, например вести вики со списком уже пройденных тестов
Еще, вы не оценивали задержки доступа к памяти?
Спасибо за ссылку!