89 {
92
93 int* srcTransEqClassRep = nullptr;
94 int* srcTransPeriod = nullptr;
98 src.
transEqDim() *
sizeof(
int), cudaMemcpyHostToDevice));
100 cudaMemcpyHostToDevice));
102
103 cudaDeviceProp deviceProp;
104 cudaGetDeviceProperties(&deviceProp, 0);
105 constexpr int warpSize = 32;
108 int const nWarpsPerSM = (nWarps % deviceProp.multiProcessorCount == 0
109 ? nWarps / deviceProp.multiProcessorCount
110 : nWarps / deviceProp.multiProcessorCount + 1);
111 int const nThreads = min(nWarpsPerSM * warpSize, deviceProp.maxThreadsPerBlock);
114
115
116
117 copyTransEqClass_kernel<<<nBlocks, nThreads>>>(obj.
ptr(), srcTransEqClassRep, srcTransPeriod);
119 cuCHECK(cudaFree(srcTransEqClassRep));
120 cuCHECK(cudaFree(srcTransPeriod));
121}
__host__ __device__ Vector_t const & transPeriod() const
Definition HilbertSpace.hpp:317
__host__ __device__ int transEqDim() const
Definition HilbertSpace.hpp:309
__host__ __device__ Vector_t const & transEqClassRep() const
Definition HilbertSpace.hpp:311
Object_t * ptr() const
Definition ObjectOnGPU.cuh:144
cuCHECK(cudaFuncGetAttributes(&attr, MatrixElementsInSector))
debug_print("# Determining GPU configuration.")