CP2K
Nesta seção:
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
#!/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
#!/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
#!/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)
#!/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.
#!/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
#!/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ó:
#!/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
&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:
&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
#!/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
#!/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:
Use a versão adequada do CP2K para sua carga de trabalho
Balanceie CPUs e GPUs - Muitas tarefas podem sobrecarregar a GPU
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
Documentação: https://www.cp2k.org/howto
Manuais: https://manual.cp2k.org/
Tutoriais: https://www.cp2k.org/exercises
Otimização GPU: https://www.cp2k.org/howto:gpu
Ver também
Quantum ESPRESSO - Alternativa para DFT
Siesta - Alternativa para DFT com bases localizadas
CUDA - Suporte a GPU no GridUnesp
Processando Simulações - Como submeter jobs