Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
vivan
Пол: Постоянный гость Рега: 20.03.2009 Сообщения: 460 Откуда: Спб Страна: Россия
|
Добавлено: Пт Сен 23, 2011 9:01 pm Заголовок сообщения: |
|
|
Aggressor
нет, не смущает. Я показал что сравнение и замену можно заменить на простые и весьма быстрые вычисления. Дальше нужно какое-нибудь разбиение на потоки, где циклы будут примерно одинаковое число раз выполнятся.
W_aZZa
да, разрешены. Но каждый условный переход в большинстве случаев серьезно снижает производительность, приближая ее к скорости wave front'а / warp'а т.е. до 32/64 раз медленнее. Это одна из самых серьезных проблем, которая весьма затрудняет реализацию алгоритмов, отличных от элементарных.
А мультипоточность - это самая малая из проблем. Сейчас все ресорсоемкие приложение поддерживают дофига потоков. Там, например, coreavc, x264 и 7zip поддерживают неограниченное число потоков, но реализации их (либо полноценных аналогов) полностью полагающихся на GPGPU нет и не будет... |
|
Вернуться к началу |
|
|
Aggressor
Пол: Модератор Рега: 07.03.2007 Сообщения: 2343 Откуда: Киев
|
Добавлено: Пт Сен 23, 2011 10:38 pm Заголовок сообщения: |
|
|
vivan
Напрасно не смущает. For...next ведь тот же if...then, а ты говорил, что ифы ложат видяху на лопатки. ) Более простым языком: внутри for выполняется точно такой же условный переход, как и if.
Кроме того, твой метод абсолютно однопоточный и распараллелить его в принципе не получится. Фейл. |
|
Вернуться к началу |
|
|
vivan
Пол: Постоянный гость Рега: 20.03.2009 Сообщения: 460 Откуда: Спб Страна: Россия
|
Добавлено: Пт Сен 23, 2011 10:53 pm Заголовок сообщения: |
|
|
Ох... Какое есть ветвление в цикле? Либо цикл закончился, либо нет. Все.
В данном случае если будет много одинаковых циклов, которые будут иметь одинаковое количество итераций - ветка условного перехода будет идентичной - повторение цикла.
Если в одном потоке цикл закончится раньше - то поток будет простаивать и его нельзя будет ничем нагрузить. Цикл, который будет работать дольше всех - будет работать в гордом одиночистве. Но в целом все будет более-менее нагружено.
А при любом анализе ветки будут разные (иначе в анализе смысла вообще нет).
Aggressor писал(а): | Кроме того, твой метод абсолютно однопоточный и распараллелить его в принципе не получится. Фейл. | Баблсорт - да, ужас. Это единственная сортировка в мире?) |
|
Вернуться к началу |
|
|
Aggressor
Пол: Модератор Рега: 07.03.2007 Сообщения: 2343 Откуда: Киев
|
Добавлено: Пт Сен 23, 2011 11:18 pm Заголовок сообщения: |
|
|
vivan писал(а): | Какое есть ветвление в цикле? Либо цикл закончился, либо нет. Все. | А что такое ветвление в принципе? Либо то, либо другое, всё.
vivan писал(а): | Это единственная сортировка в мире?) | Так ты уж определись: сортировка без условных переходов или многопоточная. Всё не так просто! |
|
Вернуться к началу |
|
|
vivan
Пол: Постоянный гость Рега: 20.03.2009 Сообщения: 460 Откуда: Спб Страна: Россия
|
Добавлено: Сб Сен 24, 2011 9:50 am Заголовок сообщения: |
|
|
Aggressor писал(а): | vivan писал(а): | Какое есть ветвление в цикле? Либо цикл закончился, либо нет. Все. | А что такое ветвление в принципе? Либо то, либо другое, всё. | Нет.
При цикле, если он не закончился - то абсолютно идентичный цикл выполняется еще раз, в каждом потоке одновременно. Если закончился - поток проставает.
При ветвлении - сначала часть потоков будет выполнять одну ветку, а другие простаивать (т.к. ветки разные), потом - другую.
Если таких веток будет много, одна в другой - то будет очень весело.
Aggressor писал(а): | vivan писал(а): | Это единственная сортировка в мире?) | Так ты уж определись: сортировка без условных переходов или многопоточная. Всё не так просто! | Ок.
1) Берем массив из n натуральных чисел (для других просто значения будут другими, менее очевидными). Разбиваем его на квадрат со стороной k = √n (округленное вверх), лишнее заполняем нулями.
2) Каждый из k потоков выполняет 1 проход баблсорта (т.е. k-1 итераций цикла, в котором максимальный из двух соседних элементов получается с большим номером) для своей строки
3) -//- для своего столбца.
Таким образом самый большой элемент оказывается в углу, с номером k²-1.
4) Пихаем его последним элементом в новый массив (который будет результатом). А в старом массиве заменяем его на 0.
5) Выполнем 3, 4, 5 n раз.
Вот тебе модификация баблсорта, которая работает за те же O(n²), но в √n потоков. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы можете добавлять приложения в этом форуме Вы можете скачивать файлы в этом форуме
|
|