Надо будет добраться до этого письма. Оно наверняка у меня где-то в хаскельных мейллистах на работе.
Кстати, Булат там неправ. GPU работают как "обычные" процессора. Внутри них нет никакого dataflow, да он им и не нужен, у них и так все хорошо с параллельностью.
Вся система глубоко конвейерезирована (конвейеризована? pipelined, короче). Участок конвейера в HuperTree будет просто поставлять данные к вычислителям. Он внесет задержку, растягивать время такта не должен. Задержка в коммутационной сети действительно получится больше, чем задержка на вычислениях. Попытаемся компенсировать ее большим количеством вычислений и толстым каналом. ;)
HyperTree симпатична регулярностью структуры. Элементы иерархии достаточно примитивны.
Я походил, подумал, пришел к выводу, что расширение канала мне все равно нужно и не даст большого увеличения накладных расходов. Ну, в сравнивающем устройстве все равно это будет сложность N*M (N - количество входов, M - количество ячеек памяти), постараемся ее побороть, опять же. ;)
По поводу конвейеров. Недавно напоролся на чудеса branch prediction (или как его там). В скелетной анимации положение вершины считается как сумма ВЕС_i*(МАТРИЦА_ПОВОРОТА[3x3]_i*ВЕРШИНА + ВЕКТОР_ПЕРЕМЕЩЕНИЯ_i). Казалось бы, простым if (ВЕС_i==0) можно отсечь кучу лишних сложений и умножений. Однако, после того, как я закомментировал if-ы, считаться стало чуть-ли не в 1.5 раза быстрее. Вот такие вот они, современные процы ;) Причем, я еще могу понять GPU, на котором DP в один такт, а условия непонятно во сколько. Но обычный Athlon64, да еще код, скомпилированный 32-битным компилером без указания архитекутуры..
И собсно вопрос. HyperTree от условных выражений вообще загнется, или условия как-то вписываются в data-flow архитектуру?
Я в курсе, что он прекрасно параллелится в императивном стиле. Более того, в какой-то статейке "почему pthread - это плохо" он приводился как пример алгоритма, который параллелится _ваще_без_всяких_локов_. А полная луна была в четверг.
Comments 24
http://article.gmane.org/gmane.comp.lang.haskell.cafe/23473
Собсно, не будет ли HyperTree (как я понимаю, некая дополнительная логика) отнимать больше времени, чем сами вычисления?
И еще (я в железе ничего не понимаю), почему тупое расширения канала сложнее в реализации, нежели дополнительная логика?
Reply
Кстати, Булат там неправ. GPU работают как "обычные" процессора. Внутри них нет никакого dataflow, да он им и не нужен, у них и так все хорошо с параллельностью.
Reply
Вся система глубоко конвейерезирована (конвейеризована? pipelined, короче). Участок конвейера в HuperTree будет просто поставлять данные к вычислителям. Он внесет задержку, растягивать время такта не должен. Задержка в коммутационной сети действительно получится больше, чем задержка на вычислениях. Попытаемся компенсировать ее большим количеством вычислений и толстым каналом. ;)
HyperTree симпатична регулярностью структуры. Элементы иерархии достаточно примитивны.
Я походил, подумал, пришел к выводу, что расширение канала мне все равно нужно и не даст большого увеличения накладных расходов. Ну, в сравнивающем устройстве все равно это будет сложность N*M (N - количество входов, M - количество ячеек памяти), постараемся ее побороть, опять же. ;)
Reply
По поводу конвейеров. Недавно напоролся на чудеса branch prediction (или как его там). В скелетной анимации положение вершины считается как сумма ВЕС_i*(МАТРИЦА_ПОВОРОТА[3x3]_i*ВЕРШИНА + ВЕКТОР_ПЕРЕМЕЩЕНИЯ_i). Казалось бы, простым if (ВЕС_i==0) можно отсечь кучу лишних сложений и умножений. Однако, после того, как я закомментировал if-ы, считаться стало чуть-ли не в 1.5 раза быстрее. Вот такие вот они, современные процы ;) Причем, я еще могу понять GPU, на котором DP в один такт, а условия непонятно во сколько. Но обычный Athlon64, да еще код, скомпилированный 32-битным компилером без указания архитекутуры..
И собсно вопрос. HyperTree от условных выражений вообще загнется, или условия как-то вписываются в data-flow архитектуру?
Reply
:о))
Reply
Reply
"Подумаешь, Бином Ньютона!" :о))
Reply
Так я создаю будущее. Это можно и без бинома Ньютона. ;)
Reply
(The comment has been removed)
Reply
(The comment has been removed)
Нужно простое FIFO, можно несколько штук, латентность (судя по всему) не очень важна.
Reply
Reply
Более того, в какой-то статейке "почему pthread - это плохо" он приводился как пример алгоритма, который параллелится _ваще_без_всяких_локов_.
А полная луна была в четверг.
Reply
Reply
Reply
Reply
Leave a comment