appml, acml, fft, octave

14.12.2011

Купил себе игрушку — новый системник. С пятницы ебусь, затачивая его под мои задачи.

Во-первых, единственный бенчмарк для octave — obench.m
Или писать самому.

Во-вторых, ACML. Компилировать octave c acml не нужно, проще заменить системные libblas.so.3gf и liblapack.so.3gf на acml/gfortran64_mp/lib/libacml_mp.so
К сожалению, с libfftw3.so.3 и libfftw3f.so.3 такое не проходит.
Полдня потеряно. 1x-5x прироста скорости на разных операциях по сравнению с системными либами.

В-третьих, поставил свежие дрова на амд-шную видюху. В репозиториях дрова с августа, а для полной поддержки opencl нужны ноябрьские. Пользователи ubuntu слишком изнеженные, у нас проприентарные дрова ставятся в два клика — я был не готов к тому, что дрова нужно скачивать и они могут не встать с первого раза. Встали с третьего.
Ещё полдня.

APPML к octave не прикрутить. Ещё два раза по полдня. Либо делать oct\mex-файл (что бы использовать си-шные библиотеки из octave), либо прикручивать их к питону и использовать sage (питоновская альтернатива octave), либо на си писать (это была тонкая шутка).

APPML на GPU быстрее, чем на CPU в 1-70 раз. Т.е. использовать её придётся, на процессоре много не посчитаешь.

MAGMA — не нужно использовать. Аналог lapack, сразу заточенный под GPU, но с каким-то своим набором функций, не очень ясными авторами, и, оказывается, только под CUDA.

Короче, пора писать код, а с преждевременной оптимизацией нужно заканчивать. Считаем, что я разобрался, как и что.

Линейная алгебра.

02.12.2011

Потратил опять несколько часов на выбор видеокарты — бесполезно. Кажется, можно брать вообще любую. Дорогие — быстрее, дешёвые медленнее. Но никакого графика цена\производительность за адекватное время на общедоступных данных не построишь. К тому же есть параметры софта. Следующая версия от предыдущей может отличаться в полтора раза по скорости на некоторых операциях. Тесты именно тех операций, что мне нужны, конечно, не найдёшь.

И ещё пару слов, что б сохранились.
FPGA
sca/LAPACKrc

Происхождение видов.

27.11.2011

Вид (лат. species) — таксономическая, систематическая единица, группа особей с общими морфофизиологическими, биохимическими и поведенческими признаками, способная к взаимному скрещиванию, дающему в ряду поколений плодовитое потомство, закономерно распространённая в пределах определённого ареала и сходно изменяющаяся под влиянием факторов внешней среды.
Число видов живых организмов на Земле оценивается в 8,7 миллионов.

Вид — концепция не строгая. Деление всего живого намного менее строго, чем деление вещества на химические элементы.

Во-первых, есть виды, не имеющие полового размножения. Бактерии, размножающиеся делением — очевидный пример. Многие грибы размножаются спорами, многие растения — вегетативно. Некоторые виды половое размножение утратили. Известная многим сальвия не даёт завязи плодов и может размножаться только вегетативно. Как можно выделить группу по «способности к взаимному скрещиванию», если взаимного скрещивания не происходит?

Во-вторых, половое размножение внутри вида — не единственный способ обменяться генами. Генную инженерию и опенсорс изобрели, как обычно, не люди. Многие бактерии, а так же коловратки класса Bdelloidea занимаются горизонтальным переносом генов — этим небогоугодным и экономически вредным действием миллионы лет. И столько же времени не занимаются обменом генов между особями своего вида — самцов у этих коловраток вовсе нет, а самки размножаются партеногенезом.

В-третьих, особи разных видов тоже нередко способны к взаимному скрещиванию. Хонорики (гибрид хорька и европейской норки) в советское время изучены вдоль и поперёк. Самки вполне плодовиты, а вот самцы — стерильны. Верблюд нар, лигры, бенгалы, возможно алтайский сокол — ещё несколько примеров.
Род скальных ящериц (Darevskia) — вообще Содом и Гоморра. Из-за партеногенеза и межвидового скрещивания их на виды-то делят очень спорно. Род чаек (Larus) тоже страдает межвидовым скрещиванием. Точнее, чайки им наслаждаются, а страдают орнитологи, когда делят на виды, например, серебри́стых ча́ек. Не помогает даже учёт общих «морфофизиологических, биохимических и поведенческих признаков».

К чему это всё?
Это просто основа из фактов для диалога на тему «как человек мог произойти от homo erectus, если виды не скрещиваются между собой?».

Нервы.

21.11.2011

Я как под фенотропилом последние дни. Хотя за две недели в Москве я съел всего одну, но как будто до сих пор не отпустило. Сплю 6-8 часов в сутки, сбросил 7 килограммов (хотя не знаю, за какое время). Может показаться, что сбрасывать уже некуда, но когда меня не взяли в армию, было ещё на 3 кг меньше.
Субъективно — организм чувствует большие проблемы и мобилизирует все силы, что бы их решить. Вот только вместо того, что бы завалить мамонта и тёлку, я пишу нейронные сети и xslt-шаблоны. Организм в шоке.
Мыслительная деятельность не лучше обычного, просто постоянно натянутые нервы.
Жаль, я не замерял вес в прошлые периоды активности. Вполне возможно, что есть связь.

Машинное обучение.

14.11.2011

Начал писать код по задаче на 4 неделю курса по машинному обучению.
Ага, думаю, сейчас открою прошлый код и скопирую половину, там уже всё сделано.
А там

% kind sort of intuition :(
% not as clearly, as i might prefer

И 3 строчки малопонятных значков.
Не надо было так делать. Повторное использование кода — это хорошо.

Имидж.

12.11.2011

Что-то мой имидж падает.
Инвестор ругается, хочет результаты.
Первый в меня не верит, я смотрю.
Впрочем, с других сторон пока всё нормально.
Так что нахуй-нахуй, главное не надорваться.
Тогда будет похуй на всех, но и дела встанут.

Москва

05.11.2011

Еду в Москву.

Репрессии.

01.11.2011

Кого можно репрессировать?
Не кого нужно, а кого можно.

Анархисты = никого.
Либертарианцы и либералы += применяющих физическое насилие.
Демократы += применяющих экономическое насилие.
Социалисты += применяющих экономическое читерство.
Коммунисты += применяющих психологическое насилие.
Все = относящихся к другой группе.

Софт для линейной алгебры. OpenCL vs Cuda.

30.10.2011

Чем больше в стране нефти, тем меньше в ней демократии. (c) Freedom House, Вашингтон.

Разбирался в ПО для линейной алгебры. Запишу для себя, что бы потом вернуться. Вопрос интересовал потому что считать матрицы лучше на видеокартах, а значит нужно выбрать между nVidia и AMD. Что бы было быстро и без геммороя.

CUDA — стандарт для вычислений на видеокартах. Только nVidia, проприентарный.
OpenCL — стандарт для параллельных вычислений. Открытый стандарт, софт свободный. Поддерживает и видеокарты AMD и nVidia.
GPGPU — использование видеокарт для вычислений. gpgpu.org.
BLAS — базовые подпрограммы линейной алгебры. Стандартизирует API для софта. Нет смысла использовать напрямую (низкоуровневый).
LAPACK — библиотека линейной алгебры. Написана с использованием BLAS, на фортране, для процессоров.
Intel MKL — одна из реализаций LAPACK, платная.
GSL — GNU Scientific Library, математическая библиотека от GNU, среди большого списка возможностей линейная алгебра так же заявлена.
AMD ACML — математическая библиотека от AMD, одна из реализаций BLAS\LAPACK. Фортран.
ACML-GPU — ACML для видеокарт. Не поддерживается, возможности перенесены в APPML.
APPML — есть стандарт типа html для десктопных приложений, который загнулся в 2007-м. Это не оно.
AMD APPML — математическая библиотека от AMD, содержащая функции BLAS и FFT написанные на OpenCL и заточенные под видеокарты AMD.
AMD APP SDK — sdk от AMD, что бы пользоваться APPML.
CuBLAS — BLAS, портированный на CUDA, от nVidia. Исходники есть.
opencl-toolbox — относительно живая реализация низкоуровневой поддержки opencl для matlab в виде модуля. 1 разработчик. Можно скомпилировать с Octave. Лицензия MIT (серьёзная ошибка). В начале 2011 года много людей обратили на неё внимание. По всей видимости ничего более серьёзного не существует.

GNU Octave — свободная система для математических вычислений. Язык совместим с MATLAB.
MATLAB — слишком много стоит.
MEX-файлы — dll для MATLAB. К Octave подключить тоже можно.
Parallel Computing Toolbox — поддержка GPU в MATLAB от производителя. Цены неприличные. Или приличные. В русском языке это почти одно и то же.
Jacket — поддержка GPU в MATLAB от сторонней конторы. Тоже раздают разрешения на использование персонально, в обмен на президентов. Впрочем, можно и проигнорировать подобный «традиционный метод лицензирования ПО». Если найти где скачать, конечно.
Larrabee — архитектура процессоров, которую разрабатывает Intel, для конкуренции на рынке GPGPU, высокопроизводительных вычислений и графики.
Libra от gpusystems — поддержка GPU для matlab\octave\java\c# и для всего, что может вызвать API на C\C++ (упоминают octave в своём FAQ), реализован BLAS и ещё много всего, лицензирование мутное, есть лицензия для разработчиков. Только под винду, линукс обещают.

Octave можно скомпилировать с ACML (как минимум с той частью ACML, которая совместима с BLAS), хотя это может быть нетривиально. APPML + Octave можно забыть, интернет на эту тему молчит абсолютно.
Скомпилировать Octave с некоторыми библиотеками из CUDA SDK так же возможно (может, что и со всеми).
CUDA Mex-файлы можно, по всей видимости, использовать и без компиляции Octave.

Проблемы скорости.
(25к рублей) AMD Radeon HD 6990: 3072 ALUs x 830 MHz = 2550 billion 32-bit instruction per second, но она сдвоенная.
(27к рублей) Nvidia GTX 590: 1024 ALUs x 1214 MHz = 1243 billion 32-bit instruction per second
(уже не продаётся) ATI RadeonHD 5970 Graphics: 3200 cores, 4.6 tera flops, SIMD
(15к, уже не продаётся) Nvidia GTX 480 Fermi: 512 cores, Less than 2 tera flops,MIMD
OpenCL можно запустить на процессоре. Т.е. добавить скорости. Не говоря уж о Larrabee, но это экзотика, её не рассматриваем.
Математический (а не графический) код Cuda, возможно, лучше оптимизирован, чем OpenCL (cuda постарше), но на текущий момент это может быть уже и не так.
Тесты OpenCL vs Cuda и nVidia OpenCL vs ATI OpenCL упираются в религию, разница в скорости железа сравнима (или меньше) с разницей от качества исполнения драйверов и математических библиотек и разницей между соседними моделями одного производителя. БОльшая часть тестов — тесты скорости графики, на них вообще можно внимания не обращать.

Дополнительно.
DFT — Discrete Fourier Transform, дискретное преобразование Фурье. Раскладывает дискретные функции на составляющие, применяется при анализе частот в сигнале (сжатие звука и изображения, интуитивно кажется, что для распознавания звука тоже используется).
FFT — алгоритм быстрого вычисления DFT.
FFTW — GPL реализация FFT, самая быстрая из свободных и работающих на процессоре (по их собственным тестам).
CuFFT — FFT для CUDA
OpenCL_FFT — пример реализации от Apple для Mac OS.
APPML включает реализацию FFT на OpenCL.

Список карточек ATI, поддерживаемых AMD APP SDK. http://developer.amd.com/sdks/AMDAPPSDK/pages/DriverCompatibility.aspx

Итог.
Самый большой вопрос — что прикрутить к Octave, что бы сразу заработало и даже не потребовалось отдельные функции использовать. Вот этот разрыв между «у нас уже всё десять раз реализовано для си» и «к нормальным средствам разработки вы прикручивайте сами как-нибудь» смущает больше всего. Однако после тщательного анализа (я на этот пост потратил 5 часов) решил, что в вендор-локе нет смысла, количество кода сравнимо, качество придётся проверять, так что выбираю OpenCL. Гемморой будет в любом случае. AMD\nVidia будет важно, когда буду выбирать конкретную модель.

В чём сила?

30.10.2011

Из сказанного ранее вытекает необходимость какой-то общей, объединяющей идеи. Мы берём за основу познания верифицируемость, фальсифицируемость и принцип достаточного основания (бритва Оккама). (Когда-нибудь напишу, почему мы берём за основу именно это)

Естественной составляющей такой идеи выступает правда. Возможно, концепция правды не совсем подходит англосаксам и достаточно новая (в историческом смысле) для негров, но нам она определённо подходит. У неё есть недостатки — например, в большой группе людей (миллионы) свои цели нужно высказывать достаточно двусмысленно и обтекаемо, иначе найдётся слишком много людей, мыслящих в рамках «да-нет» и модель мира которых отличается от вашей (в строгом смысле, она отличается у всех, кроме вас) и которые идею похоронят. Так же, её неудобно прикладывать к вещам вроде красоты или вкуса.

Но достоинств у правды больше. Во-первых, ей проще быть общей для всех, чем, например, идее о равенстве полов. Во-вторых у неё высокие шансы стоить больше, чем жизнь человека — умирать за фуагра или за возможность носить мех желающих будет намного меньше (если идея стоит меньше жизни человека, то такая идея вряд ли сможет серьёзно объединять людей — слишком легко находить предателей).

Конечно, за идею жизни вообще, за идею превосходства нашей расы над другой, за идею о боге умирать люди тоже готовы. Первая мы тоже возьмём, у второй есть существенные недостатки, третья — не похоже, что бы она была необходима (бритва Оккама). Да и на общую для всех она тянет плохо — слишком уж конфликтуют между собой адепты разных течений.

А вот за идею индивидуальной правды для каждого готов был умереть, по всей видимости, один только Вальтер, да и то не настоящий, а художественный из книги Эвелин Холл. Убивать за эту идею готовы очень многие, а многие прямо сейчас и убивают, но это, конечно, совсем другое дело. Убивать и за деньги многие готовы, а вот умирать за них — желающих по-меньше.

Напоследок о практических методах. Уменьшай издержки совершения хороших действий, увеличивай — плохих (надо пятую так сформулировать). Хороший и действенный метод, что бы врать было сложнее — наказывать за это. Рассказал, что в Ливии от бомбёжек не погиб ни один мирный житель — уголовное дело, тщательное расследование и если хоть один погибший нашёлся (а он найдётся минут через 5) — люстрация (запрет занимания государственных должностей), публичное опровержение и условный срок на год-полтора (что бы год-полтора внимательнее был к фактам). Рассказал, что телефон наш, отечественный, сделанный в Китае, с русским логотипом МТС — уголовное дело, тщательное расследование и если в результате расследования выяснится, что Китай в состав России пока не входит — штраф и условный срок.
Сроки условные, потому что иначе придётся посадить почти всю верхушку. Это, конечно, многие поддержат, но объективно это не возможно. А начинать можно и с малого. Даже 10 суток в сизо — уже хорошо.
Существенный минус — конкретики от верхушки вообще можно будет не ждать — будут исключительно сладко-розовые сопли, но это должно быть лучше, чем враньё.
Точнее и конкретнее. Сейчас статья за клевету должна распространиться на клевету на группы и предметы. Только общеупотребительный термин придётся сменить с «клевета» на «обман окружающих». Ну или отдельную статью ввести.