StatMech
Loading...
Searching...
No Matches
TransSectorOnGPU.cu File Reference

Functions

template<typename Scalar_t >
__global__ void adjointBasis_kernel (SparseCompressed< Complex_t< Scalar_t > > *res, TransSector< Scalar_t > *transSectorPtr)
 
template<typename Scalar_t >
__global__ void testObject_kernel (TransSector< Scalar_t > *transSectorPtr)
 
template<typename Scalar_t >
__global__ void testObject_kernel (SparseCompressed< Scalar_t > const *inMatPtr)
 
int main (int argc, char **argv)
 

Function Documentation

◆ adjointBasis_kernel()

template<typename Scalar_t >
__global__ void adjointBasis_kernel ( SparseCompressed< Complex_t< Scalar_t > > *  res,
TransSector< Scalar_t > *  transSectorPtr 
)
10 {
11 (*res) = (*transSectorPtr).basis().adjoint();
12}

◆ main()

int main ( int  argc,
char **  argv 
)
62 {
63 if(argc != 2) {
64 std::cerr << "Usage: 1.This, 2.SystemSize" << std::endl;
65 std::exit(EXIT_FAILURE);
66 }
67 int L = std::atoi(argv[1]);
68 int dimLoc = 2, k = 0;
69
70 size_t size;
71 cudaDeviceGetLimit(&size, cudaLimitMallocHeapSize);
72 printf("Heap Size=%ld\n", size);
73 size = 1024 * 1024 * 1024;
74 cudaDeviceSetLimit(cudaLimitMallocHeapSize, size_t(4) * size_t(1024 * 1024 * 1024));
75 void (*funcPtr)(TransSector<float>*) = testObject_kernel;
76 struct cudaFuncAttributes attr;
77 cuCHECK(cudaFuncGetAttributes(&attr, funcPtr));
78 std::cout << "# Function: testObject_kernel(TransSector<float>*)"
79 << "\n"
80 << "# constSizeBytes = " << attr.constSizeBytes << "\n"
81 << "# localSizeBytes = " << attr.localSizeBytes << "\n"
82 << "# maxDynamicSharedSizeBytes = " << attr.maxDynamicSharedSizeBytes << "\n"
83 << "# maxThreadsPerBlock = " << attr.maxThreadsPerBlock << "\n"
84 << "# sharedSizeBytes = " << attr.sharedSizeBytes << std::endl;
85
86 ObjectOnGPU< TransSector<float> > dTransSector(k, L, dimLoc);
87 testObject_kernel<<<1, 1>>>(dTransSector.ptr());
88 cuCHECK(cudaPeekAtLastError());
89 cuCHECK(cudaDeviceSynchronize());
90 std::cout << "Constructed an instance of ObjectOnGPU< TransSector<float> >" << std::endl;
91
93 adjointBasis_kernel<<<1, 1>>>(adjointBasis.ptr(), dTransSector.ptr());
94 cuCHECK(cudaPeekAtLastError());
95 cuCHECK(cudaDeviceSynchronize());
96
97 testObject_kernel<<<1, 1>>>(adjointBasis.ptr());
98 cuCHECK(cudaPeekAtLastError());
99 cuCHECK(cudaDeviceSynchronize());
100
101 return EXIT_SUCCESS;
102}
__global__ void testObject_kernel(TransSector< Scalar_t > *transSectorPtr)
Definition TransSectorOnGPU.cu:15
Object_t * ptr() const
Definition ObjectOnGPU.cuh:144
Definition ObjectOnGPU.cuh:149
Translation invariant sector of a many-body Hilbert space.
Definition TransSector.hpp:19
cuCHECK(cudaFuncGetAttributes(&attr, MatrixElementsInSector))
struct cudaFuncAttributes attr
Definition getAttributesOfMatrixElementsInSector.cpp:2
__constant__ int size
Definition testEigenOnGPU.cu:4

◆ testObject_kernel() [1/2]

template<typename Scalar_t >
__global__ void testObject_kernel ( SparseCompressed< Scalar_t > const *  inMatPtr)
49 {
50 SparseCompressed<Scalar_t> const& inMat = *inMatPtr;
51 printf("\ntestObject_kernel: OuterIndex\n");
52 for(int j = 0; j != inMat.outerSize() + 1; ++j) { printf("%d ", inMat.outerIndexPtr()[j]); }
53 printf("\n");
54 printf("testObject_kernel: NonZeros\n");
55 for(int j = 0; j != inMat.nonZeros(); ++j) {
56 printf("(%d %f%+f*i) ", inMat.innerIndexPtr()[j], inMat.valuePtr()[j].real(),
57 inMat.valuePtr()[j].imag());
58 }
59 printf("\n\n");
60}
Definition MatrixUtils.cuh:280
__host__ __device__ int nonZeros() const
Definition MatrixUtils.cuh:418
__host__ __device__ int * innerIndexPtr() const
Definition MatrixUtils.cuh:421
__host__ __device__ int * outerIndexPtr() const
Definition MatrixUtils.cuh:420
__host__ __device__ int outerSize() const
Definition MatrixUtils.cuh:414
__host__ __device__ Scalar_t * valuePtr() const
Definition MatrixUtils.cuh:422

◆ testObject_kernel() [2/2]

template<typename Scalar_t >
__global__ void testObject_kernel ( TransSector< Scalar_t > *  transSectorPtr)
15 {
16 int const idx = blockIdx.x * blockDim.x + threadIdx.x;
17 int const idy = blockIdx.y * blockDim.y + threadIdx.y;
18 if(idx >= 1 || idy >= 1) return;
19
20 TransSector<Scalar_t>& transSector = *transSectorPtr;
21
22 printf("testObject_kernel: OuterIndex\n");
23 for(int j = 0; j != transSector.dim() + 1; ++j) {
24 printf("%d ", transSector.basis().outerIndexPtr()[j]);
25 }
26 printf("\n");
27 printf("testObject_kernel: NonZeros\n");
28 for(int j = 0; j != transSector.basis().nonZeros(); ++j) {
29 printf("(%d %f%+f*i) ", transSector.basis().innerIndexPtr()[j],
30 transSector.basis().valuePtr()[j].real(), transSector.basis().valuePtr()[j].imag());
31 }
32 printf("\n\n");
33
34 printf("testObject_kernel: transSector.totalSpace().transEqDim() = %d\n",
35 transSector.totalSpace().transEqDim());
36 printf("testObject_kernel: transEqClassRep\n");
37 for(int j = 0; j != transSector.totalSpace().transEqDim(); ++j) {
38 printf("%d ", transSector.totalSpace().transEqClassRep(j));
39 }
40 printf("\n");
41 printf("testObject_kernel: transPeriod\n");
42 for(int j = 0; j != transSector.totalSpace().transEqDim(); ++j) {
43 printf("%d ", transSector.totalSpace().transPeriod(j));
44 }
45 printf("\n\n");
46}
__host__ __device__ int dim() const
Definition HilbertSpace.hpp:34
__host__ __device__ Matrix_t & basis()
Definition HilbertSpace.hpp:668
__host__ __device__ TotalSpace const & totalSpace() const
Definition HilbertSpace.hpp:671