@@ -92,5 +92,140 @@ namespace simtbx { namespace Kokkos {
9292 }
9393 }
9494
95+ template <>
96+ void kokkos_detector<small_whitelist_policy>::hello(){
97+ SCITBX_EXAMINE (" small small small" );
98+ }
99+ template <>
100+ void kokkos_detector<large_array_policy>::hello(){
101+ SCITBX_EXAMINE (" large large large" );
102+ }
103+
104+ template <> void
105+ kokkos_detector<large_array_policy>::each_image_allocate() {
106+ resize (m_rangemap, m_total_pixel_count);
107+ resize (m_omega_reduction, m_total_pixel_count);
108+ resize (m_max_I_x_reduction, m_total_pixel_count);
109+ resize (m_max_I_y_reduction, m_total_pixel_count);
110+ resize (m_floatimage, m_total_pixel_count);
111+
112+ resize (m_maskimage, m_total_pixel_count);
113+ kokkostbx::transfer_shared2kokkos (m_sdet_vector, metrology.sdet );
114+ kokkostbx::transfer_shared2kokkos (m_fdet_vector, metrology.fdet );
115+ kokkostbx::transfer_shared2kokkos (m_odet_vector, metrology.odet );
116+ kokkostbx::transfer_shared2kokkos (m_pix0_vector, metrology.pix0 );
117+ kokkostbx::transfer_shared2kokkos (m_distance, metrology.dists );
118+ kokkostbx::transfer_shared2kokkos (m_Xbeam, metrology.Xbeam );
119+ kokkostbx::transfer_shared2kokkos (m_Ybeam, metrology.Ybeam );
120+ fence ();
121+
122+ // metrology.show();
123+
124+ // printf(" rangemap size:%d\n", m_rangemap.span());
125+ // printf(" omega_reduction size:%d\n", m_omega_reduction.span());
126+ // printf(" max_I_x_reduction size:%d\n", m_max_I_x_reduction.span());
127+ // printf(" max_I_y_reduction size:%d\n", m_max_I_y_reduction.span());
128+ // printf(" maskimage size:%d\n", m_maskimage.span());
129+ // printf(" floatimage size:%d\n", m_floatimage.span());
130+ // printf(" sdet_vector size:%d\n", m_sdet_vector.span());
131+ // printf(" fdet_vector size:%d\n", m_fdet_vector.span());
132+ // printf(" odet_vector size:%d\n", m_odet_vector.span());
133+ // printf(" pix0_vector size:%d\n", m_pix0_vector.span());
134+ // printf(" distance size:%d\n", m_distance.span());
135+ // printf(" Xbeam size:%d\n", m_Xbeam.span());
136+ // printf(" Ybeam size:%d\n", m_Ybeam.span());
137+
138+ // print_view(m_fdet_vector);
139+ // print_view(m_odet_vector, 1, 3);
140+
141+ // printf("DONE.\n");
142+ }
143+ template <> void
144+ kokkos_detector<small_whitelist_policy>::each_image_allocate() {
145+ resize (m_maskimage, m_total_pixel_count);
146+ kokkostbx::transfer_shared2kokkos (m_sdet_vector, metrology.sdet );
147+ kokkostbx::transfer_shared2kokkos (m_fdet_vector, metrology.fdet );
148+ kokkostbx::transfer_shared2kokkos (m_odet_vector, metrology.odet );
149+ kokkostbx::transfer_shared2kokkos (m_pix0_vector, metrology.pix0 );
150+ kokkostbx::transfer_shared2kokkos (m_distance, metrology.dists );
151+ kokkostbx::transfer_shared2kokkos (m_Xbeam, metrology.Xbeam );
152+ kokkostbx::transfer_shared2kokkos (m_Ybeam, metrology.Ybeam );
153+ fence ();
154+ }
155+
156+ template <>
157+ void
158+ kokkos_detector<large_array_policy>::set_active_pixels_on_GPU(af::shared<std::size_t > active_pixel_list_value) {
159+ m_active_pixel_size = active_pixel_list_value.size ();
160+ kokkostbx::transfer_shared2kokkos (m_active_pixel_list, active_pixel_list_value);
161+ active_pixel_list = active_pixel_list_value;
162+ }
163+
164+ template <>
165+ void
166+ kokkos_detector<small_whitelist_policy>::set_active_pixels_on_GPU(af::shared<std::size_t > active_pixel_list_value) {
167+ m_active_pixel_size = active_pixel_list_value.size ();
168+ kokkostbx::transfer_shared2kokkos (m_active_pixel_list, active_pixel_list_value);
169+ active_pixel_list = active_pixel_list_value;
170+ resize (m_rangemap, m_active_pixel_size);
171+ resize (m_omega_reduction, m_active_pixel_size);
172+ resize (m_max_I_x_reduction, m_active_pixel_size);
173+ resize (m_max_I_y_reduction, m_active_pixel_size);
174+ resize (m_floatimage, m_active_pixel_size);
175+ resize (m_accumulate_floatimage, m_active_pixel_size);
176+ fence ();
177+ }
178+
179+ template <> af::shared<double >
180+ kokkos_detector<large_array_policy>::get_whitelist_raw_pixels(af::shared<std::size_t > selection) {
181+ hello ();
182+ // return the data array for the multipanel detector case, but only for whitelist pixels
183+ vector_size_t active_pixel_selection = vector_size_t (" active_pixel_selection" , selection.size ());
184+ kokkostbx::transfer_shared2kokkos (active_pixel_selection, selection);
185+
186+ size_t output_pixel_size = selection.size ();
187+ vector_cudareal_t active_pixel_results = vector_cudareal_t (" active_pixel_results" , output_pixel_size);
188+
189+ auto temp = m_accumulate_floatimage;
190+
191+ parallel_for (" get_active_pixel_selection" ,
192+ range_policy (0 , output_pixel_size),
193+ KOKKOS_LAMBDA (const int i) {
194+ size_t index = active_pixel_selection ( i );
195+ active_pixel_results ( i ) = temp ( index );
196+ });
197+
198+ af::shared<double > output_array (output_pixel_size, af::init_functor_null<double >());
199+ kokkostbx::transfer_kokkos2shared (output_array, active_pixel_results);
200+
201+ SCITBX_ASSERT (output_array.size () == output_pixel_size);
202+ return output_array;
203+ }
204+ template <> af::shared<double >
205+ kokkos_detector<small_whitelist_policy>::get_whitelist_raw_pixels(af::shared<std::size_t > selection) {
206+ SCITBX_CHECK_POINT;
207+ hello ();
208+ // return the data array for the multipanel detector case, but only for whitelist pixels
209+
210+ std::size_t output_pixel_size = selection.size ();
211+ // vector_cudareal_t active_pixel_results = vector_cudareal_t("active_pixel_results", output_pixel_size);
212+
213+ // auto temp = m_accumulate_floatimage;
214+
215+ // parallel_for("get_active_pixel_selection2",
216+ // range_policy(0, output_pixel_size),
217+ // KOKKOS_LAMBDA (const int i) {
218+ // active_pixel_results( i ) = temp( i );
219+ // });
220+
221+ af::shared<double > output_array (output_pixel_size, af::init_functor_null<double >());
222+ SCITBX_CHECK_POINT;
223+ kokkostbx::transfer_kokkos2shared (output_array, m_accumulate_floatimage);// active_pixel_results);
224+ SCITBX_CHECK_POINT;
225+
226+ SCITBX_ASSERT (output_array.size () == output_pixel_size);
227+ return output_array;
228+ }
229+
95230} // Kokkos
96231} // simtbx
0 commit comments