Ноябрь 2012

AMD CPU qs

С несерверными AMD-шными CPU как-то вообще никогда не приходилось сталкиваться (да и с серверными - приходится не очень часто), а их же больше четверти (по статистике Steam).

При этом, хочется всякие новые варезы писать с расчетом на относительно новые процессоры, SSE3+ или вроде того. И если интелы в хозяйстве есть, от Core2 и выше, то с AMD - провал. Отсюда у меня возникает серия вопросов (википедию быстро пролистал, но там реально много, я лучше уточню):

Как оно ваще...

О новых технологиях

Со страху заменил оставшиеся в сторадж-боксе старые сигейтовские SAS-овские терабайтники (2008-го года) на терабайтные же WD RE4 (SATA). Старые - пусть дискетками поработают.

Результат:

  • +10% к трансфер рейту, было ~630-650Mb/sec на чтение-запись, стало 720-730.
  • Минус 10 градусов к температуре, старые диски грелись до ~42C, нагревая соседей до 35, а теперь 30 градусов, при том что в комнате 22, а ящик стоит в шкафу, который висит на теплой стене).

Чтобы два раза не вставать: в этом же ящике с середины сентября живет 400-ваттный безвентиляторный БП Seasonic. Впечатления самые благоприятные: хрен с ним с шумом, этот питальник холодный. Понятно что гружу я его отсилы ватт на 200 (8x10вт диски, 65вт. CPU, карточки тоже теплые, а значит жрут, вентиляторы крутятся), но 500-вт Thermaltake, который там стоял до того, грелся при такой нагрузке вполне самостоятельно.

Стоит этот питальник неприлично, но если бороться за тишину или температуру, то он - хороший. Во второй сервер купил такой же, потому что тамошний Zalman тоже противно греется.

Qt+OpenGL benchmarking Q

А вот, я извиняюсь, такой вопрос.

Есть QGrahicsScene (унаследованное от нее) в которой я в drawBackround вывожу OpenGL-ем нечто.

В процессе разбирательств с OpenGL я это нечто имплементировал десятком разных способов и хочу теперь померять, какой из них быстрее.

Но как?

Ну то есть я сделал бенчмарковый вызов, который зумит (еще панорамирует, переключает нужные мне битмепы и т.п., не суть) в таком вот духе:

for(.....){
myview->setZoom(...);
QApplication::processEvents();
}

Но получается вот что:

  • FPS-ов ровно 60 (2000 итераций за 34 секунды), OGLFormat::setSwapInterval(0) не помог.
  • Одно ядро процессора полностью загружено.
  • По профайлеру, загружено оно QWindowsWindow::raise() (~70% по профайлеру), вообще весь прочий код занимает остальные 30% CPU, моего кода вовсе не видно.

Так слона не продать.

Ну то есть понятно, можно в OpenGL-рисовалке рисовать одно и то же 10 (100,1000) раз подряд, но вопрос заключается в том, нет ли более прямого пути, который позволяет Qt-GUI программы побенчмаркать попроще?

Update: если вдруг кому интересно, то проблема решилась глобальным выключением VSync в настройках драйвера (NVidia). FPS-ы сразу сильно выросли, а профайл исполнения стал похож на настоящий.

Про Qt и OpenGL

С помощью профайлера и отладчика узнал прекрасное.

Прекрасное, конечно же, описано в мануале, но кто же их читает:

QGLContext::DefaultBindOption LinearFilteringBindOption | InvertedYBindOption | MipmapBindOption In Qt 4.5 and earlier, bindTexture() would mirror the image and automatically generate mipmaps. This option helps preserve this default behavior.
А я все удивлялся, отчего у меня bindTexture для ~мегапиксельной картинки выполняется миллисекунд 20. Ну конечно, оно переворачивает изображение.

Оторвал. Стало быстрее раз в 10 минимум (на глазок, по профайлеру).

Из другого прекрасного:

  • Если использовать QOpenGLBuffer::bind() и потом, после рисования или заполнения, не сказать ему QOpenGLBuffer::release(), то в QGraphicsView/Scene отваливается отображение элементов, нарисованных стандартным путем (через addItem).
  • Если генерировать структуры руками (glBindTexture/glTexImage2D), но забыть про установку фильтрации, то текстура вовсе не отображается.
Как я уже писал, сколько же есть вещей, которые я предпочел бы не знать.

День прошел не зря.

OpenGL Qs

Сразу предупреждаю: с OpenGL я пытаюсь работать всего неделю (был еще подход к снаряду, но началось лето и я переключился на МонголиеКарелии), поэтому вопросы у меня, вероятно, глупые и вообще про разное.

Вопросов, собственно, три:

1. Допустим, у меня очень простая сцена, два треугольника, образуют прямоугольник, на них натягиваю текстуру (собственно, картинку, которую хочу показать).

Вопрос: есть ли смысл связываться с VBO или 6 пар вызовов glTexCoord2f()/glVertex2f() не будут заметно медленнее? А если прямоугольник не один, а, к примеру, 64 (картинка 8000x8000, а на предельный размер текстуры я заложусь как 1024x1024), будет ли заметный выигрыш, если загнать все в буфер(ы) и дергать рисование меняя только индексы?

Это мне больше для понимания, понятно что как только захочется что-то нарисовать шейдером, так сразу VBO понадобятся.

2. В Qt5 есть (старые) QGL*-объекты, есть новые QOpenGL*.

Кто бы рассказал, в чем разница....

3. Ну и вообще, Qt-шные примеры, что из комплекта, что найденные в сети, какие-то частично безумные. То слишком простые, то вроде простой - а шейдеры там внезапно "#version 330", то - очень хороший пример boxes из поставки - но переусложненный, начинаешь от него куски отпиливать и все разваливается.

Нет ли каких-то Qt-OpenGL tutorials, которые бы с одной стороны были бы "современными" (в смысле используемых Qt-интерфейсов), интересными (не банальный QGLWidget::paintGL()), но и не слишком сложными.

О переходниках Hasselblad - Mamiya 645

Вдруг кому интересно.

  1. Если вы используете, к примеру, мирексовский адаптер а на нем бутерброд из хасселевской оптики и переходника с хасселя на 645-ю мамию
  2. И если у вас, как и у меня, в этом бутерброде нет бесконечности (не безумная проблема на тилт-переходнике, можно наклонить на градус-другой, но неаккуратненько).
  3. То: на ebay появились переходники другой конструкции (не Fotodiox и полные аналоги), которые оную бесконечность дают.
Отличаются конструкцией, у них не два кольца вставляющиеся друг в друга (как у Fotodiox), а выточено из одного кольца и байонетная часть сделана накладной пластиной.

Вот такие вот:

Но есть ньюанс, о котором ниже.

На следующей картинке, под катом, те, которые бесконечности не дают, все черные:

Черные (вторая картинка) - продает и Fotodiox (у которого, на моей памяти, вообще первый такой прокол, вся остальная их продукция мне таких неприятностей не доставляла) и много кто еще, но делают их в одной фанзе, вероятно. Т.е. после Fotodiox я купил у безымянного продавца, они оказались неотличимы.

Обещанный ньюанс: свежекупленный переходник в Mirex-адаптер лезть не захотел, слишком толстые выступы на байонете (переходника). Т.е. прокручивается не до щелчка, а на единицы градусов и клинит. Где цепляет - видно по заусеницам на металле.

Лечится, к примеру, тонким надфилем, просто стачиваете лишнее и все. Я полечил бормашинкой с тонким корундовым диском. Дела оказалось на 5 минут.

Опять же - в моей практике первый случай, чтобы не лезло. Похоже эти HB-M645 какие-то заколдованые.

Про Nvidia

Если кто вдруг не видел. На Supercomputers 2012 у Nvidia был свой уголок, NVidia Technology Theater. Где выступали всякие интересные люди со всякими интересными презентациями.

Если кто не видел, рекомендую пойти на архив записей и повтыкать. Там дурацкий интерфейс, надо в правом блоке (где "чат") ткнуть в закладку "видео" и пораскрывать ее. Скажем, про CARMA мне было весьма интересно.

Чтобы два раза не вставать: утро понедельника - время для общефилософских рассуждений

Мне ужасно не нравится, то что сейчас происходит в GPGPU-мире:

  • Есть Nvidia с CUDA и с аккуратно спрятанным под ковер OpenCL. То есть OpenCL 1.1 в драйверах есть, но компания делает вид, что никакого OpenCL в природе не существует. Где, к примеру, OpenCL 1.2? При этом, в HPC-области NVidia очевидный лидер, если кто-то делает HPC-софт, то делает он его в первую очередь под CUDA (ну, насколько я вижу).
  • Есть OpenCL, в который кинулся весь остальной мир. И на CPU и на GPU и на x86 и на ARM и на прочих архитектурах. Если писать что-то для более-менее массового юзера, то очевидно что на OpenCL, ибо рынок куда шире.
Душераздирающее зрелище.

О надежности RAID

Я был уверен, что читал про это в известной гугловой бумаге про надежность дисков, однако быстрым просмотром этого не нашел. Значит ветром надуло.

"Это" - такой практический факт, что если у вас вылетел диск в RAID, то шансов словить проблемы с еще одним диском в том же массиве в процессе ребилда - много. Настолько много, что мы в АиП с этим несколько раз сталкивались вживую, несмотря на то что парк серверов у нас - маленький.

Материалистическое объяснение понятно - в процессе ребилда нагрузка на диск(и) максимальна, если кто-то из них уже дышит на ладан, то тут оно и настанет.

Я умный, поэтому для рабочих данных использую RAID6. Все-таки вероятность того, что при ребилде вылетит два диска - она сильно меньше. Ну, к примеру, если RAID5 окончательно портятся в 5% случаев ребилда (что явно завышенная оценка), то значит RAID6 так убить получится в 1/400 = 0.25% ребилдов. С учетом бэкапов и всего такого (и реальной частоты ребилдов - ну пусть даже раз в месяц, реально много меньше) - меня это устраивает (а 5% - не устраивает).

Но вчера - чуть не налетел и с RAID6. Естественно, ровно по собственной глупости: у меня в рабочем массиве стоят (стояли) 6 штук старых 1Tb Seagate Barraсuda ES.2. Они греются заметно больше, чем WD RE4, медленнее, да и вообще им уже по 4 года, пора менять (на WD RE4, которых в этом массиве еще два). Ну вот я пару WD RE4 вчера и принес из лабаза, пару сигейтов вытащил, заменил, поставил ребилдиться.

И что вы думаете? Первый - перестроился (Adaptec 5805 их по одному перестраивает), а в процессе перестройки второго - вылетел один из старых сигейтов. На час раньше - и прощай данные. Ну то есть вернуть старый диск - не дали бы, если такой возвращаешь он все едино считается новым, таймстампы то разошлись.

Пойду свечку поставлю. Те 4Tb данных, что на этом массиве лежат, - на 99% дублированы на другой NAS и на 90% в оффлайн, но даже 1% потерять было бы необычайно обидно.

Про Qt5: книжки? примеры? руководства?

По случаю выхода Qt5 Beta2, хочу ею овладеть.

Причем, овладеть по-взрослому, по-мужски!

Ну то есть вот в RawDigger я утомился рисовать собственно GUI на C++, очень хочу делать это декларативно, в грубой форме, на Javascript-е. Особенно это касается всяких форм с большим количеством элементов, но и всего остального гуя - тоже.

Проблема только в том, что я совершенно не представляю себе, как это сделать. Ну то есть этот язык у меня в состоянии "читаю, что-то понимаю, сам написать не могу". При этом, понятно, одним QML+JS у меня никак не обойдется, какие-то core-вещи всяко на C++, а дальше как-то с ними интегрироваться.

Вопрос: а есть ли какие-то систематические источники информации. В свое время пара книжек по Qt4 мне очень помогли. Я их не читал, но пролистал и многое - осознал. Хочу такого же, но для Qt5+QML2. Или не такого же, другого. Каких-то писучих блоггеров, которые про Qt5 пишут, может быть какие-то живые проекты, не знаю. Посоветуйте.

О скайпах

Надо сказать, что сегодняшняя истерика (и еще тут) изрядно позабавила потревожила.

Ну то есть я сделал как там написано - но в скайп никакое уведомление с URL-ом не пришло. Пришло, как и должно быть, на почту. То есть дырки какбэ нет. Может быть быстро отключили, да.

Update: в комментах пишут, что работает! Нотифай приходит именно в новый аккаунт.

Но при этом я обнаружил на своем емейле два каких-то левых неизвестных мне аккаунта (что тоже неудивительно с моим емейлом: предложения что-то кликнуть для подтверждения регистрации мне регулярно приходят). Им будет сюрприз!

Pages