Pull to refresh
78
0
Андрей @Goodrone

User

Send message
Альтернативный пример: CutePDF Writer, не open source, но бесплатно. Делает виртуальный принтер, отправляешь что-нибудь на печать — получаешь PDF. Далее напечатать брошюрой может, скажем, бесплатный Adobe Reader.
Посоветуйте, пожалуйста, современную литературу (или статьи) про ловушки 64-битной архитектуры и подводные камни OpenMP.
Вроде работает. Что-то не так?
А вот я думаю, что это очень вкусный торт, ибо они ещё и хранят историю изменений. А с технической стороны проблем не вижу — хранить в двух форматах считаю вполне правильно, главное чтобы пользователю не было так больно.
всё это конечно здорово, но всё это не от хорошей жизни. На нормальных сайтах (e.g. Stack Overflow) писать текст — сплошное удовольствие. хабр всё ещё не торт
Голосую за топик про метаклассы.
Спасибо, очень качественная статья, последовательная и с примерами. Прям справочный материал)
Да, CFD есть, и причём много — смотрите по CUDA Zone, там даже поиск есть (правда у меня в опере тот флеш не работает). CFD, кажется, к линейным разреженным системам сводится? Я как раз ими занимался :)
1. В двух словах о том, как портируют на CUDA и о том, что вообще можно портировать. CUDA — массивно параллельная архитектура, там эффективность начинается, когда есть тысячи, а лучше — десятки и сотни тысяч потоков, которые совершают, вообще говоря, одинаковые или очень похожие вычисления над данными. Идеальный случай, когда есть цикл, все итерации которого взаимно независимы, тогда сразу же тело этого цикла выносим в «функцию» (которая называется kernel) и вместо цикла запускаем параллельно эту функцию.

Но чаще между итерациями есть зависимость, тогда, собственно, начинается самая интересная часть работы — распараллеливание, то есть анализ алгоритма. Цель, опять же, добиться массивного параллелизма.

Кроме того, портируемая задача должна быть вычислительно ёмкой (а не сводиться к постоянной работе с памятью), потому что вычисления там происходят очень быстро, а вот память обладает очень большой латентностью (цифры порядка 400-600 тактов на единичную транзакцию без объединения). Есть shared memory, находящаяся на кристалле рядом с вычислительными ядрами, она быстрая и позволяет потокам внутри группы обмениваться данными. Модель памяти достаточно сложная (ну, для новичка): global memory, constant memory, texture memory, shared memory, register memory, local memory. Всё это нужно разруливать вручную. Знать правила работы с памятью необходимо для оптимального использования ресурсов GPU. По сути это вторая по сложности часть портирования алгоритма, здесь речь идёт об ускорении в 1,5 — 7 раз.

Посоветую почитать приложения на CUDA Zone, там есть много PDF, описывающих задачу, особенности реализации и полученный результат. Если будете что-то реализовывать самостоятельно — обязательно CUDA Programming Guide (технический первоисточник).

2. Кластеры как и обычно. Есть узлы, между которыми как правило MPI, в каждом узле может быть несколько GPU — там надо на низком уровне разруливать, обращение к каждому GPU должно быть из отдельного потока на CPU. То есть никаких дополнительных удобств/абстракций, насколько мне известно, пока нет (хотя я MultiGPU не занимался). В частности SLI для CUDA не работает.
Конечено не самый большой специалист :) ну а вдруг.
Технология NVIDIA CUDA
Люди из NVIDIA в России говорят кУда
Ext3, кстати, хорошо дружит с вендой.
…если я в пьяном виде…
Всё хорошо в меру.
Хм, а можно как-то его заставить играть FullHD (1080p)?
Это что-то не так, если при работе CUDA не работает ОС :) (Максимум могут быть проблемы, если меняется графический режим, и новый будет требовать больше памяти, чем предыдущий, а вся свободная использована под приложение.)
Безусловно, видеокарты нынче показывают феноменальную производительность на достаточно узкой категории задач (особенно двухчиповые), примерно в 8 раз быстрее хорошего кода на обычном x86 процессоре.
Откуда такая информация? Прирост вполне может составлять 10—50 раз. Если конечно не сравнивать «плохой» код на GPU с «хорошим» кодом CPU.

А вообще неплохо бы код раскрасить да лишние переносы строк убрать…
Спасибо! По-моему у вас отличный код :) Чувствуется опыт C++ :)
Разве что я делаю немного другой импорт:
from PyQt4.QtCore import *
from PyQt4.QtGui import *

И тогда не надо лишний раз использовать Qt.* (что удобно, так как имена всех классов начинаются на Q). Сам Qt при этом тоже будет доступен (чтобы брать из него константы).
Даже вспомнился собственный топик на эту же тему :)
Для васиного стартапа звёздочка легко заменяется на восьмёрку. (Офтопик: А откуда вообще взялись ограничения на символы в пароле? Ну я понимаю там длина от трёх до 100 символов, но какая разница, какие символы?)
Ну а длину пароля изначально можно взять побольше, раз нашёлся такой Петя, который требует 8 символов.

В большинстве случаев бытовых похождений по стартапам такая схема вполне работает, при чём затраты времени сводятся к минимуму, а переносимость практически абсолютная.
Позвольте посоветовать. Выберите один густой пароль, допустим Ghb7T*k. Заходя на какой-нибудь сайт, возьмите доменное имя второго уровня и вставьте третью букву из него в конец пароля. Для хабра получится Ghb7T*kb, для Google будет Ghb7T*ko.

Таким образом, у вас будут более-менее разные пароли на разные сервисы. Запомнив (пальцами) один густой пароль и правило для производных паролей, вы серьёзно решите большинство проблем.

Я показал лишь самый базовый вариант, но его можно развить. Можно добавить предпоследнюю букву логина, с помощью которого вы заходите на сайт. Можно вместо самой буквы нажимать Shift+«одна клавиша выше и левее» на клавиатуре. Ну и конечно вставлять не в конец, а куда-нибудь в середину. Это как вам удобнее.

PS. Раньше пользовался KeePass, но с тех пор, как утерял файл со свежими паролями (за полгода где-то; бэкапов более старой версии было предостаточно), постепенно перехожу на такую схему.
1
23 ...

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Registered
Activity