Даёшь SIMD с человеческим лицом
Apr. 16th, 2010 12:39 amВопрос к Паре–тройке человек, которые понимают в параллельных вычислениях.
Часть задач хорошо представляются форме MIMD и неплохо выполняются на параллельных CPU (и даже на «полутораядерных» процессорах с Intel HyperThreading). Это те задачи, которые разбиваются на сравнительно небольшое количество массивных кусков с хорошей кучностью, предсказуемостью и «монотонностью» обращения к данным. Например, сжатие видео и звука или даже перемножение матриц как тривиальным способом, так и алгориѳмом Штрассена вполне к ним относится. А сортировки одномерных массивов — не вполне, т.к. скачут по памяти, как ненормальные.
Другая же часть хорошо представляется как SIMD и может работать, например, на GPU (хотя сам факт того, что такие хорошие параллельные вычислительные модули намертво вмуровывают в графические ускорители, возмущает многих, в т.ч. и меня). Здесь требуется ещё больше единообразия, за счёт чего достигается возможность пропустить через несколько десятков туповатых, но шустрых процессоров безумное количество данных. К таким задачам относятся, например, отдельные шаги алгориѳма Гаусса решения СЛАУ (и прочих векторных алгоритмов). А весь метод Гаусса монолитно загонять в SIMD уже смысла нет (а у GPU и ума на него может не хватить).
Для первого класса задач в не таком уж и далёком 1997 году была сделана такая замечательная вещь, как OpenMP, которая года с 2005 без дополнительных усилий поддерживается на системах для домохозяек и для использования требует (а точнее не требует) соответствующей квалификации. И если в конце 1980-х советская домохозяйка могла обсчитать будущее вязаное изделие при помощи, скажем, «Микроши» (http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%88%D0%B0), то через 20 лет её дочка уже спокойно могла это сделать в несколько потоков при помощи почти (не в терминах теории меры, разумеется) любого ПК с почти любой ОС.
Для второго же класса задач до сих пор требуется хорошенько помучиться с вещами типа OpenCL, например. Вроде как сами по себе они относительно удобные, но пока настроишь, забудешь для чего вообще собрался их использовать.
Теперь полтора вопроса: есть ли в области SIMD для домохозяек подвижки в направлении чего-нибудь по юзабельности близкого к OpenMP и вообще доколе?
Спасибо.
Часть задач хорошо представляются форме MIMD и неплохо выполняются на параллельных CPU (и даже на «полутораядерных» процессорах с Intel HyperThreading). Это те задачи, которые разбиваются на сравнительно небольшое количество массивных кусков с хорошей кучностью, предсказуемостью и «монотонностью» обращения к данным. Например, сжатие видео и звука или даже перемножение матриц как тривиальным способом, так и алгориѳмом Штрассена вполне к ним относится. А сортировки одномерных массивов — не вполне, т.к. скачут по памяти, как ненормальные.
Другая же часть хорошо представляется как SIMD и может работать, например, на GPU (хотя сам факт того, что такие хорошие параллельные вычислительные модули намертво вмуровывают в графические ускорители, возмущает многих, в т.ч. и меня). Здесь требуется ещё больше единообразия, за счёт чего достигается возможность пропустить через несколько десятков туповатых, но шустрых процессоров безумное количество данных. К таким задачам относятся, например, отдельные шаги алгориѳма Гаусса решения СЛАУ (и прочих векторных алгоритмов). А весь метод Гаусса монолитно загонять в SIMD уже смысла нет (а у GPU и ума на него может не хватить).
Для первого класса задач в не таком уж и далёком 1997 году была сделана такая замечательная вещь, как OpenMP, которая года с 2005 без дополнительных усилий поддерживается на системах для домохозяек и для использования требует (а точнее не требует) соответствующей квалификации. И если в конце 1980-х советская домохозяйка могла обсчитать будущее вязаное изделие при помощи, скажем, «Микроши» (http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%88%D0%B0), то через 20 лет её дочка уже спокойно могла это сделать в несколько потоков при помощи почти (не в терминах теории меры, разумеется) любого ПК с почти любой ОС.
Для второго же класса задач до сих пор требуется хорошенько помучиться с вещами типа OpenCL, например. Вроде как сами по себе они относительно удобные, но пока настроишь, забудешь для чего вообще собрался их использовать.
Теперь полтора вопроса: есть ли в области SIMD для домохозяек подвижки в направлении чего-нибудь по юзабельности близкого к OpenMP и вообще доколе?
Спасибо.
no subject
Date: 2010-04-16 09:08 am (UTC)это не то лицо, которое ты ищешь?
no subject
Date: 2010-04-16 09:18 am (UTC)Алсо вот такая штука есть (вернее по большому счёту не есть, а будет): http://www.cs.lth.se/home/Calle_Lejdfors/pygpu/ - тоже ня.
Но тут вот ещё в чём вопрос: и то, и другое убьёшься настраивать. На уровне буквально сисадмина, а не программиста. Потому как видеодрова, если их не пинать три часа ногами, вроде не дают сами по себе такого интерфейса. Я что-то слышал про DirectX 11, но для таких целей хотелось бы открытой реализации под все ОС.
А вот OpenMP уже давно не надо настраивать. Оно само и везде.
no subject
Date: 2010-04-16 09:25 am (UTC)Надо под линухом дома попробовать будет...
no subject
Date: 2010-04-16 09:33 am (UTC)у них же есть система для программирования на псевдо С++ для CUDA. Она хуже openMP? Или тоже надо долго настраивать?
no subject
Date: 2010-04-16 09:36 am (UTC)Но на самом деле глянь в Педивикии примеры кода OpenCL и OpenMP и почувствуй разницу.
Алсо см. комменты выше - пара разумных ссылочек н аэту тему уже есть.