CP2K

Descrição

De acordo com a documentação do CP2K, CP2K é um pacote de software de química quântica e física do estado sólido que pode realizar simulações atomísticas de sistemas no estado sólido, líquidos, moleculares, periódicos, materiais, cristais e sistemas biológicos.

Versões Disponíveis

  • cp2k/2023.1 (default)

  • cp2k/2026.1

  • cp2k/2026.1.gpu (com suporte a GPU)

Nota

Para verificar as versões disponíveis:

module avail cp2k

Carregando o Módulo

# Versão padrão (CPU)
module load cp2k/2026.1

# Versão com suporte a GPU
module load cp2k/2026.1.gpu

# Verificar instalação
cp2k --version

# Variáveis de ambiente disponíveis
echo $CP2K_DATA   # Diretório com conjuntos de base e potenciais

Submissão de Jobs Seriais

submit_cp2k_serial.sh
#!/bin/bash
#SBATCH -J cp2k_serial
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 5-00:00:00
#SBATCH --mem=8G

export INPUT="h2o.inp"
export OUTPUT="h2o.out"

module load cp2k/2026.1

job-nanny cp2k.popt -i h2o.inp -o h2o.out

Submissão de Jobs MPI

submit_cp2k_mpi.sh
#!/bin/bash
#SBATCH -J cp2k_mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 7-00:00:00
#SBATCH --mem-per-cpu=2G

export INPUT="h2o.inp"
export OUTPUT="h2o.out"

module load cp2k/2026.1

job-nanny mpirun -n 56 cp2k.popt -i h2o.inp -o h2o.out

Submissão de Jobs com OpenMP

submit_cp2k_omp.sh
#!/bin/bash
#SBATCH -J cp2k_omp
#SBATCH -N 1
#SBATCH -c 28
#SBATCH -t 5-00:00:00
#SBATCH --mem=64G

export INPUT="h2o.inp"
export OUTPUT="h2o.out"
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK

module load cp2k/2026.1

job-nanny cp2k.psmp -i h2o.inp -o h2o.out

Submissão de Jobs Híbridos (MPI+OpenMP)

submit_cp2k_hybrid.sh
#!/bin/bash
#SBATCH -J cp2k_hybrid
#SBATCH -N 2
#SBATCH --ntasks-per-node=4
#SBATCH -c 7
#SBATCH -t 7-00:00:00
#SBATCH --mem-per-cpu=2G

export INPUT="h2o.inp"
export OUTPUT="h2o.out"
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK

module load cp2k/2026.1

job-nanny mpirun -n 8 cp2k.psmp -i h2o.inp -o h2o.out

Submissão de Jobs com GPU (versão 2026.1.gpu)

A versão com suporte a GPU do CP2K oferece aceleração significativa para cálculos DFT e outros métodos computacionalmente intensivos.

submit_cp2k_gpu.sh
#!/bin/bash
#SBATCH -J cp2k_gpu
#SBATCH -p gpu
#SBATCH --gres=gpu:1
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 8
#SBATCH -t 48:00:00
#SBATCH --mem=32G

export INPUT="h2o.inp"
export OUTPUT="h2o.out"

module load cp2k/2026.1.gpu
module load cuda/12.9

# O CP2K detecta automaticamente as GPUs disponíveis
job-nanny cp2k.psmp -i h2o.inp -o h2o.out

Submissão de Jobs com Múltiplas GPUs

submit_cp2k_multi_gpu.sh
#!/bin/bash
#SBATCH -J cp2k_multi_gpu
#SBATCH -p gpu
#SBATCH --gres=gpu:4
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 16
#SBATCH -t 72:00:00
#SBATCH --mem=64G

export INPUT="large_system.inp"
export OUTPUT="large_system.out"

module load cp2k/2026.1.gpu
module load cuda/12.9

# Múltiplas GPUs para cálculos mais pesados
job-nanny cp2k.psmp -i large_system.inp -o large_system.out

Submissão de Jobs Híbridos (MPI + GPU)

Para sistemas muito grandes, combine paralelização MPI entre nós com aceleração GPU dentro de cada nó:

submit_cp2k_mpi_gpu.sh
#!/bin/bash
#SBATCH -J cp2k_mpi_gpu
#SBATCH -p gpu
#SBATCH --gres=gpu:2
#SBATCH -N 2
#SBATCH --ntasks-per-node=4
#SBATCH -c 7
#SBATCH -t 96:00:00
#SBATCH --mem-per-cpu=4G

export INPUT="very_large.inp"
export OUTPUT="very_large.out"

module load cp2k/2026.1.gpu
module load cuda/12.9

job-nanny mpirun -n 8 cp2k.psmp -i very_large.inp -o very_large.out

Variáveis de Ambiente

Ao carregar o módulo do CP2K, a variável CP2K_DATA é definida:

module load cp2k/2026.1
echo $CP2K_DATA   # /opt/gridunesp/dist/cp2k/2026.1/cp2k/data/

Esta variável aponta para o diretório com conjuntos de base e potenciais.

Exemplo de Arquivo de Entrada

h2o.inp
&GLOBAL
  PROJECT H2O
  RUN_TYPE ENERGY
  PRINT_LEVEL LOW
&END GLOBAL

&FORCE_EVAL
  METHOD Quickstep
  &DFT
    BASIS_SET_FILE_NAME $CP2K_DATA/BASIS_MOLOPT
    POTENTIAL_FILE_NAME $CP2K_DATA/POTENTIAL
    &MGRID
      CUTOFF 400
      REL_CUTOFF 50
    &END MGRID
    &QS
      METHOD GPW
    &END QS
    &SCF
      SCF_GUESS ATOMIC
      EPS_SCF 1.0E-6
      MAX_SCF 200
    &END SCF
    &XC
      &XC_FUNCTIONAL PBE
      &END XC_FUNCTIONAL
    &END XC
  &END DFT

  &SUBSYS
    &CELL
      ABC 10.0 10.0 10.0
    &END CELL
    &COORD
      O   5.0   5.0   5.0
      H   5.0   5.7   5.0
      H   5.7   5.0   5.0
    &END COORD
    &KIND H
      BASIS_SET DZVP-MOLOPT-GTH
      POTENTIAL GTH-PBE
    &END KIND
    &KIND O
      BASIS_SET DZVP-MOLOPT-GTH
      POTENTIAL GTH-PBE
    &END KIND
  &END SUBSYS
&END FORCE_EVAL

Exemplo de Arquivo de Entrada com Configuração GPU

Para aproveitar as GPUs, algumas otimizações podem ser adicionadas ao arquivo de entrada:

h2o_gpu.inp
&GLOBAL
  PROJECT H2O_GPU
  RUN_TYPE ENERGY
  PRINT_LEVEL LOW
&END GLOBAL

&FORCE_EVAL
  METHOD Quickstep
  &DFT
    BASIS_SET_FILE_NAME $CP2K_DATA/BASIS_MOLOPT
    POTENTIAL_FILE_NAME $CP2K_DATA/POTENTIAL
    &MGRID
      CUTOFF 400
      REL_CUTOFF 50
    &END MGRID
    &QS
      METHOD GPW
      EPS_DEFAULT 1.0E-12
    &END QS
    &SCF
      SCF_GUESS ATOMIC
      EPS_SCF 1.0E-6
      MAX_SCF 200
      &OT ON
        MINIMIZER CG
        PRECONDITIONER FULL_ALL
      &END OT
    &END SCF
    &XC
      &XC_FUNCTIONAL PBE
      &END XC_FUNCTIONAL
    &END XC
    &PRINT
      &PROGRAM_RUN_INFO ON
      &END PROGRAM_RUN_INFO
    &END PRINT
  &END DFT

  &SUBSYS
    &CELL
      ABC 10.0 10.0 10.0
    &END CELL
    &COORD
      O   5.0   5.0   5.0
      H   5.0   5.7   5.0
      H   5.7   5.0   5.0
    &END COORD
    &KIND H
      BASIS_SET DZVP-MOLOPT-GTH
      POTENTIAL GTH-PBE
    &END KIND
    &KIND O
      BASIS_SET DZVP-MOLOPT-GTH
      POTENTIAL GTH-PBE
    &END KIND
  &END SUBSYS
&END FORCE_EVAL

Job Array para Varredura de Parâmetros

submit_cp2k_array.sh
#!/bin/bash
#SBATCH -J cp2k_array
#SBATCH --array=1-5
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=8G

export INPUT="template.inp"
export OUTPUT="run_${SLURM_ARRAY_TASK_ID}/"

module load cp2k/2026.1

# Parâmetros para varredura
CUTOFF_VALUES=(200 300 400 500 600)
CUTOFF=${CUTOFF_VALUES[$SLURM_ARRAY_TASK_ID-1]}

mkdir -p run_${SLURM_ARRAY_TASK_ID}
cd run_${SLURM_ARRAY_TASK_ID}

# Modificar arquivo de entrada
sed "s/CUTOFF_VALUE/$CUTOFF/g" ../template.inp > input.inp

job-nanny cp2k.popt -i input.inp -o output.out

Job Array para Varredura de Parâmetros com GPU

submit_cp2k_gpu_array.sh
#!/bin/bash
#SBATCH -J cp2k_gpu_array
#SBATCH --array=1-4
#SBATCH -p gpu
#SBATCH --gres=gpu:1
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 8
#SBATCH -t 48:00:00
#SBATCH --mem=32G

# Diferentes números de GPUs por job
GPU_VALUES=(1 2 3 4)
GPU_COUNT=${GPU_VALUES[$SLURM_ARRAY_TASK_ID-1]}

export INPUT="template.inp"
export OUTPUT="gpu_${GPU_COUNT}/"

module load cp2k/2026.1.gpu
module load cuda/12.9

mkdir -p gpu_${GPU_COUNT}
cd gpu_${GPU_COUNT}
cp ../template.inp input.inp

# Solicitar número específico de GPUs
#SBATCH --gres=gpu:${GPU_COUNT}

job-nanny cp2k.psmp -i input.inp -o output.out

Otimização de Desempenho com GPU

Para obter o melhor desempenho com a versão GPU do CP2K:

  1. Use a versão adequada do CP2K para sua carga de trabalho

  2. Balanceie CPUs e GPUs - Muitas tarefas podem sobrecarregar a GPU

  3. Ajuste os parâmetros do SCF no arquivo de entrada para convergência mais rápida

Dica

Para problemas pequenos, o overhead de usar GPU pode não compensar. Teste diferentes configurações para encontrar o melhor equilíbrio.

Comparativo de Desempenho

Versão

Uso recomendado

Desempenho relativo

cp2k.popt (serial)

Testes, jobs pequenos

1x

cp2k.psmp (OpenMP)

Nó único, até 28 threads

2-5x

cp2k.popt com MPI

Múltiplos nós

10-50x

cp2k.psmp com GPU

Alta performance, sistemas grandes

20-100x

Referências

Ver também