Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • wslda wslda
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Container Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • wtools
  • wsldawslda
  • Wiki
  • C and CUDA

Last edited by Gabriel Wlazłowski Feb 20, 2026
Page history
This is an old version of this page. You can view the most recent version or browse the history.

C and CUDA

Programming language:

  • static codes st-wslda: C99 standard
  • time dependent codes td-wslda: mixture of C99 and CUDA.

In general CUDA is compatible with C99. Thus, in practice when editing files (predefines.h, problem-definition.h or logger.h) you can use C language irrespectively to code variants (st or td). There is only one exception related to function delta_ext in problem-definition.h file. It declaration is

  • static codes st-wslda:
double complex delta_ext(int ix, int iy, int iz, int it, double complex delta, double *params, size_t extra_data_size, void *extra_data)
  • time dependent codes td-wslda:
__device__ Complex delta_ext(int ix, int iy, int iz, int it, Complex delta, double *params, size_t extra_data_size, void *extra_data)

The change arises from incompatibility of complex type in C99 and CUDA. Namely:

  • st-wslda: return type must be C99 double complex
  • td-wslda: return type must be compatible with CUDA Complex

Below we provide example of the same code written in both standards:

  • C99
double complex delta_ext(int ix, int iy, int iz, int it, double complex delta, double *params, size_t extra_data_size, void *extra_data)
{
    double complex D = 1.0 + I*2.0; // assign value
    double complex Dc = conj(D); // complex conjugate
    double absolute_value = cabs(D);
    double phase = carg(D);
    double real_part = creal(D);
    double imginary_part = cimag(D);
    double complex exponentiation = cexp(D);
    double complex power = cpow(D, 2);
    // ...
    
    return D; 
}
  • CUDA
__device__ Complex delta_ext(int ix, int iy, int iz, int it, Complex delta, double *params, size_t extra_data_size, void *extra_data)
{
    Complex D = Complex(1.0,2.0); // assign value
    Complex Dc = thrust::conj(D); // complex conjugate
    double absolute_value = thrust::abs(D);
    double phase = thrust::arg(D);
    double real_part = D.real();
    double imginary_part = D.imag();
    Complex exponentiation = thrust::exp(D);
    Complex power = thrust::pow(D, 2);
    // ...
    
    return D; 
}
Clone repository
  • API version
  • Automatic interpolations
  • Auxiliary tools and extensions
  • Browsing the code
  • Broyden algorithm
  • C and CUDA
  • Campaign of calculations
  • Checking correctness of settings
  • Chemical potentials control
  • Code and results quality
  • Common failures of static codes
  • Common failures of time dependent codes
  • Computational domain
  • Configuring GPU machine
  • Constraining densities and potentials
View All Pages