aboutsummaryrefslogtreecommitdiff
path: root/tests/gpu_sim_check.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gpu_sim_check.c')
-rw-r--r--tests/gpu_sim_check.c115
1 files changed, 30 insertions, 85 deletions
diff --git a/tests/gpu_sim_check.c b/tests/gpu_sim_check.c
index d8f85290..f0b3193e 100644
--- a/tests/gpu_sim_check.c
+++ b/tests/gpu_sim_check.c
@@ -35,11 +35,15 @@
#include <sys/time.h>
#endif
+#define CL_TARGET_OPENCL_VERSION 220
+
#include "../src/diffraction.h"
#include "../src/diffraction-gpu.h"
#include "../src/cl-utils.h"
-#include <detector.h>
+
+#include <datatemplate.h>
#include <utils.h>
+#include <image.h>
#include <symmetry.h>
#include <cell-utils.h>
@@ -71,16 +75,15 @@ static double get_hires_seconds()
int main(int argc, char *argv[])
{
struct gpu_context *gctx;
- struct image gpu_image;
- struct image cpu_image;
+ struct image *gpu_image;
+ struct image *cpu_image;
+ DataTemplate *dtempl;
UnitCell *cell;
UnitCell *cell_raw;
- struct detector *det;
int i;
double gpu_min, gpu_max, gpu_tot;
double cpu_min, cpu_max, cpu_tot;
double dev, perc;
- const double sep = 20.0;
double start, end;
double gpu_time, cpu_time;
SymOpList *sym;
@@ -104,73 +107,14 @@ int main(int argc, char *argv[])
cell = cell_rotate(cell_raw, random_quaternion(rng));
- det = calloc(1, sizeof(struct detector));
- det->n_panels = 2;
- det->panels = calloc(2, sizeof(struct panel));
-
- det->panels[0].orig_min_fs = 0;
- det->panels[0].orig_max_fs = 1023;
- det->panels[0].orig_min_ss = 0;
- det->panels[0].orig_max_ss = 511;
- det->panels[0].w = 1024;
- det->panels[0].h = 512;
- det->panels[0].fsx = 1.0;
- det->panels[0].fsy = 0.0;
- det->panels[0].fsz = 0.4;
- det->panels[0].ssx = 0.0;
- det->panels[0].ssy = 1.0;
- det->panels[0].ssz = 0.0;
- det->panels[0].xfs = 1.0;
- det->panels[0].yfs = 0.0;
- det->panels[0].xss = 0.0;
- det->panels[0].yss = 1.0;
- det->panels[0].cnx = -512.0;
- det->panels[0].cny = -512.0-sep;
- det->panels[0].clen = 100.0e-3;
- det->panels[0].res = 9090.91;
- det->panels[0].adu_per_eV = 1.0;
- det->panels[0].data = NULL;
-
- det->panels[1].orig_min_fs = 0;
- det->panels[1].orig_max_fs = 1023;
- det->panels[1].orig_min_ss = 512;
- det->panels[1].orig_max_ss = 1023;
- det->panels[1].w = 1024;
- det->panels[1].h = 512;
- det->panels[1].fsx = 1.0;
- det->panels[1].fsy = 0.0;
- det->panels[1].fsz = 0.0;
- det->panels[1].ssx = 0.0;
- det->panels[1].ssy = 1.0;
- det->panels[1].ssz = 1.4;
- det->panels[1].xfs = 1.0;
- det->panels[1].yfs = 0.0;
- det->panels[1].xss = 0.0;
- det->panels[1].yss = 1.0;
- det->panels[1].cnx = -512.0;
- det->panels[1].cny = sep;
- det->panels[1].clen = 100.0e-3;
- det->panels[1].res = 9090.91;
- det->panels[1].adu_per_eV = 1.0;
- det->panels[1].data = NULL;
-
- cpu_image.det = det;
- gpu_image.det = det;
- cpu_image.beam = NULL;
- gpu_image.beam = NULL;
-
- cpu_image.lambda = ph_en_to_lambda(eV_to_J(6000));
- gpu_image.lambda = ph_en_to_lambda(eV_to_J(6000));
- cpu_image.bw = 1.0 / 100.0;
- gpu_image.bw = 1.0 / 100.0;
-
- cpu_image.spectrum = spectrum_generate_tophat(cpu_image.lambda,
- cpu_image.bw);
- gpu_image.spectrum = spectrum_generate_tophat(gpu_image.lambda,
- gpu_image.bw);
+ dtempl = data_template_new_from_file(argv[1]);
+ if ( dtempl == NULL ) return 1;
+
+ cpu_image = image_create_for_simulation(dtempl);
+ gpu_image = image_create_for_simulation(dtempl);
start = get_hires_seconds();
- if ( get_diffraction_gpu(gctx, &gpu_image, 8, 8, 8, cell, 0, 0, 10) ) {
+ if ( get_diffraction_gpu(gctx, gpu_image, 8, 8, 8, cell, 0, 0, 10) ) {
return 1;
}
end = get_hires_seconds();
@@ -178,22 +122,22 @@ int main(int argc, char *argv[])
sym = get_pointgroup("1");
- cpu_image.dp = malloc(det->n_panels * sizeof(float *));
- if ( cpu_image.dp == NULL ) {
+ cpu_image->dp = malloc(cpu_image->detgeom->n_panels * sizeof(float *));
+ if ( cpu_image->dp == NULL ) {
ERROR("Couldn't allocate memory for result.\n");
return 1;
}
- for ( i=0; i<det->n_panels; i++ ) {
- struct panel *p = &det->panels[i];
- cpu_image.dp[i] = calloc(p->w * p->h, sizeof(float));
- if ( cpu_image.dp[i] == NULL ) {
+ for ( i=0; i<cpu_image->detgeom->n_panels; i++ ) {
+ struct detgeom_panel *p = &cpu_image->detgeom->panels[i];
+ cpu_image->dp[i] = calloc(p->w * p->h, sizeof(float));
+ if ( cpu_image->dp[i] == NULL ) {
ERROR("Couldn't allocate memory for panel %i\n", i);
return 1;
}
}
start = get_hires_seconds();
- get_diffraction(&cpu_image, 8, 8, 8, NULL, NULL, NULL, cell,
+ get_diffraction(cpu_image, 8, 8, 8, NULL, NULL, NULL, cell,
GRADIENT_MOSAIC, sym, 0, 0, 10);
end = get_hires_seconds();
cpu_time = end - start;
@@ -205,15 +149,15 @@ int main(int argc, char *argv[])
gpu_min = +INFINITY; gpu_max = -INFINITY; gpu_tot = 0.0;
cpu_min = +INFINITY; cpu_max = -INFINITY; cpu_tot = 0.0;
dev = 0.0;
- for ( i=0; i<det->n_panels; i++ ) {
+ for ( i=0; i<cpu_image->detgeom->n_panels; i++ ) {
int j;
- struct panel *p = &det->panels[i];
+ struct detgeom_panel *p = &cpu_image->detgeom->panels[i];
for ( j=0; j<p->w*p->h; j++ ) {
- const double cpu = cpu_image.dp[i][j];
- const double gpu = gpu_image.dp[i][j];
+ const double cpu = cpu_image->dp[i][j];
+ const double gpu = gpu_image->dp[i][j];
if ( cpu > cpu_max ) cpu_max = cpu;
if ( cpu < cpu_min ) cpu_min = cpu;
@@ -237,8 +181,8 @@ int main(int argc, char *argv[])
STATUS("Test failed! I'm writing cpu-sim.h5 and gpu-sim.h5"
" for you to inspect.\n");
- hdf5_write_image("cpu-sim.h5", &cpu_image, NULL);
- hdf5_write_image("gpu-sim.h5", &gpu_image, NULL);
+ image_write(cpu_image, dtempl, "cpu-sim.h5");
+ image_write(gpu_image, dtempl, "gpu-sim.h5");
return 1;
@@ -246,8 +190,9 @@ int main(int argc, char *argv[])
gsl_rng_free(rng);
cell_free(cell);
- free_detector_geometry(det);
-
+ image_free(cpu_image);
+ image_free(gpu_image);
+ data_template_free(dtempl);
return 0;
}