You have to wait until the merge request has the label "Merged" instead of "Open".
> El 3 oct 2024, a las 9:55, 刘浪天 via petsc-users <petsc-users@mcs.anl.gov> > escribió: > > Hello Junchao, > > Okay. Thank you for helping find this bug. I pull the newest version of petsc > today. It seems this error has not been fixed in the present release version. > Maybe I should wait for some days. > > Best wishes, > Langtian > > >> On Oct 3, 2024, at 12:12 AM, Junchao Zhang <junchao.zh...@gmail.com> wrote: >> >> >> Hi, Langtian, >> Thanks for the configure.log and I now see what's wrong. Since you >> compiled your code with nvcc, we mistakenly thought petsc was configured >> with cuda. >> It is fixed in >> https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/merge_requests/7909__;!!G_uCfscf7eWS!aeorPzG-t4hjjYuvNrXAN30S9m17SudfU_aVI1QhsSjB6SJ1ezv8tqvb5tC5u3kC-MAPhaI_HsiKr5Pt_XnJjIrC$ >> , which will be in petsc/release and main. >> >> Thanks. >> --Junchao Zhang >> >> >> On Wed, Oct 2, 2024 at 3:11 PM 刘浪天 <langtian....@icloud.com> wrote: >> Hi Junchao, >> >> I check it, I haven't use cuda when install pure cpu version of petsc. >> The configure.log has been attached. Thank you for your reply. >> >> Best wishes, >> -------------------- Langtian Liu Institute for Theorectical Physics, >> Justus-Liebig-University Giessen Heinrich-Buff-Ring 16, 35392 Giessen >> Germany email: langtian....@icloud.com Tel: (+49)641 99 33342 >> >>> On Oct 2, 2024, at 5:05 PM, Junchao Zhang <junchao.zh...@gmail.com> wrote: >>> >>> >>> >>> >>> On Wed, Oct 2, 2024 at 3:57 AM 刘浪天 via petsc-users >>> <petsc-users@mcs.anl.gov> wrote: >>> Hi all, >>> >>> I am using the PETSc and SLEPc to solve the Faddeev equation of baryons. I >>> encounter a problem of function MatCreateDense when changing from CPU to >>> CPU-GPU computations. >>> At first, I write the codes in purely CPU computation in the following way >>> and it works. >>> ``` >>> Eigen::MatrixXcd H_KER; >>> Eigen::MatrixXcd G0; >>> printf("\nCompute the propagator matrix.\n"); >>> prop_matrix_nucleon_sc_av(Mn, pp_nodes, cos1_nodes); >>> printf("\nCompute the propagator matrix done.\n"); >>> printf("\nCompute the kernel matrix.\n"); >>> bse_kernel_nucleon_sc_av(Mn, pp_nodes, pp_weights, cos1_nodes, >>> cos1_weights); >>> printf("\nCompute the kernel matrix done.\n"); >>> printf("\nCompute the full kernel matrix by multiplying kernel and >>> propagator matrix.\n"); >>> MatrixXcd kernel_temp = H_KER * G0; >>> printf("\nCompute the full kernel matrix done.\n"); >>> >>> // Solve the eigen system with SLEPc >>> printf("\nSolve the eigen system in the rest frame.\n"); >>> // Get the size of the Eigen matrix >>> int nRows = (int) kernel_temp.rows(); >>> int nCols = (int) kernel_temp.cols(); >>> // Create PETSc matrix and share the data of kernel_temp >>> Mat kernel; >>> PetscCall(MatCreateDense(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, >>> nRows, nCols, kernel_temp.data(), &kernel)); >>> PetscCall(MatAssemblyBegin(kernel, MAT_FINAL_ASSEMBLY)); >>> PetscCall(MatAssemblyEnd(kernel, MAT_FINAL_ASSEMBLY)); >>> ``` >>> Now I change to compute the propagator and kernel matrices in GPU and then >>> compute the largest eigenvalues in CPU using SLEPc in the ways below. >>> ``` >>> cuDoubleComplex *h_propmat; >>> cuDoubleComplex *h_kernelmat; >>> int dim = EIGHT * NP * NZ; >>> printf("\nCompute the propagator matrix.\n"); >>> prop_matrix_nucleon_sc_av_cuda(Mn, pp_nodes.data(), cos1_nodes.data()); >>> printf("\nCompute the propagator matrix done.\n"); >>> printf("\nCompute the kernel matrix.\n"); >>> kernel_matrix_nucleon_sc_av_cuda(Mn, pp_nodes.data(), pp_weights.data(), >>> cos1_nodes.data(), cos1_weights.data()); >>> printf("\nCompute the kernel matrix done.\n"); >>> printf("\nCompute the full kernel matrix by multiplying kernel and >>> propagator matrix.\n"); >>> // Map the raw arrays to Eigen matrices (column-major order) >>> auto *h_kernel_temp = new cuDoubleComplex [dim*dim]; >>> matmul_cublas_cuDoubleComplex(h_kernelmat,h_propmat,h_kernel_temp,dim,dim,dim); >>> printf("\nCompute the full kernel matrix done.\n"); >>> >>> // Solve the eigen system with SLEPc >>> printf("\nSolve the eigen system in the rest frame.\n"); >>> int nRows = dim; >>> int nCols = dim; >>> // Create PETSc matrix and share the data of kernel_temp >>> Mat kernel; >>> auto* h_kernel = (std::complex<double>*)(h_kernel_temp); >>> PetscCall(MatCreateDense(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, >>> nRows, nCols, h_kernel_temp, &kernel)); >>> PetscCall(MatAssemblyBegin(kernel, MAT_FINAL_ASSEMBLY)); >>> PetscCall(MatAssemblyEnd(kernel, MAT_FINAL_ASSEMBLY)); >>> But in this case, the compiler told me that the MatCreateDense function >>> uses the data pointer as type of "thrust::complex<double>" instead of >>> "std::complex<double>". >>> I am sure I only configured and install PETSc in purely CPU without GPU and >>> this codes are written in the host function. >>> Please double check that your PETSc was purely CPU configured. You can >>> find it at the end of your configure.log to see if petsc is configured with >>> CUDA. >>> Since thrust::complex<double> is a result of a petsc/cuda configuration, I >>> have this doubt. >>> >>> >>> >>> Why the function changes its behavior? Did you also meet this problem when >>> writing the cuda codes and how to solve this problem. >>> I tried to copy the data to a new thrust::complex<double> matrix but this >>> is very time consuming since my matrix is very big. Is there a way to >>> create the Mat from the original data without changing the data type to >>> thrust::complex<double> in the cuda applications? Any response will be >>> appreciated. Thank you! >>> >>> Best wishes, >>> Langtian Liu >>> >>> ------ >>> Institute for Theorectical Physics, Justus-Liebig-University Giessen >>> Heinrich-Buff-Ring 16, 35392 Giessen Germany >>> >> >