Разделение кэша между ядрами у AMD Как влияет на производительность?

Автор THAAS, 16 Травень 2010, 03:10:57

Попередня тема - Наступна тема

THAAS


Ivanko1

Цитата: THAAS від 16 Травень 2010, 04:10:57И зачем дилить? У интэла ведь общий!
Ну и где ты увидел деление? ???
У AMD кэш L3 тоже общий, а cash L2 у всех раздельный.

Edd.Dragon


Sanьka

Главный эксперт во всем!!!

Ivanko1

Цитата: Sanyka від 16 Травень 2010, 22:33:40У Core i3,5,7 тоже есть кеш L3.
Ну так он видимо про них и написал, а вот где он узрел деление этого самого L3 на Phenom"ах - вопрос.

Sanьka

Цитата: Ivanko1 від 16 Травень 2010, 22:01:10
Ну так он видимо про них и написал, а вот где он узрел деление этого самого L3 на Phenom"ах - вопрос.
По моему речь шла о Core 2 Duo.
THAAS  если все таки хочешь узнать ответ на вопрос ради которого ты создал тему - УТОЧНИ МОДЕЛИ ПРОЦОВ  >:(
Главный эксперт во всем!!!

THAAS

Вс
Цитата: Sanyka від 16 Травень 2010, 22:13:28
По моему речь шла о Core 2 Duo.
THAAS  если все таки хочешь узнать ответ на вопрос ради которого ты создал тему - УТОЧНИ МОДЕЛИ ПРОЦОВ  >:(
Ве модели интэл кроме корi5 i7 и пентиум D хотя 5 и7 не всё так однозначно!

Добавлено: 17 Травень 2010, 18:10:54

Не все задачи можно распредилить межу ядрами и если работает одно ядро а кеша  два L2 ЗАЧЕМ вот и весь вопрос (ну почти весь)?

Sanьka

Ну так кроме этих и + Селерон DC по моему многоядерников та у интел и не осталось.
Если к ядру не обращаются, то оно простаивает.
Главный эксперт во всем!!!

kolobdur

Цитата: THAAS від 17 Травень 2010, 18:05:07
ВсВе модели интэл кроме корi5 i7 и пентиум D хотя 5 и7 не всё так однозначно!

Добавлено: 17 Травень 2010, 15:10:54

Не все задачи можно распредилить межу ядрами и если работает одно ядро а кеша  два L2 ЗАЧЕМ вот и весь вопрос (ну почти весь)?
На всех современных операционных системах(Windows) начиная с XP идет использование распараллеливания ядер на процессоре.Вопрос стоит:скольких ядер,и в каких приложениях,на сколько процентов распараллеливание идет.Например при разархивировании или перемещении используются все ныне существующие ядра,при примерно равном проценте использования(то бишь,если два ядра,то 50% на 50%,плюс-минус;в играх может быть 80% на 20%,на новых,опять таки,стремится к 50 на 50.Плюс не все игры понимают 4 ядра,а старые и на 2 ядра не распараллеляться,но для этого были разработаны специальные программы,которые принудительно распараллеливают игры,предназначенные для одноядерных процессоров).То бишь,количество ядер и их кеш значительно увеличивает скорость работы в современных программах и во многих играх.
QuadCore AMD Phenom II X4 Black Edition 965, 3400 MHz/Scythe Katana 3/Asus M5A97/Crucial Ballistix Sport 2X8GB DDR3-1600/ASUS GeForce GTX 1060 3GB DUAL OC/Samsung SSD 850 EVO 250GB/TOSHIBA HDWD110 1000Gb/Hitachi HDS721050CLA362 512Gb/Hitachi HDS721680PLA380 80Gb/Be Quiet SYSTEM POWER 8 600W/Samsung SyncMaster S22D390 22"/Logitech G103/Razer Abyssus V2/Cooler Master Elite 333/Defender Warhead G-110/Dyno Jet SS2140R/Sven MS-230/Windows 10 PRO цифровая лицензия

THAAS

Цитата: kolobdur від 17 Травень 2010, 22:57:23
На всех современных операционных системах(Windows) начиная с XP идет использование распараллеливания ядер на процессоре.Вопрос стоит:скольких ядер,и в каких приложениях,на сколько процентов распараллеливание идет.Например при разархивировании или перемещении используются все ныне существующие ядра,при примерно равном проценте использования(то бишь,если два ядра,то 50% на 50%,плюс-минус;в играх может быть 80% на 20%,на новых,опять таки,стремится к 50 на 50.Плюс не все игры понимают 4 ядра,а старые и на 2 ядра не распараллеляться,но для этого были разработаны специальные программы,которые принудительно распараллеливают игры,предназначенные для одноядерных процессоров).То бишь,количество ядер и их кеш значительно увеличивает скорость работы в современных программах и во многих играх.
Операционная система типа ХР и 7 распределяют запущенные программы между ядрами. На этом все ихнее распоролелливание и заканчивается. А спец. программы, кот. вродебы что-то распоролелливают игры,  написаные для одного ядра, не могут это сделать в реальном времени, хотя-бы по причине того, что будут использовать ресурсы процессора гораздо больше, чем сама игра. И еще, для того, чтобы что нибудь распоролеллить нужно открытые исходники.Вот такая каша.

kolobdur

Цитата: THAAS від 17 Травень 2010, 23:47:37
Операционная система типа ХР и 7 распределяют запущенные программы между ядрами. На этом все ихнее распоролелливание и заканчивается. А спец. программы, кот. вродебы что-то распоролелливают игры,  написаные для одного ядра, не могут это сделать в реальном времени, хотя-бы по причине того, что будут использовать ресурсы процессора гораздо больше, чем сама игра. И еще, для того, чтобы что нибудь распоролеллить нужно открытые исходники.Вот такая каша.
Каша,да не та.Во-первых,какое тебе еще распараллеливание надо?Игры относятся тоже к программам,это два.В третьих с какой ты радости взял,что ресурсы будут использоваться больше,чем от игры?С фонаря?И,в четвертых,программы распараллеливают процессы по ядрам и не только для игр,но и для обычных программ,и открытые исходники тут не причем,они не строят моды.
QuadCore AMD Phenom II X4 Black Edition 965, 3400 MHz/Scythe Katana 3/Asus M5A97/Crucial Ballistix Sport 2X8GB DDR3-1600/ASUS GeForce GTX 1060 3GB DUAL OC/Samsung SSD 850 EVO 250GB/TOSHIBA HDWD110 1000Gb/Hitachi HDS721050CLA362 512Gb/Hitachi HDS721680PLA380 80Gb/Be Quiet SYSTEM POWER 8 600W/Samsung SyncMaster S22D390 22"/Logitech G103/Razer Abyssus V2/Cooler Master Elite 333/Defender Warhead G-110/Dyno Jet SS2140R/Sven MS-230/Windows 10 PRO цифровая лицензия

THAAS

Цитата: kolobdur від 18 Травень 2010, 00:01:59
Каша,да не та.Во-первых,какое тебе еще распараллеливание надо?Игры относятся тоже к программам,это два.В третьих с какой ты радости взял,что ресурсы будут использоваться больше,чем от игры?С фонаря?И,в четвертых,программы распараллеливают процессы по ядрам и не только для игр,но и для обычных программ,и открытые исходники тут не причем,они не строят моды.
Каша та операционка распоралеливает програмы между ядрами а не програму.А штоб програма использывала все ядра её нужно соответствующим образом написать и ещё важно што делает прога.Попробуй распоролелить поиск числа пи НОБЕЛЕВСКАЯ ПРЕМИЯ БУДЕТ ОБЕСПЕЧЕНА!!! :-X

DEAD_RAT

Цитата: kolobdur від 18 Травень 2010, 00:01:59
Каша,да не та.Во-первых,какое тебе еще распараллеливание надо?
Чтобы программа паралелилась, она должна быть написана с учетом распаралелиания.
Цитата: THAAS від 18 Травень 2010, 01:10:57
Попробуй распоролелить поиск числа пи НОБЕЛЕВСКАЯ ПРЕМИЯ БУДЕТ ОБЕСПЕЧЕНА!!! :-X
Во-во
Цитата: kolobdur від 17 Травень 2010, 22:57:23
но для этого были разработаны специальные программы,которые принудительно распараллеливают игры,предназначенные для одноядерных процессоров)
Чего? И вообще зачем пытаться паралелить старые игры, они и так у всех работают.

Вобщем, ты разберись о чем думаешь и что хочешь сказать, а потом пиши - иначе тебя трудно понять

Edd.Dragon

Цитата: THAAS від 17 Травень 2010, 19:05:07Не все задачи можно распредилить межу ядрами и если работает одно ядро а кеша  два L2 ЗАЧЕМ вот и весь вопрос (ну почти весь)?
Затем что если есть только кеш L2, а L3 нету, то тогда стоит вопрос разделять или нет, а если есть и L2, и L3, то вопрос не стоит, ибо для того третий уровень и делается, чтобы был и раздельный кеш, и общий.

Цитата: kolobdur від 17 Травень 2010, 23:57:23но для этого были разработаны специальные программы,которые принудительно распараллеливают игры
Каким это образом?

Цитата: kolobdur від 18 Травень 2010, 01:01:59И,в четвертых,программы распараллеливают процессы по ядрам и не только для игр,но и для обычных программ,и открытые исходники тут не причем,они не строят моды.
Ну и что программа будет делать с программой/игрой, в которой 1 процесс?! Таковыми и являются практически ВСЕ старые игры.
А если процессов несколько, так не нужна никакая программа - процессы по ядрам раскладывает менеджер операционки.


THAAS

Я имею в виду процэсоры с раздельным кэш L2 не имеющие L3!!!

Prol

Цитата: THAAS від 18 Травень 2010, 11:19:47Я имею в виду процэсоры с раздельным кэш L2 не имеющие L3!!!
Каким образом процесоры с раздельным кэш L2 не имеющие L3 имеют отношение к рапараллеливанию процессов?

Edd.Dragon

Цитата: THAAS від 18 Травень 2010, 10:19:47
Я имею в виду процэсоры с раздельным кэш L2 не имеющие L3!!!
Если ты про старые процы, то толку гадать почему так?
Впрочем, достоинства и недостатки объединенного кеша можешь почитать например тут:
http://www.ixbt.com/cpu/rmmt-l2-cache.shtml (пока кеша достаточно для всех в сумме - он работает лучше чем раздельный, как только суммарный объем данных больше размера кеша - получаем падение производительности ниже уровня суммарной производительности раздельного кеша). При этом алгоритм работы такого кеша - это нечто весьма тяжелое для понимания для простого человека и не менее сложное в разботке.

Кстати, я так понимаю, именно для сглаживания вышеуказанной проблемы Интел и снабжает такие процессоры большим размером кеша, можно даже сказать - избыточным для среднестатистических приложений тех лет.

А подход с разделяемым кешем - классический и менее гемороен при разработке алгоритмов.

Если же речь про новые, то нынешняя архитектура предполагает 3 уровня кеша с возможностью отсутствия третьего. В урезанных моделях 3-го нет или отключен, в полноценных есть. Архитектура одна, потому именно так.


А твой вопрос звучал вообще так, как-будто Интел - это истинно правильный подход:
Цитата: THAAS від 16 Травень 2010, 04:10:57И зачем дилить? У интэла ведь общий!
Ну и каким боком оговорка об Интел касается самого вопроса "Зачем дилить?"?


Добавлено: 18 Травень 2010, 09:34:32

Цитата: Prol від 18 Травень 2010, 12:13:17Каким образом процесоры с раздельным кэш L2 не имеющие L3 имеют отношение к рапараллеливанию процессов?
К распаралеливанию они может отношения не имеют, но к заголовку темы - самое непосредственное. Автор уточнил, что только предыдущие процессоры имел ввиду, когда спрашивал (ну или сейчас имеет ввиду, когда разобрались на счет современных процессоров).


THAAS

Цитата: Prol від 18 Травень 2010, 11:13:17
Каким образом процесоры с раздельным кэш L2 не имеющие L3 имеют отношение к рапараллеливанию процессов?

Вопрос не в этом вопрос в том как раздельный кэш L2 в процах без L3 влеяет на производительность.А отнношения кеша к роцэсу распоролеливания нет.Я щитаю што раздельный кеш хуже, хто небуть имеет инфу на эту тему :'(

Добавлено: 18 Травень 2010, 11:50:40

Спосибо за сылку

Edd.Dragon

Цитата: THAAS від 18 Травень 2010, 12:37:23Я щитаю што раздельный кеш хуже
Эммм.... ПРи таком количестве орфографических ошибок размышлять на тему столь тонких материй...  ;D ;D

DEAD_RAT

Цитата: THAAS від 18 Травень 2010, 11:37:23
Вопрос не в этом вопрос в том как раздельный кэш L2 в процах без L3 влеяет на производительность.
Как как - как хошь.
Бери и смотри тесты Конкретной модели с конкретной архитектурой и ВСЁ!! и прикидывай сколько % проиграли
А твои гадания - а если объединенный, а если нет - бред сивой кобылы - чтоб его объединить/разъединить надо переписать половину алгоритмов его работы и изменить тучу параметров - это всё равно что сделать проц заново, это как говорить что Корка эфективнее Пня Д потому что у неё кеш объединенный, а это бред.

Prol

Цитата: THAAS від 18 Травень 2010, 12:37:23Вопрос не в этом вопрос в том как раздельный кэш L2 в процах без L3 влеяет на производительность.
Зависит от приложения. В одних от него нет толку, в других есть. Нет смысла выбирать процессор основываясь на наличии/отсутствии общего L3. Нужно определиться с наиболее используемым ПО и выбрать процессор исходя из ого результатов в этих приложениях..
Вибачте, але ви не маєте права на перегляд спойлерів.


Edd.Dragon

Цитата: Prol від 18 Травень 2010, 14:12:58Зависит от приложения. В одних от него нет толку, в других есть. Нет смысла выбирать процессор основываясь на наличии/отсутствии общего L3.
Вопрос - "Общий L2 vs раздельный L2?"

Prol

Цитата: Edd.Dragon від 18 Травень 2010, 13:34:06
Вопрос - "Общий L2 vs раздельный L2?"

Зависит от приложения. В одних от него нет толку, в других есть. Нет смысла выбирать процессор основываясь на наличии общего/раздельного L2. Нужно определиться с наиболее используемым ПО и выбрать процессор исходя из ого результатов в этих приложениях..  :P
Разве от этого что-то существенное меняется? Вывод один и тот же.

THAAS

Цитата: DEAD_RAT від 18 Травень 2010, 12:10:56
Как как - как хошь.
Бери и смотри тесты Конкретной модели с конкретной архитектурой и ВСЁ!! и прикидывай сколько % проиграли
А твои гадания - а если объединенный, а если нет - бред сивой кобылы - чтоб его объединить/разъединить надо переписать половину алгоритмов его работы и изменить тучу параметров - это всё равно что сделать проц заново, это как говорить что Корка эфективнее Пня Д потому что у неё кеш объединенный, а это бред.
У AMD интегрированый в процэсор контролир и это вносит корективы в тэсты памяти ау интэлов он появился не так давно.Поетому это не бред  лошади амд по сровнению с интел на 775 сокэте лучшэ работает с памятью но почемуто в тестах АМД это не всегда помогает.Тут канешно и других пречин хватает.

DEAD_RAT

Цитата: Edd.Dragon від 18 Травень 2010, 13:34:06
Вопрос - "Общий L2 vs раздельный L2?"
А ты знаешь два проца с одной архитектурой, чтобы у дного был общий, а у другого делешый кеш?

Добавлено: 18 Травень 2010, 14:12:33

Цитата: THAAS від 18 Травень 2010, 14:08:57
амд по сровнению с интел на 775 сокэте лучшэ работает с памятью но почемуто в тестах АМД это не всегда помогает.
В работе с памятью я знаю два параметра "скорость чтение/кпир/запись" и "латентность(время доступа"
А у АМ2 и 775 они не особо различаются.

Edd.Dragon

Цитата: Prol від 18 Травень 2010, 15:02:51Разве от этого что-то существенное меняется?
Действительно. На 90% вопросов так можно отвечать.

Цитата: DEAD_RAT від 18 Травень 2010, 15:09:39А ты знаешь два проца с одной архитектурой, чтобы у дного был общий, а у другого делешый кеш?
Общий и раздельный - это уже две разные архитектуры  :P

Цитата: DEAD_RAT від 18 Травень 2010, 15:09:39А у АМ2 и 775 они не особо различаются.
Т.е. пофиг где контроллер находится и посредством чего сообщаются проц и память?


Добавлено: 18 Травень 2010, 14:40:59

THAAS,
Не пиши одно и то же два раза!
Прежде чем писать - читай


DEAD_RAT

Цитата: Edd.Dragon від 18 Травень 2010, 14:40:06
Т.е. пофиг где контроллер находится и посредством чего сообщаются проц и память?
Если "скорость чтение/кпир/запись" и "латентность" одинаковые, то мне пофиг. А тебе?
ЦитатаОбщий и раздельный - это уже две разные архитектуры
И я о том же, а раз архитектуры разные - то и сравнивать в лоб нельзя, только по результатам тестов.
А если архитектуры разные, то ты не скажешь на тысты повлияло разделение кеша или другие изменения.

Вибачте, але ви не маєте права на перегляд спойлерів.


THAAS

Цитата: Edd.Dragon від 18 Травень 2010, 11:56:43
Эммм.... ПРи таком количестве орфографических ошибок размышлять на тему столь тонких материй...  ;D ;D
Ну блин это што саюз писателей.Скритекой согласен но не исправлюсь :P

Prol

Цитата: Edd.Dragon від 18 Травень 2010, 15:40:06Действительно. На 90% вопросов так можно отвечать.
Какие вопросы, такие и ответы.


Edd.Dragon

Цитата: DEAD_RAT від 18 Травень 2010, 15:44:55Если "скорость чтение/кпир/запись" и "латентность" одинаковые, то мне пофиг. А тебе?
А, я сразу не вник.
Вот новость... С каких пор это они не отличаются?! ???

Цитата: THAAS від 18 Травень 2010, 15:50:08Ну блин это што саюз писателей.Скритекой согласен но не исправлюсь
Не, это союз читателей в первую очередь, коих писатель обязан уважать, раз предлагает им читать свою писанину (например вот я тебе предлагаю читать это).

А если читать тяжко, так кто читать тогда будет? Я например не горю желанием глаза ломать :)

Цитата: DEAD_RAT від 18 Травень 2010, 15:44:55А если архитектуры разные, то ты не скажешь на тысты повлияло разделение кеша или другие изменения.
"Соберись!" (с)
В любой ситуации можно придумать такую методику, которая даст тебе пусть и не совсем ту информацию, которая нужна, но по крайней мере полезную и объективную.
Статью то читал? А то судя по фразе
Цитата: DEAD_RAT від 18 Травень 2010, 15:44:55то и сравнивать в лоб нельзя, только по результатам тестов.
не читал


THAAS

Судя по тестам из этой сылки http://www.ixbt.com/cpu/rmmt-l2-cache.shtml Интеловский объединёный кэш быстрей в два раза. А с превышэнием максимального объёма L2 типа хужэ ??? .А где тест с превышением объёма L2 для AMD? :o

Prol

Цитата: THAAS від 18 Травень 2010, 16:43:31Судя по тестам из этой сылки
Архитектуры абсолютно разные. Тест бессмысленный.
Вибачте, але ви не маєте права на перегляд спойлерів.


THAAS

Цитата: Prol від 18 Травень 2010, 16:27:55
Архитектуры абсолютно разные. Тест бессмысленный.
Вибачте, але ви не маєте права на перегляд спойлерів.


Архитектуры то разные но задачи одинаковые.Тест имеет смысл!!!

Edd.Dragon

Цитата: Prol від 18 Травень 2010, 17:27:55Архитектуры абсолютно разные. Тест бессмысленный.
Обоснуй. Чем бесмысленен тест, сравнивающий падение производительности в процентах при смешивании нагрузок? И тест, анализирующий плюсы и минусы общего кеша как такового.

Цитата: THAAS від 18 Травень 2010, 16:43:31А где тест с превышением объёма L2 для AMD?
А в нем там нет смысла. Конкуренции за кеш нету.

linuxdrom

Цитата: THAAS від 18 Травень 2010, 14:50:08
Ну блин это што саюз писателей.Скритекой согласен но не исправлюсь :P
У тебя есть неделя РО что бы передумать.

βεερ_βooρ

Цитата: THAAS від 18 Травень 2010, 01:10:57
Каша та операционка распоралеливает програмы между ядрами а не програму.А штоб програма использывала все ядра её нужно соответствующим образом написать и ещё важно што делает прога.Попробуй распоролелить поиск числа пи НОБЕЛЕВСКАЯ ПРЕМИЯ БУДЕТ ОБЕСПЕЧЕНА!!! :-X
Цитата: DEAD_RAT від 18 Травень 2010, 02:26:02Во-во

#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>

void srandom (unsigned seed);
double dboard (int darts);
#define DARTS 50000     /* number of throws at dartboard */
#define ROUNDS 10       /* number of times "darts" is iterated */
#define MASTER 0        /* task ID of master task */

int main (int argc, char *argv[])
{
double homepi,         /* value of pi calculated by current task */
pisum,         /* sum of tasks' pi values */
pi,         /* average of pi after "darts" is thrown */
avepi;         /* average pi value for all iterations */
int taskid,         /* task ID - also used as seed number */
numtasks,       /* number of tasks */
rc,             /* return code */
i;
MPI_Status status;

/* Obtain number of tasks and task ID */
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD,&taskid);
printf ("MPI task %d has started...
", taskid);
if (taskid == MASTER)
   printf ("Using %d tasks to compute pi (3.1415926535)
",numtasks);

/* Set seed for random number generator equal to task ID */
srandom (taskid);

avepi = 0;
for (i = 0; i < ROUNDS; i++) {
   /* All tasks calculate pi using dartboard algorithm */
   homepi = dboard(DARTS);

   /* Use MPI_Reduce to sum values of homepi across all tasks
    * Master will store the accumulated value in pisum
    * - homepi is the send buffer
    * - pisum is the receive buffer (used by the receiving task only)
    * - the size of the message is sizeof(double)
    * - MASTER is the task that will receive the result of the reduction
    *   operation
    * - MPI_SUM is a pre-defined reduction function (double-precision
    *   floating-point vector addition).  Must be declared extern.
    * - MPI_COMM_WORLD is the group of tasks that will participate.
    */

   rc = MPI_Reduce(&homepi, &pisum, 1, MPI_DOUBLE, MPI_SUM,
                      MASTER, MPI_COMM_WORLD);
   if (rc != MPI_SUCCESS)
      printf("%d: failure on mpc_reduce
", taskid);

   /* Master computes average for this iteration and all iterations */
   if (taskid == MASTER) {
      pi = pisum/numtasks;
      avepi = ((avepi * i) + pi)/(i + 1);
      printf("   After %8d throws, average value of pi = %10.8f
",
                (DARTS * (i + 1)),avepi);
   }   
}
MPI_Finalize();
return 0;
}


Положенную мне премию прошу поровну разделить между компанией Гугл,  Blaise Barney, Ros Leibensperger и George L. Gusciora из Корнуэльского университета.



Добавлено: 20 Травень 2010, 03:00:34

Цитата: DEAD_RAT від 18 Травень 2010, 02:26:02Чтобы программа паралелилась, она должна быть написана с учетом распаралелиания.
В общем случае неверно. Если компилятор может выделить в исходном коде чистые функции, то вычисления ихней композиции может быть  распараллелено автоматически.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

Цитата: βεερ_βooρ від 20 Травень 2010, 02:49:48

#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>

void srandom (unsigned seed);
double dboard (int darts);
#define DARTS 50000     /* number of throws at dartboard */
#define ROUNDS 10       /* number of times "darts" is iterated */
#define MASTER 0        /* task ID of master task */

int main (int argc, char *argv[])
{
double homepi,         /* value of pi calculated by current task */
pisum,         /* sum of tasks' pi values */
pi,         /* average of pi after "darts" is thrown */
avepi;         /* average pi value for all iterations */
int taskid,         /* task ID - also used as seed number */
numtasks,       /* number of tasks */
rc,             /* return code */
i;
MPI_Status status;

/* Obtain number of tasks and task ID */
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD,&taskid);
printf ("MPI task %d has started...
", taskid);
if (taskid == MASTER)
   printf ("Using %d tasks to compute pi (3.1415926535)
",numtasks);

/* Set seed for random number generator equal to task ID */
srandom (taskid);

avepi = 0;
for (i = 0; i < ROUNDS; i++) {
   /* All tasks calculate pi using dartboard algorithm */
   homepi = dboard(DARTS);

   /* Use MPI_Reduce to sum values of homepi across all tasks
    * Master will store the accumulated value in pisum
    * - homepi is the send buffer
    * - pisum is the receive buffer (used by the receiving task only)
    * - the size of the message is sizeof(double)
    * - MASTER is the task that will receive the result of the reduction
    *   operation
    * - MPI_SUM is a pre-defined reduction function (double-precision
    *   floating-point vector addition).  Must be declared extern.
    * - MPI_COMM_WORLD is the group of tasks that will participate.
    */

   rc = MPI_Reduce(&homepi, &pisum, 1, MPI_DOUBLE, MPI_SUM,
                      MASTER, MPI_COMM_WORLD);
   if (rc != MPI_SUCCESS)
      printf("%d: failure on mpc_reduce
", taskid);

   /* Master computes average for this iteration and all iterations */
   if (taskid == MASTER) {
      pi = pisum/numtasks;
      avepi = ((avepi * i) + pi)/(i + 1);
      printf("   After %8d throws, average value of pi = %10.8f
",
                (DARTS * (i + 1)),avepi);
   }   
}
MPI_Finalize();
return 0;
}


Да что за неподобство?! >:( Почему не приложено mpi.h?? >:( В студию!!
If you do what you have always done, you'll get what you have always got