Pull to refresh

Comments 25

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

threat — это угроза, а имелось в виду слово threadпоток. Разница огромная

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

Спасибо за внимание, больше постараюсь не брюзжать :)
ну во-первых не threat, а thread.
во-вторых, использование или не использование потоков это очень контексто-зависимый параметр. Где-то можно и обойтись, а где-то нет. Опять же там где можно обойтись не всегда стоит обходиться. Вообщем вопрос ни о чем, ибо слишком абстрактен
Вообще вопрос ни о чем, ибо слишком абстрактен
Вот как раз эту абстракцию я и хочу развязать написав свой компилятор
Ошибки… Я пьян. гик =) threat — thread… игра слов.
Я бы даже сказал не лишённая смысла.
Завтра допишу что смогу…
А пока сильно не пинайте.
Я просто хочу узнать ваше мнение.
Правильно ли я рассуждаю о недостатках паралельного програмирования.
хе, компилятор которым можно будет пользоваться одинаково для всех задач? или как? я же говорю все зависит от задачи и только от нее
Я не буду писать пьяным на хабр, я не буду писать пьяным на хабр, я не буду писать пьяным на хабр…

Распечатать и повесить на стену!
Я буду писать пьяным на хабр!!!
Да компилятор который сам будет вычислять наиболее подходящее кол-во потоков,
наиболее подходящие реализации функций, учитывающий аппаратное особенности каждого ядра,
как и для видеокарты, так и для процессора, так и для совсем постороннего компьютера.
В котором будет реализовано большое количество hardхаков и будет система
дамамайнинга для выборки наиболее подходящих.

Всё это будет реализовано в виде нейронной системы для которой можно разработать
системы генетического счисления для само-оптимизации. =)
Ок. Хотя бы компилятор пьяным не пишите.
На самом деле в некоторых ситуациях 16 потоков на 4х процессорах могут выполнить задачу быстрее, чем 4 потока на 4х процессорах. Если эта задача в каких-то местах не нагружает собственно сам процессор, а использует различные DMA или обращения к другим устройствам напрямую.
Попытка написать компилятор для решения этой задачи это попытка создать универсальное решение, которое не существует. Разве что вы сможете найти хороший генетический алгоритм. Но наиболее близким решением я здесь вижу создание компилятора, который будет строить различные гипотезы (переводить отдельные части исходного текста в различные машинные последовательности) и затем проверять их (запускать данные машинные последовательности, находя наиболее оптимальные по заданному числу параметров). В таком виде компилятор может давать существенно более эффективный код при правильном подходе. Но компилировать он будет очень долго))).
Да да… я именно и хочу использовать ДатаМайнинг, Генетику и муравьёв… =)
Для определения оптимального количества потоков и схемы распределения динамической памяти.
Просто я в этом напишу только сегодня вечером.
Вы о производительности всех алгоритмов так судите обычно — на выпуклый военно-морской глаз и записи в блокноте, или все же иногда пользуетесь профилировщиками и другими тулами, типа Intel Parallel Studio?
Про Intel Parallel Studio и прочее я напишу в следующей заметке.
Не пишите на Хабр будучи пьяным. Я — тот-самый дед-кодер, со знанием ассемблера и грязных хаков по оптимизации код, от лица все нас, благословляю вас всех на облачную структуру.
Как вспомню этот ужас — содрогнусь, сколько времени было потрачено, чтоб софт более-менее нормально работал.

Не знаю, проработав с многопоточкой год, а уже на автомате проставляю блокировки и вижу эффективные стратегии использования ресурсов с минимальным количеством блокировок. Насколько они эффектвные — не знаю, но вроде никто не жалуется.

Потоки то нужны не только для распараллеливания одной задачи, но и для параллельного выполнения разных.
Насколько они эффектвные — не знаю.
А я хочу узнать и оптимизировать по-максимуму возможностей.
оптимизация под существующие процессы это жесть, x86 асму со всеми расширениями знаешь? а ATI CTM IL? может nVidia ptx 2.0?
что получится — так это оптимизировать по максимуму своих возможностей
Разработчики Nvidia говорят на английском языке, поэтому «сменой режимов ядра CUDA» они это назвать не могли. По вашему же переводу совершенно не понятно что имеется в виду. Смена ядер CUDA? Инициализация CUDA? Переключение графического контекста между процессами?

По крайней мере на счет смены ядер, мой опыт показывает, что он занимает порядка 10 миллионых долей секунды, что по-моему весьма не плохо.
«сменой режимов ядра CUDA»
Перевёл это так я…
Разрабы, а пилял я их долго, очень морозились по этому поводу.

Смена режима ядра — это когда кусок кода с дерективой __kernel не может быть обработан на GPU и
переносится из памяти кода в оператву для выполнения процессором.
Копия этого кода может быть сохранена для подальшего использования, либо стёрта если в ней нет больше необходимости…

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

Если вам это ничего не сказало берите Id'у PRO и пилите Photoshop CS4.
Ещё перед установкой фотошопа нада поставить Cud'у.

Reversing ещё никто не отменял.
Увидите там много чего интересного и «тупого».
Эмс, дата-параллельное железо подходит только для одноимённых задач. Я больше по ATI карточкам — но в что нужно некоторые функции выполнять на проце верится слабо. Разве что если очень маленькие массивы с параметрами — тогда это имеет смысл. И поверьте от этого только плюс производительности системы. «Оптимальное количество потоков» на этапе компиляции — бред, про ThreadPool слышали? Он позволяет абстрагироваться от количества ядер и использует всегда столько потоков сколько ядер в системе. Узнать количество ядер в системе пользователя на этапе компиляции — невозможно ))) Почитайте в нете про латентный параллелизм.
«Оооо может лучше я объявлю несколько потоков для обработки этого цикла, а может быть он исполниться когда-то на 64 ядерной машине» — потоки должны создаваться динамически и только. Исключение — программирование приставок, спец. контроллеров.

Плюс конкурентная работа процессов по принципам erlang SIP тоже очень классная концепция. Асинхронно выполняются легковесные процессы которые могут обмениваться сообщениями без блокировки. Реализованно в Erlang, Haskell плюс можно сделать руками.
ThreadPool, ThreadPool'ом
Но вот оптимальное количество потоков очень абстрактное понятие
так как оно влияет на загрузку памяти, простой, задержки и т.д.

Я хочу разбирать его не на высоком уровне аля ITB, а почти-что самом ассемблере.
С учётом архитектуры и генетической оптимизации+датамайнинга.
Надо бы побыстрее написать вторую часть.

Но в что нужно некоторые функции выполнять на проце верится слабо…

Я инверсил фотошоп СS4 с использованием CUDA может когда-то и опубликую здесь результаты.
Но из 30-40 ассемблерных комманд GPU стека пропрыгивают 5-6 CPU'шных, например целочисельных
формирующие определённые функции.

Верится-не верится дело ваше — Ida в помощь.
Если хотите проверить мои слова, просто дизассемблируйте пару фильтров Фотошопа.
«Люди забыли что у шейдерного конвейера ограниченная точность и набор комманд.
Вот ему и приходится иногда сбрасывать часть кода на выполнение в процессор.»

у любого конвейера ограниченная длина, набор команд у декодера и он ограничен у любого устройства иначе это был бы философский камень, а не процессор.
Вот и я о том же…
Что всему нужно выполнять свой код, оптимизированный для выполнения на данной архитектуре.
Собственно в этом и суть будешей разработки.
Sign up to leave a comment.

Articles