⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 starcore_main.c

📁 This project contains a C algorithm for calculating the results of a custom polynomial function. It
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <prototype.h>
#define N 16 		// gradul polinomului,multiplu de 4
#define Simulari 10	/* am decis ca in programul main sa efectuam 10 simulari
 ale algoritmului de calcul al polinomului, pentru a putea genera apoi
 reprezentari grafice concludente in Matlab. Pentru aceasta, am dat lui P si lui x
 forma unui vector de 10 elemente corespunzatoare fiecarei simulari, pt i=1..10

	Utilizand pragmele pentru optimizarea lucrului cu memoria, vom permite 
efectuarea transferurilor cu mai multe 'cuvinte', codul generat de compilator 
avand instructiuni de transfer multiplu ori de cate ori algoritmul va permite
aceasta.*/
 
int main(void)
{
Word16 x[Simulari],a[N];
#pragma align x 8 //aliniere in memorie la declararea vectorilor
#pragma align a 8
Word32 P[Simulari];
#pragma align P 8
int i;


FILE *fp;

fp=fopen("x.dat","r+b");
fread(x,sizeof(Word16),Simulari,fp);
if (!fp)
    printf("\nNu s-a deschis");
fclose(fp);

fp=fopen("a.dat","r+b");
fread(a,sizeof(Word16),N,fp);
if (!fp)
    printf("\nNu s-a deschis");
fclose(fp);

/* Tehnica de optimizare loop merging nu se poate aplica deoarece NU avem acelasi numar 
de iteratii intre bucla cu indice i si ce cu indice k a functiei, plus ca nu am mai putea 
implementa functia separat de program. Din acelasi motiv al functiei separate de program
nu se poate implementa nici tehnica multisample*/

/* Putem implementa insa tehnica loop unroll, cu factor 2, pentru ca procesorul sa execute 
in paralel doua operatii, folosindu-se de doua ALU. Factorul 4 de optimizare nu este 
potrivit acestui alogritm. Am observat insa ca nici aceasta metoda nu e potrivita 
algoritmului prezent,deoarece ingreuneaza foarte mult calculele. O voi exemplifica totusi
mai jos, ca exercitiu:

for (i=0;i<(Simulari);i=+2)
{	
	P[i]=polinomiala(a[N],x[i]);
	P[i+1]=polinomiala(a[N],x[i+1]);
}
*/
for (i=0;i<(Simulari);i++)
	P[i]=polinomiala(a[N],x[i]);

fp=fopen("p.dat","w+b");
fwrite(P,sizeof(Word32),Simulari,fp);
if (!fp)
    printf("\nNu s-a deschis");
fclose(fp);

return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -