@@ -126,7 +126,12 @@ namespace spla {
126126 auto * cl_acc = get_acc_cl ();
127127 auto * cl_dense = s.template get <CLDenseVec<T>>();
128128 auto * cpu_dense = s.template get <CpuDenseVec<T>>();
129- cl_dense_vec_read (s.get_n_rows (), cpu_dense->Ax .data (), *cl_dense, cl_acc->get_queue_default ());
129+ if (!cl_acc->is_img ()) {
130+ cl_dense_vec_read (s.get_n_rows (), cpu_dense->Ax .data (), *cl_dense, cl_acc->get_queue_default ());
131+ } else {
132+ cl_dense_vec_read (s.get_n_rows (), cpu_dense->Ax .data (), *cl_dense, cl_acc->get_queue_default (),
133+ CL_MEM_HOST_READ_ONLY | CL_MEM_ALLOC_HOST_PTR);
134+ }
130135 });
131136 manager.register_converter (FormatVector::CpuCoo, FormatVector::AccCoo, [](Storage& s) {
132137 auto * cpu_coo = s.template get <CpuCooVec<T>>();
@@ -138,7 +143,12 @@ namespace spla {
138143 auto * cl_coo = s.template get <CLCooVec<T>>();
139144 auto * cpu_coo = s.template get <CpuCooVec<T>>();
140145 cpu_coo_vec_resize (cl_coo->values , *cpu_coo);
141- cl_coo_vec_read (cl_coo->values , cpu_coo->Ai .data (), cpu_coo->Ax .data (), *cl_coo, cl_acc->get_queue_default ());
146+ if (!cl_acc->is_img ()) {
147+ cl_coo_vec_read (cl_coo->values , cpu_coo->Ai .data (), cpu_coo->Ax .data (), *cl_coo, cl_acc->get_queue_default ());
148+ } else {
149+ cl_coo_vec_read (cl_coo->values , cpu_coo->Ai .data (), cpu_coo->Ax .data (), *cl_coo, cl_acc->get_queue_default (),
150+ CL_MEM_HOST_READ_ONLY | CL_MEM_ALLOC_HOST_PTR);
151+ }
142152 });
143153 manager.register_converter (FormatVector::AccCoo, FormatVector::AccDense, [](Storage& s) {
144154 auto * cl_acc = get_acc_cl ();
0 commit comments