From 50a81414a7023c6574ec69af784db97de349bc75 Mon Sep 17 00:00:00 2001 From: Thierry-Santos Date: Wed, 28 Mar 2018 10:06:40 -0300 Subject: [PATCH] Tarefa 1,2 --- ex2.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ ex3.1.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ ex3.2.c | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 ex2.c create mode 100644 ex3.1.c create mode 100644 ex3.2.c diff --git a/ex2.c b/ex2.c new file mode 100644 index 0000000..72d32e0 --- /dev/null +++ b/ex2.c @@ -0,0 +1,45 @@ +#include + +#include + +void crepusculo(float *imgin, float *imgout, __m256 intens) +{ + __m256 vimgin = _mm256_load_ps (imgin); + __m256 vimgout = _mm256_add_ps (vimgin, intens); + _mm256_store_ps(imgout, vimgout); + + /* Equivalente Assembly + ** mov eax, a + ** mov edx, b + ** mov ecx, c + ** movaps xmm0, XMMWORD PTR [eax] + ** addps xmm0, XMMWORD PTR [edx] + ** movaps XMMWORD PTR [ecx], xmm0 + */ +} + +int main (int argc, char *argv[]) +{ + + __m256 intens = _mm256_set1_ps(50); + + float *imgin = (float*)_mm_malloc (sizeof(float) *96, 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) *96, 32); + + int i = 0; + + for (i = 0; i < 96; ++i) { + imgin[i] = i; + } + + for (i = 0; i <= 96 - 8; i+=8) { + crepusculo(&imgin[i], &imgout[i], intens); + } + + printf("Vai da certo"); + + for (i = 0; i < 96; ++i) { + printf("%f\n",imgout[i]); + } + + } \ No newline at end of file diff --git a/ex3.1.c b/ex3.1.c new file mode 100644 index 0000000..be6f458 --- /dev/null +++ b/ex3.1.c @@ -0,0 +1,49 @@ +#include +#include +#include +#include +#include // AVX MUITO LOCO - novo Hero da Marvel +#define MAX 50000 + +void produtoEscalar(int imgIn[], int mult[], int result[], int n) +{ + int i, j; + for (i = 0; i < n; i++){ + for(j=0;j<3;j++){ + result[i] += imgIn[i]*mult[j]; + } + } +} + + +int main() +{ + int i = 0; + srand(time(NULL)); + int imgIn[MAX]; + int result[MAX]; + int mult[3] = {1,2,3}; + + for(i=0;i +#include +#include +#include +#include // AVX MUITO LOCO - novo Hero da Marvel +#define MAX 50000 + +int main(){ + + float *imgIn = (float*)_mm_malloc (sizeof(float) * MAX, 32); + float *imgOut = (float*)_mm_malloc (sizeof(float) * MAX, 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 < MAX; i++) { + imgOut[i] = 0; + } + + __m256 vImgIn = _mm256_load_ps(imgIn); + __m256 vImgOut = _mm256_load_ps(imgOut); + __m256 vmult = _mm256_load_ps(mult); + + clock_t tic = clock(); + + for(k = 0;k<50;k++){ + for(i=0;i<=MAX-8;i+=8){ + for(j=0;j<3;j++){ + vImgOut += _mm256_mul_ps(vImgIn, vmult); + } + } + } + clock_t toc = clock(); + + printf("\n\n Essa bagaca demorou: %f fuking segundos\n", (double)(toc - tic) / CLOCKS_PER_SEC); + +}