Commit inicial
commit
74c67290c2
@ -0,0 +1,29 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if(argc != 2) {
|
||||
fprintf(stderr, "Uso: %s <tiros>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
size_t tiros = atoi(argv[1]);
|
||||
|
||||
size_t positivos = 0;
|
||||
|
||||
for(size_t i = 0; i < tiros; i++) {
|
||||
double x = (double)random() / RAND_MAX;
|
||||
double y = (double)random() / RAND_MAX;
|
||||
if(x * x + y * y < 1)
|
||||
positivos++;
|
||||
}
|
||||
|
||||
double pi = 4.0 * positivos / tiros;
|
||||
|
||||
printf("Tiros = %zd, Positivos = %zd\n", tiros, positivos);
|
||||
printf("π ~= %.15f\n", pi);
|
||||
printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI);
|
||||
return 0;
|
||||
}
|
||||
|
@ -0,0 +1,32 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if(argc != 2) {
|
||||
fprintf(stderr, "Uso: %s <tiros>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
srand(time(NULL));
|
||||
|
||||
size_t tiros = atoi(argv[1]);
|
||||
|
||||
size_t positivos = 0;
|
||||
|
||||
for(size_t i = 0; i < tiros; i++) {
|
||||
double x = (double)random() / RAND_MAX;
|
||||
double y = (double)random() / RAND_MAX;
|
||||
if(x * x + y * y < 1)
|
||||
positivos++;
|
||||
}
|
||||
|
||||
double pi = 4.0 * positivos / tiros;
|
||||
|
||||
printf("Tiros = %zd, Positivos = %zd\n", tiros, positivos);
|
||||
printf("π ~= %.15f\n", pi);
|
||||
printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI);
|
||||
return 0;
|
||||
}
|
||||
|
@ -0,0 +1,39 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <omp.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if(argc != 2) {
|
||||
fprintf(stderr, "Uso: %s <tiros>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Hilos: %d\n", omp_get_max_threads());
|
||||
|
||||
size_t tiros = atoi(argv[1]);
|
||||
|
||||
size_t positivos = 0;
|
||||
|
||||
#pragma omp parallel reduction(+: positivos)
|
||||
{
|
||||
int seed = time(NULL) + omp_get_thread_num();
|
||||
|
||||
#pragma omp for
|
||||
for(size_t i = 0; i < tiros; i++) {
|
||||
double x = (double)rand_r(&seed) / RAND_MAX;
|
||||
double y = (double)rand_r(&seed) / RAND_MAX;
|
||||
if(x * x + y * y < 1)
|
||||
positivos++;
|
||||
}
|
||||
}
|
||||
|
||||
double pi = 4.0 * positivos / tiros;
|
||||
|
||||
printf("Tiros = %zd, Positivos = %zd\n", tiros, positivos);
|
||||
printf("π ~= %.15f\n", pi);
|
||||
printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI);
|
||||
return 0;
|
||||
}
|
||||
|
@ -0,0 +1,50 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <mpi.h>
|
||||
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if(argc != 2) {
|
||||
fprintf(stderr, "Uso: %s <tiros>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int my_rank, num_procs;
|
||||
MPI_Init(&argc, &argv);
|
||||
MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
|
||||
|
||||
if(! my_rank)
|
||||
printf("Procesos: %d\n", num_procs);
|
||||
|
||||
srand(time(NULL) + my_rank);
|
||||
|
||||
size_t tiros = atol(argv[1]);
|
||||
tiros = tiros / num_procs * num_procs;
|
||||
|
||||
size_t positivos_parciales = 0;
|
||||
for(size_t i = 0; i < tiros / num_procs; i++) {
|
||||
double x = (double)random() / RAND_MAX;
|
||||
double y = (double)random() / RAND_MAX;
|
||||
if(x * x + y * y < 1)
|
||||
positivos_parciales++;
|
||||
}
|
||||
|
||||
size_t positivos;
|
||||
MPI_Reduce(&positivos_parciales, &positivos, 1, MPI_LONG, MPI_SUM, 0, MPI_COMM_WORLD);
|
||||
|
||||
if(! my_rank) {
|
||||
double pi = 4.0 * positivos / tiros;
|
||||
|
||||
printf("Tiros = %zd, Positivos = %zd\n", tiros, positivos);
|
||||
printf("π ~= %.15f\n", pi);
|
||||
printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI);
|
||||
}
|
||||
|
||||
MPI_Finalize();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
#include <stdio.h>
|
||||
#include <mpi.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int my_rank, num_procs;
|
||||
char nombre[MPI_MAX_PROCESSOR_NAME];
|
||||
int len;
|
||||
MPI_Init(&argc, &argv);
|
||||
MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
|
||||
MPI_Get_processor_name(nombre, &len);
|
||||
|
||||
|
||||
if(! my_rank) {
|
||||
printf("¡Holas generales!\n");
|
||||
printf("Procesos: %d\n", num_procs);
|
||||
}
|
||||
|
||||
printf("¡Hola desde el proceso %d en %s!\n", my_rank, nombre);
|
||||
|
||||
MPI_Finalize();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -0,0 +1,17 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <omp.h>
|
||||
|
||||
int main(void) {
|
||||
printf("¡Holas generales!\n");
|
||||
|
||||
printf("Hilos: %d\n", omp_get_max_threads());
|
||||
|
||||
#pragma omp parallel
|
||||
printf("¡Hola desde el hilo %d!\n", omp_get_thread_num());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
#SBATCH -o slurm.out
|
||||
#SBATCH -e slurm.err
|
||||
#SBATCH -N 2
|
||||
#SBATCH --ntasks-per-node 32
|
||||
#SBATCH --partition=debug
|
||||
#SBATCH --time=3-0:0
|
||||
|
||||
time mpirun -mca pml ucx --mca btl ^vader,tcp,openib,uct -x UCX_NET_DEVICES=mlx4_0:1 ./03_pi_mpi 10000000000
|
||||
|
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
#SBATCH -o slurm.out
|
||||
#SBATCH -e slurm.err
|
||||
#SBATCH -N 2
|
||||
#SBATCH --ntasks-per-node 32
|
||||
#SBATCH --partition=debug
|
||||
#SBATCH --time=3-0:0
|
||||
|
||||
mpirun ./hola_mpi
|
||||
|
Loading…
Reference in New Issue