option
Cuestiones
ayuda
daypo
buscar.php

Paralelas V

COMENTARIOS ESTADÍSTICAS RÉCORDS
REALIZAR TEST
Título del Test:
Paralelas V

Descripción:
Parcial BT5

Fecha de Creación: 2024/11/14

Categoría: Universidad

Número Preguntas: 6

Valoración:(0)
COMPARTE EL TEST
Nuevo ComentarioNuevo Comentario
Comentarios
NO HAY REGISTROS
Temario:

El siguiente código contiene un bucle multi-thread y vectorial: int main (){ float A[N], B[N], C[N]; #pragma omp parallel for simd schedule(static,8) for (int i=0; i<N; i++) C[i] = A[i] + B[i]; } Indique si es correcto para ejecutarse usando tecnología SIMD AVX-512. Si no es correcto, corríjalo.

Indique que afirmación es correcta con respecto al procesamiento vectorial. Las unidades SIMD hardware de una CPU están compartidas entre todos los núcleos (cores). Las tecnologías vectoriales en la arquitectura x86 permiten registros vectoriales de tamaño variable. Hay registros vectoriales especializados por cada tipo de datos (integer, floating-point ...). En el mismo procesador se pueden mezclar diferentes tecnologías vectoriales.

Indique que afirmación es correcta con respecto al procesamiento heterogéneo. Los dispositivos ASIC permiten máximo rendimiento por vatio consumido. Las GPUs tienen una eficiencia (rendimiento por vatio) similar a las CPUs. Las FPGAs no pueden usarse como aceleradores hardware en un servidor con CPU. Los dispositivos que optimizan el rendimiento por área de chip ocupada son las GPUs.

El siguiente código calcula la suma de dos arrays, A y B en C, explotando paralelismo SIMD usando intrínsecas del compilador: int main (){ float A[N], B[N], C[N]; for (int i=0; i<N; i++) { __m128 Av = _mm_load_ps(&A[i]); __m128 Bv = _mm_load_ps(&B[i]); __m128 tmp = _mm_add_ps(Av,Bv); _mm_store_ps(&C[i],tmp); } } Sin embargo, el resultado no es el mismo que la versión no vectorizada. Corrija el error.

Dado el siguiente bucle (1): int main (){ float a[N], b[N], c[N], d[N], e[N]; for (int i=1; i<N; i++) { a[i] = b[i-1] + c[i]; b[i] = d[i] + e[i]; } } Indique si el bucle (1) es vectorizable o no y por qué. Si cambiamos el orden de las sentencias del cuerpo del bucle (2): int main (){ float a[N], b[N], c[N], d[N], e[N]; for (int i=1; i<N; i++) { b[i] = d[i] + e[i]; a[i] = b[i-1] + c[i]; } } Indique si ahora el bucle (2) es vectorizable o no y por qué.

El siguiente código utiliza la directiva OpenMP SIMD, pero de forma incorrecta: int main (){ float A[N], B[N], C[N]; #pragma omp parallel simd for (int i=0; i<N; i++) C[i] = A[i] + B[i]; } Corrija el error.

Denunciar Test