gpuNUFFT 0.7.1__tar.gz → 0.7.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/cuda_utils.hpp +16 -1
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/python/gpuNUFFT_operator_python_factory.cpp +6 -7
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/std_gpuNUFFT_kernels.cu +1 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpuNUFFT_operator.cpp +50 -24
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/PKG-INFO +1 -1
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/gpuNUFFT.egg-info/PKG-INFO +1 -1
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/setup.py +1 -1
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/CMakeLists.txt +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/doc/CMakeLists.txt +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/doc/Doxyfile +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/doc/mainpage.dox +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/balanced_gpuNUFFT_operator.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/balanced_operator.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/balanced_texture_gpuNUFFT_operator.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/config.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/config.hpp.cmake +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/cuda_utils.cuh +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/cufft_config.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/cufft_config.hpp.cmake +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/gpuNUFFT_cpu.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/gpuNUFFT_kernels.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/gpuNUFFT_operator.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/gpuNUFFT_operator_factory.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/gpuNUFFT_types.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/gpuNUFFT_utils.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/matlab_helper.h +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/precomp_kernels.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/precomp_utils.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/inc/texture_gpuNUFFT_operator.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/CMakeLists.txt +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/balanced_gpuNUFFT_operator.cpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/balanced_texture_gpuNUFFT_operator.cpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/cpu/gpuNUFFT_cpu.cpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/CMakeLists.txt +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/atomic/CMakeLists.txt +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/atomic/atomic_gpuNUFFT.cu +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/atomic/atomic_gpuNUFFT_kernels.cu +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/atomic/texture_gpuNUFFT_kernels.cu +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/matlab/CMakeLists.txt +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/matlab/gpuNUFFT_adj.cpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/matlab/gpuNUFFT_forw.cpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/matlab/gpuNUFFT_operator_matlabfactory.cpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/matlab/gpuNUFFT_operator_matlabfactory.hpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/matlab/precomputation/CMakeLists.txt +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/matlab/precomputation/gpuNUFFT_precomp.cpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/precomp_kernels.cu +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpu/python/CMakeLists.txt +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpuNUFFT_operator_factory.cpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/gpuNUFFT_utils.cpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/CUDA/src/texture_gpuNUFFT_operator.cpp +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/LICENSE +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/MANIFEST.in +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/README.md +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/gpuNUFFT.egg-info/SOURCES.txt +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/gpuNUFFT.egg-info/dependency_links.txt +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/gpuNUFFT.egg-info/not-zip-safe +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/gpuNUFFT.egg-info/top_level.txt +0 -0
- {gpuNUFFT-0.7.1 → gpuNUFFT-0.7.3}/setup.cfg +0 -0
|
@@ -110,13 +110,28 @@ inline void allocateAndSetMem(TypeName **device_ptr, IndType num_elements,
|
|
|
110
110
|
*/
|
|
111
111
|
template <typename TypeName>
|
|
112
112
|
inline void copyDeviceToDevice(TypeName *device_ptr_src,
|
|
113
|
-
TypeName *device_ptr_dest, IndType num_elements
|
|
113
|
+
TypeName *device_ptr_dest, IndType num_elements
|
|
114
|
+
)
|
|
114
115
|
{
|
|
115
116
|
HANDLE_ERROR(cudaMemcpy(device_ptr_dest, device_ptr_src,
|
|
116
117
|
num_elements * sizeof(TypeName),
|
|
117
118
|
cudaMemcpyDeviceToDevice));
|
|
118
119
|
}
|
|
119
120
|
|
|
121
|
+
/** \brief CUDA memcpy call to copy data from device ptr to device ptr
|
|
122
|
+
*
|
|
123
|
+
* @param device_ptr_src source device pointer
|
|
124
|
+
* @param device_ptr_dest destination device pointer
|
|
125
|
+
* @param num_elements amount of elements of size TypeName
|
|
126
|
+
*/
|
|
127
|
+
template <typename TypeName>
|
|
128
|
+
inline void copyDeviceToDeviceAsync(TypeName *device_ptr_src,
|
|
129
|
+
TypeName *device_ptr_dest, IndType num_elements, cudaStream_t stream=0)
|
|
130
|
+
{
|
|
131
|
+
HANDLE_ERROR(cudaMemcpyAsync(device_ptr_dest, device_ptr_src,
|
|
132
|
+
num_elements * sizeof(TypeName),
|
|
133
|
+
cudaMemcpyDeviceToDevice, stream));
|
|
134
|
+
}
|
|
120
135
|
/** \brief Copy CUDA memory from device to host
|
|
121
136
|
*
|
|
122
137
|
* @param device_ptr device pointer
|
|
@@ -107,6 +107,7 @@ class GpuNUFFTPythonOperator
|
|
|
107
107
|
gpuNUFFT::GpuNUFFTOperatorFactory factory;
|
|
108
108
|
gpuNUFFT::GpuNUFFTOperator *gpuNUFFTOp;
|
|
109
109
|
int trajectory_length, n_coils, dimension;
|
|
110
|
+
float osr;
|
|
110
111
|
bool has_sense_data;
|
|
111
112
|
gpuNUFFT::Dimensions imgDims;
|
|
112
113
|
// sensitivity maps
|
|
@@ -129,7 +130,7 @@ class GpuNUFFTPythonOperator
|
|
|
129
130
|
public:
|
|
130
131
|
GpuNUFFTPythonOperator(py::array_t<DType> kspace_loc, py::array_t<int> image_size, int num_coils,
|
|
131
132
|
py::array_t<std::complex<DType>> sense_maps, py::array_t<DType> density_comp, int kernel_width=3,
|
|
132
|
-
int sector_width=8, float osr=2, bool balance_workload=1)
|
|
133
|
+
int sector_width=8, float osr=2, bool balance_workload=1) : osr(osr)
|
|
133
134
|
{
|
|
134
135
|
// k-space coordinates
|
|
135
136
|
py::buffer_info sample_loc = kspace_loc.request();
|
|
@@ -140,12 +141,11 @@ class GpuNUFFTPythonOperator
|
|
|
140
141
|
|
|
141
142
|
// density compensation weights
|
|
142
143
|
gpuNUFFT::Array<DType> density_compArray;
|
|
143
|
-
|
|
144
|
-
|
|
144
|
+
if(density_comp == Py_None)
|
|
145
|
+
{
|
|
145
146
|
density_compArray = readNumpyArray(density_comp);
|
|
146
147
|
density_compArray.dim.length = trajectory_length;
|
|
147
|
-
|
|
148
|
-
//}
|
|
148
|
+
}
|
|
149
149
|
|
|
150
150
|
// image size
|
|
151
151
|
py::buffer_info img_dim = image_size.request();
|
|
@@ -305,7 +305,6 @@ class GpuNUFFTPythonOperator
|
|
|
305
305
|
allocate_pinned_memory(&densArray, n_samples * sizeof(CufftType));
|
|
306
306
|
densArray.dim.length = n_samples;
|
|
307
307
|
|
|
308
|
-
// TODO: Allocate directly on device and set with kernel.
|
|
309
308
|
for (long int cnt = 0; cnt < n_samples; cnt++)
|
|
310
309
|
{
|
|
311
310
|
densArray.data[cnt].x = 1.0;
|
|
@@ -324,7 +323,7 @@ class GpuNUFFTPythonOperator
|
|
|
324
323
|
|
|
325
324
|
gpuNUFFT::GpuArray<CufftType> image_gpu;
|
|
326
325
|
image_gpu.dim = imgDims;
|
|
327
|
-
allocateDeviceMem(&image_gpu.data,
|
|
326
|
+
allocateDeviceMem(&image_gpu.data, image_gpu.dim.count());
|
|
328
327
|
|
|
329
328
|
if (DEBUG && (cudaDeviceSynchronize() != cudaSuccess))
|
|
330
329
|
printf("error at adj thread synchronization a: %s\n",
|
|
@@ -41,6 +41,7 @@ __global__ void updateDensityCompKernel(DType2* density_data, DType2* estimation
|
|
|
41
41
|
DType2 data_p = density_data[t];
|
|
42
42
|
DType2 esti_p = estimation_data[t];
|
|
43
43
|
data_p.x *= rsqrtf(esti_p.x * esti_p.x + esti_p.y * esti_p.y);
|
|
44
|
+
data_p.y = 0;
|
|
44
45
|
density_data[t] = data_p;
|
|
45
46
|
t = t + blockDim.x*gridDim.x;
|
|
46
47
|
}
|
|
@@ -457,7 +457,7 @@ void gpuNUFFT::GpuNUFFTOperator::performGpuNUFFTAdj(
|
|
|
457
457
|
if (DEBUG && (cudaDeviceSynchronize() != cudaSuccess))
|
|
458
458
|
fprintf(stderr, "error at adj thread synchronization 2: %s\n",
|
|
459
459
|
cudaGetErrorString(cudaGetLastError()));
|
|
460
|
-
if (gpuNUFFTOut == CONVOLUTION)
|
|
460
|
+
if (gpuNUFFTOut == CONVOLUTION || gpuNUFFTOut == DENSITY_ESTIMATION)
|
|
461
461
|
{
|
|
462
462
|
if (DEBUG)
|
|
463
463
|
printf("stopping output after CONVOLUTION step\n");
|
|
@@ -939,10 +939,11 @@ void gpuNUFFT::GpuNUFFTOperator::performForwardGpuNUFFT(
|
|
|
939
939
|
printf("Memory allocation: %.2f ms\n", stopTiming());
|
|
940
940
|
|
|
941
941
|
int err;
|
|
942
|
-
|
|
942
|
+
cudaStream_t new_stream, old_stream;
|
|
943
943
|
// iterate over coils and compute result
|
|
944
944
|
for (int coil_it = 0; coil_it < n_coils; coil_it += n_coils_cc)
|
|
945
945
|
{
|
|
946
|
+
cudaStreamCreate(&new_stream);
|
|
946
947
|
unsigned long int data_coil_offset = (long int)coil_it * data_count;
|
|
947
948
|
unsigned long int im_coil_offset = coil_it * (long int)imdata_count;
|
|
948
949
|
|
|
@@ -954,32 +955,52 @@ void gpuNUFFT::GpuNUFFTOperator::performForwardGpuNUFFT(
|
|
|
954
955
|
// perform automatically "repeating" of input image in case
|
|
955
956
|
// of existing sensitivity data
|
|
956
957
|
for (int cnt = 0; cnt < n_coils_cc; cnt++)
|
|
957
|
-
|
|
958
|
-
imdata_d + cnt * imdata_count, imdata_count);
|
|
958
|
+
copyDeviceToDeviceAsync<DType2>(imgData_gpu.data,
|
|
959
|
+
imdata_d + cnt * imdata_count, imdata_count, new_stream);
|
|
959
960
|
else
|
|
960
|
-
|
|
961
|
-
imdata_count * n_coils_cc);
|
|
961
|
+
copyDeviceToDeviceAsync<DType2>(imgData_gpu.data + im_coil_offset, imdata_d,
|
|
962
|
+
imdata_count * n_coils_cc, new_stream);
|
|
962
963
|
|
|
963
964
|
// reset temp arrays
|
|
964
|
-
|
|
965
|
-
sizeof(CufftType) * gi_host->grid_width_dim * n_coils_cc);
|
|
966
|
-
|
|
965
|
+
cudaMemsetAsync(gdata_d, 0,
|
|
966
|
+
sizeof(CufftType) * gi_host->grid_width_dim * n_coils_cc, new_stream);
|
|
967
|
+
cudaMemsetAsync(data_d, 0, sizeof(CufftType) * data_count * n_coils_cc, new_stream);
|
|
967
968
|
|
|
968
|
-
if (DEBUG && (
|
|
969
|
+
if (DEBUG && (cudaStreamSynchronize(new_stream)!= cudaSuccess))
|
|
969
970
|
printf("error at thread synchronization 1: %s\n",
|
|
970
971
|
cudaGetErrorString(cudaGetLastError()));
|
|
971
972
|
|
|
972
973
|
if (this->applySensData())
|
|
973
974
|
{
|
|
974
|
-
|
|
975
|
-
imdata_count * n_coils_cc);
|
|
975
|
+
copyToDeviceAsync(this->sens.data + im_coil_offset, sens_d,
|
|
976
|
+
imdata_count * n_coils_cc, new_stream);
|
|
976
977
|
performSensMul(imdata_d, sens_d, gi_host, false);
|
|
977
978
|
}
|
|
978
979
|
|
|
980
|
+
if(gpuNUFFTOut == DENSITY_ESTIMATION)
|
|
981
|
+
{
|
|
982
|
+
// convolution and resampling to non-standard trajectory
|
|
983
|
+
forwardConvolution(data_d, crds_d, imdata_d, NULL, sectors_d,
|
|
984
|
+
sector_centers_d, gi_host);
|
|
985
|
+
if (DEBUG && (cudaStreamSynchronize(new_stream) != cudaSuccess))
|
|
986
|
+
printf("error at thread synchronization 7: %s\n",
|
|
987
|
+
cudaGetErrorString(cudaGetLastError()));
|
|
988
|
+
|
|
989
|
+
if (debugTiming)
|
|
990
|
+
printf("Forward Convolution: %.2f ms\n", stopTiming());
|
|
991
|
+
// write result in correct order back into output array
|
|
992
|
+
writeOrderedGPU(data_sorted_d, data_indices_d, data_d,
|
|
993
|
+
(int)this->kSpaceTraj.count(), n_coils_cc);
|
|
994
|
+
copyDeviceToDeviceAsync(data_sorted_d, data_d, data_count * n_coils_cc, new_stream);
|
|
995
|
+
if ((coil_it + n_coils_cc) < (n_coils))
|
|
996
|
+
continue;
|
|
997
|
+
freeTotalDeviceMemory(imdata_d, NULL);
|
|
998
|
+
this->freeDeviceMemory();
|
|
999
|
+
return;
|
|
1000
|
+
}
|
|
979
1001
|
// apodization Correction
|
|
980
1002
|
performForwardDeapodization(imdata_d, deapo_d, gi_host);
|
|
981
|
-
|
|
982
|
-
if (DEBUG && (cudaDeviceSynchronize() != cudaSuccess))
|
|
1003
|
+
if (DEBUG && (cudaStreamSynchronize(new_stream) != cudaSuccess))
|
|
983
1004
|
printf("error at thread synchronization 2: %s\n",
|
|
984
1005
|
cudaGetErrorString(cudaGetLastError()));
|
|
985
1006
|
// resize by oversampling factor and zero pad
|
|
@@ -988,13 +1009,13 @@ void gpuNUFFT::GpuNUFFTOperator::performForwardGpuNUFFT(
|
|
|
988
1009
|
if (debugTiming)
|
|
989
1010
|
startTiming();
|
|
990
1011
|
|
|
991
|
-
if (DEBUG && (
|
|
1012
|
+
if (DEBUG && (cudaStreamSynchronize(new_stream) != cudaSuccess))
|
|
992
1013
|
printf("error at thread synchronization 3: %s\n",
|
|
993
1014
|
cudaGetErrorString(cudaGetLastError()));
|
|
994
1015
|
// shift image to get correct zero frequency position
|
|
995
1016
|
performFFTShift(gdata_d, INVERSE, getGridDims(), gi_host);
|
|
996
1017
|
|
|
997
|
-
if (DEBUG && (
|
|
1018
|
+
if (DEBUG && (cudaStreamSynchronize(new_stream) != cudaSuccess))
|
|
998
1019
|
printf("error at thread synchronization 4: %s\n",
|
|
999
1020
|
cudaGetErrorString(cudaGetLastError()));
|
|
1000
1021
|
// eventually free imdata_d
|
|
@@ -1012,12 +1033,12 @@ void gpuNUFFT::GpuNUFFTOperator::performForwardGpuNUFFT(
|
|
|
1012
1033
|
c++;
|
|
1013
1034
|
}
|
|
1014
1035
|
|
|
1015
|
-
if (DEBUG && (
|
|
1036
|
+
if (DEBUG && (cudaStreamSynchronize(new_stream) != cudaSuccess))
|
|
1016
1037
|
printf("error at thread synchronization 5: %s\n",
|
|
1017
1038
|
cudaGetErrorString(cudaGetLastError()));
|
|
1018
1039
|
performFFTShift(gdata_d, FORWARD, getGridDims(), gi_host);
|
|
1019
1040
|
|
|
1020
|
-
if (DEBUG && (
|
|
1041
|
+
if (DEBUG && (cudaStreamSynchronize(new_stream) != cudaSuccess))
|
|
1021
1042
|
printf("error at thread synchronization 6: %s\n",
|
|
1022
1043
|
cudaGetErrorString(cudaGetLastError()));
|
|
1023
1044
|
|
|
@@ -1030,7 +1051,7 @@ void gpuNUFFT::GpuNUFFTOperator::performForwardGpuNUFFT(
|
|
|
1030
1051
|
// convolution and resampling to non-standard trajectory
|
|
1031
1052
|
forwardConvolution(data_d, crds_d, gdata_d, NULL, sectors_d,
|
|
1032
1053
|
sector_centers_d, gi_host);
|
|
1033
|
-
if (DEBUG && (
|
|
1054
|
+
if (DEBUG && (cudaStreamSynchronize(new_stream) != cudaSuccess))
|
|
1034
1055
|
printf("error at thread synchronization 7: %s\n",
|
|
1035
1056
|
cudaGetErrorString(cudaGetLastError()));
|
|
1036
1057
|
|
|
@@ -1038,15 +1059,20 @@ void gpuNUFFT::GpuNUFFTOperator::performForwardGpuNUFFT(
|
|
|
1038
1059
|
printf("Forward Convolution: %.2f ms\n", stopTiming());
|
|
1039
1060
|
|
|
1040
1061
|
performFFTScaling(data_d, gi_host->data_count, gi_host);
|
|
1041
|
-
if (DEBUG && (
|
|
1062
|
+
if (DEBUG && (cudaStreamSynchronize(new_stream) != cudaSuccess))
|
|
1042
1063
|
printf("error: at thread synchronization 8: %s\n",
|
|
1043
1064
|
cudaGetErrorString(cudaGetLastError()));
|
|
1044
1065
|
|
|
1045
1066
|
// write result in correct order back into output array
|
|
1046
1067
|
writeOrderedGPU(data_sorted_d, data_indices_d, data_d,
|
|
1047
1068
|
(int)this->kSpaceTraj.count(), n_coils_cc);
|
|
1048
|
-
|
|
1049
|
-
|
|
1069
|
+
if(coil_it > 1)
|
|
1070
|
+
{
|
|
1071
|
+
cudaStreamSynchronize(old_stream);
|
|
1072
|
+
cudaStreamDestroy(old_stream);
|
|
1073
|
+
}
|
|
1074
|
+
copyDeviceToDeviceAsync(data_sorted_d, data_d, data_count * n_coils_cc, new_stream);
|
|
1075
|
+
old_stream = new_stream;
|
|
1050
1076
|
} // iterate over coils
|
|
1051
1077
|
|
|
1052
1078
|
freeTotalDeviceMemory(imdata_d, NULL);
|
|
@@ -1172,8 +1198,6 @@ void gpuNUFFT::GpuNUFFTOperator::performForwardGpuNUFFT(
|
|
|
1172
1198
|
performSensMul(imdata_d, sens_d, gi_host, false);
|
|
1173
1199
|
}
|
|
1174
1200
|
|
|
1175
|
-
// apodization Correction
|
|
1176
|
-
performForwardDeapodization(imdata_d, deapo_d, gi_host);
|
|
1177
1201
|
if(gpuNUFFTOut == DENSITY_ESTIMATION)
|
|
1178
1202
|
{
|
|
1179
1203
|
forwardConvolution(data_d, crds_d, imdata_d, NULL, sectors_d,
|
|
@@ -1188,6 +1212,8 @@ void gpuNUFFT::GpuNUFFTOperator::performForwardGpuNUFFT(
|
|
|
1188
1212
|
this->freeDeviceMemory();
|
|
1189
1213
|
return;
|
|
1190
1214
|
}
|
|
1215
|
+
// apodization Correction
|
|
1216
|
+
performForwardDeapodization(imdata_d, deapo_d, gi_host);
|
|
1191
1217
|
if (DEBUG && (cudaThreadSynchronize() != cudaSuccess))
|
|
1192
1218
|
printf("error at thread synchronization 2: %s\n",
|
|
1193
1219
|
cudaGetErrorString(cudaGetLastError()));
|
|
@@ -103,7 +103,7 @@ class CMakeBuild(build_ext):
|
|
|
103
103
|
|
|
104
104
|
setup(
|
|
105
105
|
name="gpuNUFFT",
|
|
106
|
-
version="0.7.
|
|
106
|
+
version="0.7.3",
|
|
107
107
|
description="gpuNUFFT - An open source GPU Library for 3D Gridding and NUFFT",
|
|
108
108
|
ext_modules=[
|
|
109
109
|
CMakeExtension("gpuNUFFT", sourcedir=os.path.join("CUDA")),
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|