-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
bc33601
commit 132ff69
Showing
10 changed files
with
213 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <omp.h> | ||
#include <time.h> | ||
#include <math.h> | ||
|
||
int main(int argc, char **argv) { | ||
int size = 1e8; | ||
int *rand_nums; | ||
int i; | ||
int curr_max; | ||
time_t t; | ||
|
||
rand_nums=malloc(size*sizeof(int)); | ||
|
||
/* Intialize random number generator */ | ||
srand((unsigned) time(&t)); | ||
/* Initialize array with random values */ | ||
for (i=0; i<size; i++) { | ||
rand_nums[i] = rand(); | ||
} | ||
|
||
/* Find maximum */ | ||
curr_max = 0.0; | ||
for (i=0; i<size; i++) { | ||
curr_max = fmax(curr_max, rand_nums[i]); | ||
} | ||
|
||
printf("Max value is %d\n", curr_max); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
/* -- File array_multiply.c --- */ | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <omp.h> | ||
|
||
int main(int argc, char **argv) | ||
{ | ||
double start, end; | ||
int size = 5e8; | ||
int multiplier = 2; | ||
int *A, *C; | ||
int i; | ||
|
||
/* Allocate memory for arrays */ | ||
A = malloc(size * sizeof(int)); | ||
C = malloc(size * sizeof(int)); | ||
|
||
start = omp_get_wtime(); | ||
/* Multiply array a by multiplier */ | ||
for (i = 0; i < size; i++) | ||
{ | ||
C[i] = multiplier * A[i]; | ||
} | ||
end = omp_get_wtime(); | ||
printf("Total time is %f s\n", end-start); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
/* --- File elect_energy.c --- */ | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <time.h> | ||
#include <math.h> | ||
|
||
int main(int argc, char **argv) | ||
{ | ||
struct timespec ts_start, ts_end; | ||
float time_total; | ||
int n = 60; /* number of atoms per side */ | ||
int n_charges = n * n * n; /* total number of charges */ | ||
float a = 0.5; /* lattice constant a (a=b=c) */ | ||
float *q; /* array of charges */ | ||
float *x, *y, *z; /* x,y,z coordinates */ | ||
float dx, dy, dz, dist; /* temporary pairwise distances */ | ||
double Energy = 0.0; /* potential energy */ | ||
int i, j, k; | ||
|
||
q = malloc(n_charges * sizeof(float)); | ||
x = malloc(n_charges * sizeof(float)); | ||
y = malloc(n_charges * sizeof(float)); | ||
z = malloc(n_charges * sizeof(float)); | ||
/* Seed random number generator */ | ||
srand(111); | ||
/* initialize coordinates and charges */ | ||
int l = 0; | ||
for (i = 0; i < n; i++) | ||
for (j = 0; j < n; j++) | ||
for (k = 0; k < n; k++) | ||
{ | ||
x[l] = i * a; | ||
y[l] = j * a; | ||
z[l] = k * a; | ||
/* Generate random numbers between -5 and 5 */ | ||
q[l] = 10 * ((double)random() / (double)RAND_MAX - 0.5); | ||
l++; | ||
} | ||
|
||
/* Calculate sum of all pairwise interactions: q[i]*q[j]/dist[i,j] */ | ||
clock_gettime(CLOCK_MONOTONIC, &ts_start); | ||
for (i = 0; i < n_charges; i++) | ||
{ | ||
for (j = i + 1; j < n_charges; j++) | ||
{ | ||
dx = x[i] - x[j]; | ||
dy = y[i] - y[j]; | ||
dz = z[i] - z[j]; | ||
dist = sqrt(dx * dx + dy * dy + dz * dz); | ||
Energy += q[i] * q[j] / dist; | ||
} | ||
} | ||
clock_gettime(CLOCK_MONOTONIC, &ts_end); | ||
time_total = (ts_end.tv_sec - ts_start.tv_sec) * 1e9 + (ts_end.tv_nsec - ts_start.tv_nsec); | ||
printf("\nTotal time is %f ms, Energy is %.3f\n", time_total / 1e6, Energy * 1e-4); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
/* File: find_factor.c */ | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
|
||
int main() | ||
{ | ||
int N = 26927249; | ||
int f; | ||
for (f = 2; f <= N; f++) | ||
{ | ||
if (f % 200 == 0) /* Print progress */ | ||
{ | ||
fprintf(stdout, "checking: %li\n", f); | ||
fflush(stdout); | ||
} | ||
|
||
/* Check if f is a factor { */ | ||
if (N % f == 0) | ||
{ // the remainder is 0, found factor! | ||
fprintf(stdout, "Factor: %li\n", f); | ||
exit(0); | ||
} | ||
for (int i = 1; i < 4e6; i++) | ||
; /* Burn some CPU cycles */ | ||
/* End of check */ | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
|
||
int main(int argc, char **argv) { | ||
printf("Hello World\n"); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <math.h> | ||
|
||
int main(int argc, char **argv) { | ||
int steps = 5e7; /* Number of rectangles */ | ||
double delta = M_PI/steps; /* Width of each rectangle */ | ||
double total = 0.0; /* Accumulator */ | ||
int i; | ||
|
||
printf("Using %.0e steps\n", (float)steps); | ||
for (i=0; i<steps; i++) { | ||
total += sin(delta*i) * delta; | ||
} | ||
printf("The integral of sine from 0 to Pi is %.12f\n", total); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
/* Compute sum of vectors A and B */ | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <omp.h> | ||
|
||
int main(int argc, char *argv[]) | ||
{ | ||
double start, end; | ||
int size = 1e8; | ||
float *A; | ||
float *B; | ||
float *C; | ||
double sum = 0.0f; | ||
int ncycles=1; | ||
|
||
if( argc == 2 ) | ||
ncycles=atoi(argv[1]); | ||
else | ||
printf("Usage: vadd number_of_cycles\n"); | ||
|
||
|
||
A = (float *)malloc(size * sizeof(float *)); | ||
B = (float *)malloc(size * sizeof(float *)); | ||
C = (float *)malloc(size * sizeof(float *)); | ||
|
||
/* Initialize vectors */ | ||
for (int i = 0; i < size; i++) | ||
{ | ||
A[i] = (float)rand() / RAND_MAX; | ||
B[i] = (float)rand() / RAND_MAX; | ||
} | ||
|
||
start = omp_get_wtime(); | ||
#pragma omp target data map(to: A[0:size], B[0:size]) map(from: C[0:size]) | ||
for (int k = 0; k < ncycles; k++){ | ||
#pragma omp target teams distribute parallel for reduction(+:sum) map(tofrom: sum) | ||
for (int i = 0; i < size; i++) | ||
{ | ||
C[i] = A[i] + B[i]; | ||
sum += C[i]; | ||
} | ||
} | ||
|
||
end = omp_get_wtime(); | ||
|
||
printf("\nNum cycles: %i Time: %f seconds\n", ncycles, end - start); | ||
sum = sum / size; | ||
printf("Sum = %f\n ", sum / ncycles); | ||
} |