int main (int argc, char *argv[]){ int i, j, k, error = 0; double A[N][N], B[N][N], C[N][N], D[N][N], sum; double A1[N][N]; double C1[N][N]; double time1, time2; int P; int blksz; SZ_Init (P); if (N % P != 0) printf ("Error -- N/P must be an integer\n"); for (i = 0; i < N; ++i) for (j = 0; j < N; ++j) A[i][j] = j * 1; B[i][j] = i * j + 2; for (i = 0; i < N; ++i) for (j = 0; j < N; ++j){ sum = 0; for (k = 0; k < N; ++k) sum += A[i][k] * B[k][i]; D[i][j] = sum; } time1 = SZ_Wtime (); SZ_Parallel_begin SZ_Scatter (A, A1); SZ_Broadcast (B); blksz = N/P; for (i = 0; i < N; ++i){ for (j = 0; j < N; ++j){ sum = 0; for (k = 0; k < N; ++k){ sum += A1[i][k] * B[k][j]; } C1[i][j] = sum; } } SZ_Gather (C1, C); SZ_Parallel_end; time2 = SZ_Wtime (); int error = 0; for (i = 0; i < N; ++i) for (j = 0; j < N; ++j) if ((C[i][j] - D[i][j] > 0.001) || (D[i][j] - C[i][j] > 0.001)) error = -1; if (error == -1) printf ("ERROR, sequential and parallel code give different answers.\n"); else printf ("Sequential and parallel code give same answers.\n"); printf ("elapsed_time = %f (seconds)\n", time2 - time1); SZ_Finalize (); return 0; }
int main (int argc, char *argv[]){ double t; double T; double A[6][5] = {{25.0, 400.0, 400.0, 0.0, 0.0}, {20.0, 200.0, 400.0, 3.0, 4.0}, {30.0, 50.0, 600.0, 1.0, 0.0}, {50.0, 400.0, 200.0, 1.0, 0.0}, {40.0, 700.0, 700.0, -1.0, 0.0}, {70.0, 200.0, 100.0, -1.0, 0.0}}; int N = 6; double x_diff, y_diff, r, F, Fx[N], Fy[N], new_x[N], new_y[N]; int i, j, a; int P; SZ_Init (P); printf ("Number of time intervals?\n"); scanf ("%lf", &T); printf ("Length of time interval?\n"); scanf ("%lf", &t); printf ("\n"); printf ("Mass\tx pos\ty pos\tx vel\t y vel\n"); for (i = 0; i < 6; ++i){ for (j = 0; j < 5; ++j){ printf ("%.2f\t", A[i][j]); } printf ("\n"); } SZ_Parallel_begin SZ_Broadcast (&T); SZ_Broadcast (&t); for (i = 0; i < T; ++i){ SZ_Broadcast (A); a = SZ_Get_process_num(); Fx[a] = A[a][3]; Fy[a] = A[a][4]; for (j = 0; j < N; ++j){ if (a != j){ x_diff = A[j][1] - A[a][1]; y_diff = A[j][2] - A[a][2]; r = sqrt ((x_diff * x_diff) + (y_diff * y_diff)); F = (G * A[a][0] * A[j][0]) / (r * r); Fx[a] += F * ((A[a][3] - A[j][3]) / r); Fy[a] += F * ((A[a][4] - A[j][4]) / r); if (((A[a][0] + A[j][0]) / 2) > r){ A[a][0] = 0.0; A[j][0] = 0.0; } } } new_x[a] = (Fx[a] * t) + A[a][1]; new_y[a] = (Fy[a] * t) + A[a][2]; if (new_x[a] > 1000.0){ new_x[a] = 1000.0 - (new_x[a] - 1000.0); } else if (new_x[a] < 0){ new_x[a] = new_x[a] * -1; } if (new_y[a] > 1000.0){ new_y[a] = 1000.0 - (new_y[a] - 1000.0); } else if (new_y[a] < 0){ new_y[a] = new_y[a] * -1; } A[a][3] = Fx[a]; A[a][4] = Fy[a]; A[a][1] = new_x[a]; A[a][2] = new_y[a]; SZ_AllBroadcast (A); } SZ_Parallel_end; printf ("\n"); printf ("Mass\tx pos\ty pos\tx vel\t y vel\n"); for (i = 0; i < 6; ++i){ for (j = 0; j < 5; ++j){ printf ("%.2f\t", A[i][j]); } printf ("\n"); } SZ_Finalize(); return 0; }
int main(int argc, char * argv[]) { int i = 0; size_t r5=0,r4=0,r3=0,r2=0,r1=0; char oriDir[640], outputDir[640], outputFilePath[600]; char *cfgFile; if(argc < 3) { printf("Test case: testfloat_compress_ts [config_file] [srcDir] [dimension sizes...]\n"); printf("Example: testfloat_compress_ts sz.config /home/sdi/Data/Hurricane-ISA/consecutive-steps 500 500 100\n"); exit(0); } cfgFile=argv[1]; sprintf(oriDir, "%s", argv[2]); if(argc>=4) r1 = atoi(argv[3]); //8 if(argc>=5) r2 = atoi(argv[4]); //8 if(argc>=6) r3 = atoi(argv[5]); //128 if(argc>=7) r4 = atoi(argv[6]); if(argc>=8) r5 = atoi(argv[7]); printf("cfgFile=%s\n", cfgFile); int status = SZ_Init(cfgFile); if(status == SZ_NSCS) exit(0); sprintf(outputDir, "%s", oriDir); char oriFilePath[600]; size_t nbEle; size_t dataLength = computeDataLength(r5,r4,r3,r2,r1); float *data = (float*)malloc(sizeof(float)*dataLength); SZ_registerVar("xx", SZ_FLOAT, data, REL, 0, 0.0001, 0, r5, r4, r3, r2, r1); if(status != SZ_SCES) { printf("Error: data file %s cannot be read!\n", oriFilePath); exit(0); } size_t outSize; unsigned char *bytes = NULL; for(i=1;i<83;i++) { printf("simulation time step %d\n", i); sprintf(oriFilePath, "%s/exalt-%d-2.dat", oriDir, i); printf("processing file: %s\n", oriFilePath); float *data_ = readFloatData(oriFilePath, &nbEle, &status); memcpy(data, data_, nbEle*sizeof(float)); cost_start(); SZ_compress_ts(&bytes, &outSize); cost_end(); printf("timecost=%f\n",totalCost); sprintf(outputFilePath, "%s/exalt-%d-2.dat.sz2", outputDir, i); printf("writing compressed data to %s\n", outputFilePath); writeByteData(bytes, outSize, outputFilePath, &status); free(bytes); free(data_); } printf("done\n"); free(data); SZ_Finalize(); return 0; }
void sz_finalize_c_() { SZ_Finalize(); }