-olle-55- Posted March 2, 2011 Posted March 2, 2011 доходчивая статейка:) .... Теперь самое интересное. Программа будет работать равноуспешно на системе с любым количеством ядер. В случае если у вас всего лишь одно ядро, то программа будет работать чуть хуже, чем наш первый однопоточный вариант. Зато если у вас два ядра, то — теоретически — задачу вы посчитаете в два раза быстрее, так как в системе появляется два потока (главный поток, создавший эти два потока-задания, ложится спать, ожидая окончания выполнения потоков), каждый из которых можно отдать на исполнение физическому ядру процессора, то есть выполнять их одновременно. PROFIT! Еще в мае прошлого года Intel показывала работающий прототип 48-ядерного процессора с архитектурой x86, которому вполне хватало воздушного охлаждения. То-то простора для программистских экспериментов! Перед тем как выполнять все эти скучные температурные расчеты, вы можете спросить у операционной системы, на которой в данный момент работает ваша программа, а сколько, собственно, процессорных ядер у нее за душой? Она говорит — ядер у нас N. Тогда вы разбиваете исходный массив на N частей, считаете его в N потоков и тем самым загружаете процессор полностью! (Поздравляю! Теперь вы 1С-программист, который еще и умет писать эффективные многопоточные приложения!) Но шутки в сторону! Практическая часть этой заметки подошла к концу, и мы с вами переходим к заключительной части. Ложка дегтя На первый взгляд, даже измученному сессией студенту-филологу может показаться, что писать программки для метеорологов, на 100% использующие возможности современных многоядерных процессоров, проще простого. Огорчу вас. Это, мягко говоря, не так. Во-первых, само по себе многопоточное программирование довольно сложная и коварная штука, и у многих программистов есть проблемы с возможностью представить себе в голове, как программа будет работать на самом деле. Вследствие этого, многопоточные приложения обычно подвержены появлению в них очень тонких и неочевидных ошибок, которые трудно воспроизвести и обнаружить (любознательные бегут в поисковик с запросами deadlock и race condition). Момент второй — переход от линейного решения задачи к многопоточному его варианту, который был бы при этом еще и эффективнее линейного, чаще всего есть весьма и весьма нетривиальная задача. Код такого решения почти всегда объемнее и сложнее линейного кода, а значит его дольше писать, сложнее отлаживать и дороже сопровождать. Более того, в мире существует огромное число задач, которые крайне неохотно поддаются распараллеливанию (даю подсказку, это такие, где каждый последующий шаг вычисления жестко завязан на результат работы предыдущего). В общем, умение писать хорошо масштабирующие по количеству ядер программы — это целое искусство. Лучшие умы человечества бьются над тем, чтобы упростить написание подобного рода программ. К примеру, есть целый класс языков программирования (так называемые функциональные языки), код на которых автоматически можно выполнять на любом количестве ядер. Одна проблема — языки эти довольно специфичны, они не очень хорошо подходят для решения целого ряда задач, и их доля на рынке колеблется в районе жалких пары процентов. Замечу, что, в противоположность экзотическим функциональным языкам программирования, существует целый ряд современных и популярных языков, которые вообще не поддерживают эффективную многопоточную модель. Например, к таким относится Python и Ruby. .... http://www.3dnews.ru/offsyanka/zanimatelnaya-mnogoyadernost/print и ещё пару, но по-серьёзней статьи Возвращение микроядерных операционных систем http://www.citforum.idknet.com/computer/2006-05/ На пути к переносимым параллельным программам http://citforum.univ.kiev.ua/programming/theory/parall_prog/ если у кого есть более свежие познавательные статьи, пожалуйста поделитесь.:) Интересуюсь, для своего расширения кругозора.:) ИМХО с уважением.:v: [sIGPIC]http://forums.eagle.ru/signaturepics/sigpic44790_4.gif[/sIGPIC] ____________________ AthlonII X3 3,3GHz / GA-990FXA-D3 / DDR3 2x4GB Team 1860MHz/ GoldenField 550W / 2Gb XFX HD7850 / LG 42"LM340T (3D)1920x1080
Dell_Murrey-RUS Posted March 2, 2011 Posted March 2, 2011 Если тебя интересует распределение вычислений как таковое, а так же дополнительная информация об этом вопросе и способах решения, то тебе сюда http://distributed.ru/ Кстати, вычисления на процессоре, это уже вобщем то прошлый век. Нормальные алгоритмизаторы и программисты уже давно распахивают поле вычислений на мощностях видеокарты. Достаточно сказать, что я на всех своих 4-х физических ядрах кор ай7 при 3.8 ГГц получаю общую производительность в ~60 Gflop, то используя ресурсы своей видеокарты радеон 5850 получаю 2200 Gflop. Почувствуй разницу. В основном, распределенными вычислениями и многопоточностью сейчас занимаются передовики распределенных вычислений на указанном выше сайте. При этом решаются задачи в соверешнно разных направлениях, начиная от предсказания погоды и заканчивая математическими проектами типа поиска чисел Мерсенна. Если что, пиши в личку. :) 2 MB: MPG-Z390 GP / i7 9700KF 4,8 ГГц / DDR4 64 Gb 3466 МГц / GTX 2080Super / Acer 43" ET430KWMIIQPPX 4k / Win 10
-olle-55- Posted March 2, 2011 Author Posted March 2, 2011 Если тебя интересует распределение вычислений как таковое, а так же дополнительная информация об этом вопросе и способах решения, то тебе сюда http://distributed.ru/ Если что, пиши в личку. :) очень интересно.:thumbup: 1 ИМХО с уважением.:v: [sIGPIC]http://forums.eagle.ru/signaturepics/sigpic44790_4.gif[/sIGPIC] ____________________ AthlonII X3 3,3GHz / GA-990FXA-D3 / DDR3 2x4GB Team 1860MHz/ GoldenField 550W / 2Gb XFX HD7850 / LG 42"LM340T (3D)1920x1080
Recommended Posts