Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions Atividade2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#include <stdio.h>

#include <immintrin.h> // AVX

// gcc Atividade2.c -o atividade2 -mavx -O3

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);
}

48 changes: 48 additions & 0 deletions escalarParalelo.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <immintrin.h>
// 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<size;i++)
{
Out[i] = 0;
}

__m256 vetIn = _mm256_load_ps(In);
__m256 vetOut = _mm256_load_ps(Out);
__m256 Vmult = _mm256_load_ps(mult);

for(i=0; i<size-8; i+=8){
for(j=0; j<3;j++){
vetOut += _mm256_mul_ps(vetIn, Vmult);
// _mm256_store_ps(imgOut, vimgOut);
}
}
}
44 changes: 44 additions & 0 deletions produtoEscalar.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// gcc produtoEscalar.c -o escalar

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#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<size; i++){
vetA[i] = rand() % 10;
// printf("\n %d fak \n", vetA[i]);
}

// printf("\n\n %d \n\n", x);

for (i=0; i<size-2; i++)
{
x=0;
x = vetA[i]*esc[0];
x += vetA[i+1]*esc[1];
x += vetA[i+2]*esc[2];
vetB[i+1] = x;
// printf("\n %d", vetB[i]);
}
}