Pořadí a název | Popis |
1. Earth Simulator | Společný projekt Japonských firem NASDA, JAERI a JAMSTEC na vývoj systému promodelování klimatu. Současný výkon: 35.86 TFlops Hardware: |
2. a 3. ASCI Q | Pátý stroj společnosti NNSA nacházející se v Los Alamos. Současný výkon: 7.72 TFlops V konečné fázi bude mít 11 968 procesorů, 12 TB paměti a 600 TB diskového prostoru. Jedná se o dva segmenty. |
4. ASCI WHITE | Stroj se nachází v Livermoru.
Současný výkon: 7.22 TFlops Je složen ze tří IBM RS/6000 SP systémů pojmenovaných White, Frost a Ice. Zabírá rozlohu dvou basketbalových hřišť a váží 106 tun. Obsahuje 8192 procesorů IBM RS6000 SP Power3 na frekvenci 375 MHz a má diskovou kapacitu 160 TB. |
5. MCR Linux cluster | Cluster se také nachází v Livermooru. Současný výkon: 5.69 TFlops Hardware: |
#include; #include ; main(int argc, char **argv) { register double width, sum; register int intervals, i; /* počet intervalů */ intervals = atoi(argv[1]); width = 1.0 / intervals; /* samotný výpočet */ sum = 0; for (i = 0; i < intervals; i++) { register double x = (i + 0.5) * width; sum += 4.0 / (1.0 + x * x); } sum *= width; printf("Odhad pi je %f\n", sum); return(0); }
#include#include #include #define NPROC 4 main(int argc, char **argv) { register double lsum, width; double sum; register int intervals, i; int mytid, iproc, msgtag = 4; int tids[NPROC]; /* array of task ids */ /* přihlášení do pvm */ mytid = pvm_mytid(); /* Přihlášení do skupiny a pokud je první instancí, iproc=0, vytvoří více kopií sama sebe. */ iproc = pvm_joingroup("pi"); if (iproc == 0) { tids[0] = pvm_mytid(); pvm_spawn("pvm_pi", &argv[1], 0, NULL, NPROC-1, &tids[1]); } /* Ujistí se, že jsou přítomny všechny procesy */ pvm_barrier("pi", NPROC); /* počet intervalů */ intervals = atoi(argv[1]); width = 1.0 / intervals; lsum = 0.0; for (i = iproc; i < intervals; i+=NPROC) { register double x = (i + 0.5) * width; lsum += 4.0 / (1.0 + x * x); } sum = lsum * width; pvm_reduce(PvmSum, &sum, 1, PVM_DOUBLE, msgtag, "pi", 0); /* Vytiskne výsledek */ if (iproc == 0) { printf("Odhad pi je %f\n", sum); } /* Ověří, zda program zkončil a opustí skupinu a pvm */ pvm_barrier("pi", NPROC); pvm_lvgroup("pi"); pvm_exit(); return(0); }
#include#include #include main(int argc, char **argv) { register double width; double sum, lsum; register int intervals, i; int nproc, iproc; MPI_Status status; if (MPI_Init(&argc, &argv) != MPI_SUCCESS) exit(1); MPI_Comm_size(MPI_COMM_WORLD, &nproc); MPI_Comm_rank(MPI_COMM_WORLD, &iproc); intervals = atoi(argv[1]); width = 1.0 / intervals; lsum = 0; for (i = iproc; i < intervals; i += nproc) { register double x = (i + 0.5) * width; lsum += 4.0 / (1.0 + x * x); } lsum *= width; if (iproc != 0) { MPI_Send(&lbuf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); } else { sum = lsum; for (i = 1; i < nproc; ++i) { MPI_Recv(&lbuf, 1, MPI_DOUBLE, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); sum += lsum; } printf("Odhad pi je %f\n", sum); } MPI_Finalize(); return(0); }
#include#include #include main(int argc, char **argv) { register double width; double sum, lsum; register int intervals, i; int nproc, iproc; if (MPI_Init(&argc, &argv) != MPI_SUCCESS) exit(1); MPI_Comm_size(MPI_COMM_WORLD, &nproc); MPI_Comm_rank(MPI_COMM_WORLD, &iproc); intervals = atoi(argv[1]); width = 1.0 / intervals; lsum = 0; for (i = iproc; i < intervals; i += nproc) { register double x = (i + 0.5) * width; lsum += 4.0 / (1.0 + x * x); } lsum *= width; MPI_Reduce(&lsum, &sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (iproc == 0) { printf("Odhad pi je %f\n", sum); } MPI_Finalize(); return(0); }
#include#include #include main(int argc, char **argv) { register double width; double sum = 0, lsum; register int intervals, i; int nproc, iproc; MPI_Win sum_win; if (MPI_Init(&argc, &argv) != MPI_SUCCESS) exit(1); MPI_Comm_size(MPI_COMM_WORLD, &nproc); MPI_Comm_rank(MPI_COMM_WORLD, &iproc); MPI_Win_create(&sum, sizeof(sum), sizeof(sum), 0, MPI_COMM_WORLD, &sum_win); MPI_Win_fence(0, sum_win); intervals = atoi(argv[1]); width = 1.0 / intervals; lsum = 0; for (i = iproc; i < intervals; i += nproc) { register double x = (i + 0.5) * width; lsum += 4.0 / (1.0 + x * x); } lsum *= width; MPI_Accumulate(&lsum, 1, MPI_DOUBLE, 0, 0, 1, MPI_DOUBLE, MPI_SUM, sum_win); MPI_Win_fence(0, sum_win); if (iproc == 0) { printf("Odhad pi je %f\n", sum); } MPI_Finalize(); return(0); }
#include#include #include "afapi.h" main(int argc, char **argv) { register double width, sum; register int intervals, i; if (p_init()) exit(1); intervals = atoi(argv[1]); width = 1.0 / intervals; sum = 0; for (i = IPROC; i < intervals; i += NPROC) { register double x = (i + 0.5) * width; sum += 4.0 / (1.0 + x * x); } sum = p_reduceAdd64f(sum) * width; if (IPROC == CPROC) { printf("Odhad pi je %f\n", sum); } p_exit(); return(0); }
127.0.0.1 localhost localhost.localdomain 10.0.0.1 cluster1 cluster1.clustersit.cz 10.0.0.2 cluster2 cluster2.clustersit.czKROK 3: