Pull to refresh
64
0
Яхнев Александр @Yakhnev

User

Send message

Когда использовать Parallel.ForEach, а когда PLINQ

Reading time 13 min
Views 74K

Введение


Обычно, при оптимизации программы для многоядерных компьютеров первым шагом является выяснение возможности разделения алгоритма на части, выполняющиеся параллельно. Если для решения задачи необходимо параллельно обрабатывать отдельные элементы из большого набора данных, то первыми кандидатами станут новые возможности параллельности в .NET Framework 4: Parallel.ForEach и Parallel LINQ (PLINQ)

Parallel.ForEach


Класс Parallel содержит метод ForEach, представляющий собой многопоточную версию обычного цикла foreach в C#. Подобно обычному foreach, Parallel.ForEach выполняет итерации над перечислимыми данными (enumerable), но с использованием множества потоков. Одна из более часто используемых перегрузок Parallel.ForEach выглядит следующим образом:

public static ParallelLoopResult ForEach<TSource>(
			 IEnumerable<TSource> source,
			 Action<TSource> body)

Ienumerable указывает на последовательность, по которой нужно выполнить итерации, а Action body задает делегат, вызываемый для каждого элемента. Полный список перегрузок Parallel.ForEach можно найти здесь.

PLINQ


Родственный с Parallel.ForEach PLINQ представляет собой модель программирования для паралелльных операций над данными. Пользователь определяет операцию из стандартного набора операторов, включающих в себя проекции, фильтры, агрегирование и т.д. Подобно Parallel.ForEach PLINQ достигает параллельности, разбивая входную последовательность на части и обрабатывая элементы в разных потоках.
В статье выделяются различия между этими двумя подходами к параллельности. Разбираются сценарии использования, в которых лучше всего использовать Parallel.ForEach вместо PLINQ и наоборот.

Выполнение независимых операций


Читать дальше →
Total votes 79: ↑73 and ↓6 +67
Comments 9

Используем Google Voice Search в своем приложении .NET

Reading time 3 min
Views 130K


Функция распознавания речи с некоторого времени доступна в браузере Google Chrome. Посмотреть как это выглядит можно, например, здесь.

Так как исходный Chromium открыт, возникает закономерное желание подсмотреть, можно ли использовать технологию в своих корыстных целях наступления мира на земле.

Как это часто бывает, все уже сделано за нас в этой статье. Все оказывается очень просто, необходимо сделать POST запрос на адрес www.google.com/speech-api/v1/recognize со звуковыми данными в формате FLAC или Speex. Реализуем демонстрацию распознавания WAVE-файлов с помощью C#.

Читать далее
Total votes 80: ↑72 and ↓8 +64
Comments 25

Жаргон программистов

Reading time 4 min
Views 64K
Наткнулся на Stackoverflow.com на интересный топик с вопросом о новом в программистском жаргоне. Предлагаю здесь подборку наиболее интересных выражений.

Египетские операторные скобки

if (a == b) {<br>  printf("hello");<br>}<br><br>
Читать дальше →
Total votes 314: ↑284 and ↓30 +254
Comments 282

WPA теперь может быть взломан за 1 минуту

Reading time 1 min
Views 6.4K

Исследователи из Японии (Toshihiro Ohigashi из университета Hiroshima и Masakatu Morii из университета Kobe) разработали способ для взлома шифрованного соединения WPA всего за одну минуту.
Атака производится чтением шифрованного трафика между компьютером и роутерами, использующими шифрование WPA.
Ранее, в ноябре прошлого года, сообщалось о возможности обхода защиты за 15 минут.

Атака работает только на WPA системах, использующих алгоритм Temporal Key Integrity Protocol (TKIP), но не работает на системах, использующих WPA с шифрованием AES.

Согласно отчету авторов атаки, существуют значительные ограничения для ее использования, тем не менее, следует избегать шифрования WPA с TKIP, равно как и протокола WEP, давно считающегося очень ненадежным.

Оригинал: ZdNet.com
Total votes 50: ↑44 and ↓6 +38
Comments 39

Предел Бреммермана — невычислимые задачи

Reading time 3 min
Views 3.6K


Шутки шутками, но что, если задуматься об объеме такого «жесткого» диска?
В 1964 году Ханс Бреммерман опубликовал статью «Optimization through evolution and recombination», главный вывод который заключается в следующем:

Не существует системы обработки данных, искусственной или естественной, которая бы могла бы обрабатывать более чем 2×10^47 бит в секунду на грамм своей массы.

Масса Земли оценивается примерно в 6×10^27 г, а возраст 10^10 лет, год состоит из приблизительно 3.14×10^7 секунд. Наша воображаемая компьютерная система смогла бы обработать 2,56×10^93 бит, округляя до порядка 10^93 бит.

Задачи, требующие обработки более чем 10^93 бит информации называются трансвычислительными задачами. К сожалению, комбинаторика говорит нам, что что такой предел может быть достигнут для задач даже относительно небольшого размера. Например, в распознавании образов: пусть есть массив q*q, каждый элемент которого может быть раскрашен одним из k цветов, тогда всего вариантов раскраски может быть k^(q*q). Если массив 18×18, то задача трансверсальна при двух цветах, для массива 10×10 становится трансверсальной при 9 цветах. Понятно, что рассмотреть все варианты образов сетчатки глаза, имеющий порядка миллиона светочувствительных колбочек, невозможно. Еще один пример такой задачи — тестирование микросхемы, у которой 308 входов и всего 1 выход.

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

Доказательство предела Бреммермана
Total votes 43: ↑41 and ↓2 +39
Comments 25

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity