Оу?

17.12.2011

Кажется, перегорел. Третий день играю, вчера Нирвану включил. Список планов продолжает расти. Список постов для блога — тоже. Купил водки — не помогло. 40 грамм — бесполезно, надо попробовать полбутылки выпить для перезагрузки, но не хочется.
Закончил курс по базам данных. Курс по машинному обучению тоже вроде бы закончился. Уже собрал данные для пары алгоритмов, которые хочу реализовать.
Вчера предложили по-программировать для проекта, который не растёт. А если проект не растёт, это всё, сливай воду. Пустая трата сил и времени ради не особо больших денег.

На лесе думаю поставить крест. Полгода завод в собственности, а эффект такой же, как с моим двухгодичным офисом. Хитрые схемы Джет выстраивать может, я многому научился, а вот навыки ежедневной работы «в рост» в стеснённых условиях у него такие же, как у меня. А не стеснённых условий (т.е. до жопы халявных денег) не будет. Это было в 90-х, это было в дорах в 2000-х, сейчас возможно в криминале и в алгоритмах. Вот алгоритмами и займёмся.

Если не уйду в прокрастинацию месяца на три.

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 будет важно, когда буду выбирать конкретную модель.