Свежие комментарии

Title Comment
Вероятно, QGraphicsEffect

Вероятно, QGraphicsEffect должен подойти для решения Вашей задачи.

Состояние паинтера можно

Состояние паинтера можно менять только из paint. Так что нужно создавать базовый класс который умеет переключать композишн.
Можно попробовать изменять композишн из QGraphicsItemGroup наследника, при этом включив DontSavePainterState
http://doc.qt.nokia.com/latest/qgraphicsview.html#OptimizationFlag-enum
но это тоже может быть чревато...так как QPainter один на всех.
Еще кстати есть QGraphicsEffects http://doc.qt.nokia.com/4.7/qgraphicseffect.html, писать быстрые эффекты на нем сложно, но если речь о десктопе, то должно получится.

Эттта. DDK - это driver developers kit? Откудова там msvcrt.

Эттта. DDK - это driver developers kit? Откудова там msvcrt.dll -то? Тамж тока мессия ntoskrnl.exe и пророк его hal.dll )))

Все чудненько встало, за

Все чудненько встало, за исключением одной проблемы... Мак ОС напрочь не видит вмварьную звуковуху... что-нибудь можете посоветовать чтобы появился звук?

Про SQLite не все знают.

Про SQLite не все знают.

Я думал на эту роль назначен SQLite.

Я думал на эту роль назначен SQLite.

Re: оффтопик про CUDA

Кэшироваться должно хорошо, я ж в одно место пишу :)
С конфликтами в случае безусловной записи должно быть ещё хуже, все треды пишут одновременно, а с условием только очень некоторые. А получается всё равно сильно медленнее.

Re: оффтопик про CUDA

Не, ну это ненастоящий код, ты же пишешь по одному адресу в __device__. Че там с (например) кэшами и конфликтами вообще неясно.

Re: оффтопик про CUDA

Именно так.

Чтоб было понятнее, о чем речь, вот тестовый пример: http://dil.pp.ru/xfer-test.zip

Если вообще ничего никуда не писать (возможно при этом проверяющая функция вообще не вызывается, потому что результаты её работы не используются и побочных эффектов нет): 1644 миллиона проверок в секунду.

Если у функции включить побочный эффект в виде инкрементирования элемента глобальной структуры (инкрементирование работает, его видно потом в хосте): 1497 миллионов проверок.

Добавляем безусловное инкрементирование другого элемента глобальной структуры после вызова функции: 1320 миллионов.

Переносим это инкрементирование внутрь if(1): ничего не меняется.

Меняем условие на if(result): скорость уменьшается в три раза, 467 миллионов/c.

Не так заметно, как на живой программе, но всё же.
Пока все треды писали, они писали быстро. Потом большинство писать перестало, а оставшееся меньшинство стало писать втрое медленнее. Фигня какая-то..

Re: оффтопик про CUDA

Если ты пишешь в глобальную память все результаты и если только "позитивные" - второй вариант сильно медленнее, при том что позитивных одна миллионная?

Re: оффтопик про CUDA

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

Re: оффтопик про CUDA

Э, ну если указатель был на shared, а потом это место никак не используется - то я бы заоптимизировал.

Но тогда запись *всех* результатов в global mem - тоже должна быть "медленной" в том смысле, что не оптимизированной в ноль

Да не, современный мыскуль

Да не, современный мыскуль уже почти хорош в плане транзакционности. Другое дело, что нормальные запросы там бывает сложно написать, но последователям .DBF не привыкать. Собственно, фиг с ним, с мыскулем, раз уж пЕсатели его выбрали, но можно же иногда без автокоммита работать?

дешевизной миннимально

дешевизной миннимально достаточного решения? :)

когда я работал в .м, кстати, я пытался продвинуть идею, что неплохо бы и на шареде давать возможность пользовать постгресом ... идея не прошла ...

А любов хостеров к мыскулю ты

А любов хостеров к мыскулю ты чем объяснишь? "Берём..." -- что?

На самом деле очень просто

На самом деле очень просто объясним. Берем шаред хостинг, и смотрим сколько хостеров дают мускуль, а сколько - постгрес ...

Re: оффтопик про CUDA

Функция имеет тип void, а результат возвращает в переменную через переданный ей указатель. Если компилятор решил такое заоптимизировать в ноль, то его аффторов надо гнать погаными тряпками вон из профессии.
Надо будет проверить, правда ли это..

Re: оффтопик про CUDA

А я тут подумал, куря на балконе, что если у тебя результат вызова функции нигде не используется, то не мог ли оптимизатор просто весь этот вызов спилить вникуда?

Re: оффтопик про CUDA

вот насчет предикатов непонятно. в мануале написано, что так могут оптимизироваться операции из 4-7 команд, а сколько занимает копирование 8 байт, я не знаю.
В любом случае, это быстрая опреация, пусть бы остальные треды в это время постояли, это на общем фоне сущая мелочь, а оно почему-то страшно тормозит.

Профайлер еще не пробовал, за идею спасибо, она мне почему-то в голову не пришла :)

Re: оффтопик про CUDA

По идее, такие 1-2 команды должны оптимизироваться в команду с предикатом т.е. конечно пока в одном треде варпа она исполняется - все остальные будут стоять, но и все.

А че профайлер говорит про это? Он, конечно, не operator-level (уроды), но об какое место тормозит можно, наверное, понять.

Re: оффтопик про CUDA

Даже не atomic. Простая условная запись даже в одну и ту же ячейку тормозит процесс на порядки.
if(match) {
matchingArgs[0] = arg;
}

arg представляет собой unsigned char[8].
matchingArgs - глобальный массив, объявленный с атрибутом __device__. (Если быть совсем точным, это часть структуры, состоящей из счетчика, семафора, флага переполнения и собственно массива, но не думаю, что это принципиально).

А если написать if(1), что вероятно оптимизируется компилятором в отсутствие if вообще, то торможения практически нет. То есть, проблема не в самой по себе записи, а именно в её условности.

Так существуют какие-то идеологически более правильные способы возвращать такие наборы результатов?

Не так и просто на это налететь, обычно оно на полдороге не

Не так и просто на это налететь, обычно оно на полдороге не ломается.

Но ломается - да, больно.

Объясним, это DBF 21-го века!

Объясним, это DBF 21-го века!

Re: оффтопик про CUDA

И что if(..) globalArray[atomicAdd(&counter,1)]=index тормозит весь процесс на порядки? Удивительное рядом.

Это, я так понимаю, в шестерке? Надо будет посмотреть, сохра

Это, я так понимаю, в шестерке? Надо будет посмотреть, сохранился ли этот баг в семерке, там работа с БД существенно переделана, в том числе и в части поддержки транзакций.

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

Но сам факт буквально всенародной любви к мусклю при том, что есть более-менее нормальная реализация sql - необъясним.

Re: оффтопик про CUDA

примерно один-два на миллион

Re: оффтопик про CUDA

А сколько этих самых ненулевых результатов, ну примерно?

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

Если их относительно много - то накопить все результаты и потом, отсортировав, выкинуть ненужное - будет быстрее.

Re: оффтопик про CUDA

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

Re: оффтопик про CUDA

Я не вполне понимаю твою задачу, но вот например:
- писать в выходной массив всегда (пару вход/результат)
- потом их отсортировать по результату.

У тебя же проблема не только в if(res) но и в том, что счетчик надо считать из глобальной памяти, потом записать что-то куда-то (относительно рандомная локация в рамках треда), потом и счетчик записать тоже.

Pages

Subscribe to comments_recent_new