From b7a4fa754aead0a75bcf133fc00509226dd99460 Mon Sep 17 00:00:00 2001 From: GLeonhardt Date: Wed, 21 Mar 2018 09:24:03 -0300 Subject: [PATCH 1/2] Work done --- Atividade2.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Atividade2.c diff --git a/Atividade2.c b/Atividade2.c new file mode 100644 index 0000000..d011715 --- /dev/null +++ b/Atividade2.c @@ -0,0 +1,39 @@ +#include + +#include // AVX + +void add_intel_intrinsics(float *imgIn, float *imgOut, __m256 bright) +{ + __m256 vimgIn = _mm256_load_ps (imgIn); + __m256 vimgOut = _mm256_add_ps (vimgIn, bright); + _mm256_store_ps(imgOut, vimgOut); +} + +int main (int argc, char *argv[]) +{ + float *imgIn = (float*)_mm_malloc (sizeof(float) * 128, 32); //aloca um vetor de 32 bytes (256 bits) alinhado em endereços múltiplos de 16 bytes. + float *imgOut = (float*)_mm_malloc (sizeof(float) * 128, 32); + __m256 bright = _mm256_set1_ps(20); + + int i = 0; + + for (i = 0; i < 128; ++i) { + imgIn[i] = i; + } + + printf("\nExecutando\n"); + + for(i = 0; i<=128-8; i+=8) + { + add_intel_intrinsics(&imgIn[i], &imgOut[i], bright); + } + + + for (i = 0; i < 128; ++i) { + printf("%f\n", imgOut[i]); + } + + _mm_free(imgIn); + _mm_free(imgOut); +} + \ No newline at end of file From 55866aa8827c2438f6bf3f8faf2c5e922bdeff8f Mon Sep 17 00:00:00 2001 From: GLeonhardt Date: Wed, 28 Mar 2018 09:44:23 -0300 Subject: [PATCH 2/2] produto escalar --- Atividade2.c | 2 ++ escalarParalelo.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++ produtoEscalar.c | 44 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 escalarParalelo.c create mode 100644 produtoEscalar.c diff --git a/Atividade2.c b/Atividade2.c index d011715..c3a5d27 100644 --- a/Atividade2.c +++ b/Atividade2.c @@ -2,6 +2,8 @@ #include // AVX +// gcc Atividade2.c -o atividade2 -mavx -O3 + void add_intel_intrinsics(float *imgIn, float *imgOut, __m256 bright) { __m256 vimgIn = _mm256_load_ps (imgIn); diff --git a/escalarParalelo.c b/escalarParalelo.c new file mode 100644 index 0000000..3958af1 --- /dev/null +++ b/escalarParalelo.c @@ -0,0 +1,48 @@ +#include +#include +#include +#include +// gcc escalarParalelo.c -o escalarParalelo -mavx -O3 +#define size 200000 + +void produtoEscalar(); + +int main(){ + clock_t tic = clock(); + + produtoEscalar(); + + clock_t toc = clock(); + + printf("Elapsed: %f seconds\n", (double)(toc - tic) / CLOCKS_PER_SEC); + + return 0; +} + +void produtoEscalar() +{ + float *In = (float*)_mm_malloc (sizeof(float) * size, 32); //aloca um vetor de 32 bytes (256 bits) alinhado em endereços múltiplos de 16 bytes. + float *Out = (float*)_mm_malloc (sizeof(float) * size, 32); + float *mult = (float*)_mm_malloc (sizeof(float) * 8, 32); + mult[0] = 1; + mult[1] = 2; + mult[2] = 3; + + int i=0, j=0, k=0; + + for(i=0; i +#include +#include + +#define size 200000 + +void produtoEscalar(); + +int main(){ + clock_t tic = clock(); + + produtoEscalar(); + + clock_t toc = clock(); + + printf("Elapsed: %f seconds\n", (double)(toc - tic) / CLOCKS_PER_SEC); + + return 0; +} + +void produtoEscalar() +{ + int i, esc[3] = {2, 2, 2}, x=0; + long vetA[size]={0}, vetB[size]; + srand(time(NULL)); + for (i=0; i