AMPI datatypes: CkDDT_Struct ignores member trueLB; negative extents from Type_create_resized can terminate the program

Abierto
#4,100 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
cpp
Área
backend, hpc

Línea de trabajo

Start in src/libs/ck-libs/ampi/ddt.C and read the CkDDT_Struct true lower bound calculation and the scan code changed in #4085. Reproduce the nested vector case with a negative displacement, then check MPI_Type_get_true_extent and scan buffer bounds; also try a resized datatype with a negative extent and count of at least two. Done when true lower bounds include member types and the negative-extent case no longer terminates the program.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Split out of #4072 (from Aditya's re-review of #4085; pre-existing on recharm, not fixed). Both in src/libs/ck-libs/ampi/ddt.C.

  1. CkDDT_Struct takes trueLB from the block displacements only and ignores each member type's own trueLB: struct{(0, 1, vector(2,1,-1,MPI_INT))} reports trueLB 0 but the vector writes at offset -4. MPI_Type_get_true_extent reports the same wrong value, and the scan (which since #4085 sizes its buffers from trueLB) writes just before its buffer for such types.
  2. Negative extents from MPI_Type_create_resized can terminate the program: with count >= 2 the scan's span count * max(extent, trueExtent) can be negative, std::vector throws, and the throw happens inside a noexcept function.

Related: #4085 (scan family).

Lenguaje dominante
C++
Estrellas
241
Forks
62
Merge medio
1 d 1 h
PR fusionados (30 d)
121

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de charmplusplus/charm

Todos los issues de charmplusplus/charm

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.