Esempio n. 1
0
char *mult(char *a, char *b)
{
	char *pp;
	int lena, lenb, n;
	char *tmp;

	lena = strlen(a);
	lenb = strlen(b);
	n = max_n(lena, lenb);

	reverse(a);
	reverse(b);

	if(n == lenb) {
		tmp = a;
		a = b;
		b = tmp;
	}

	/* 1 extra for null char */
	pp = malloc(n*2 + 1);
	pp[n*2] = 0;
	for(int i = 0; i < n*2; i++)
		pp[i] = '0';

	mult1(a, b, pp, n, 0);

	reverse(pp);
	reverse(a);
	reverse(b);
	return pp;
}
Esempio n. 2
0
void mult(int a[size], int n, int c[size])
{
	int *d=new int[size];
	for(int i=0; i<size; i++)
		d[i]=0;

	int *cmult=new int[size];

	while(n>0){
		mult1(a, n%10, cmult);
		add(d, cmult, d);
		n/=10;
	}
	for(int i=0; i<size; i++)
		c[i]=d[i];
}
Esempio n. 3
0
void mult1(char a[], char b[], char pp[], int n, int level) {
	int mplier;
	int res, car;
	if(level == strlen(b))
		return;
	else {
		mplier = str2int(b[level]);
		for(int i = 0; i < n; i++) {
			res = (str2int(a[i]) * mplier) + str2int(pp[level+i]);
			car = res / 10;
			res = res % 10;
			pp[level+i] = int2str(res);
			pp[level+i+1] = int2str(str2int(pp[level+i+1]) + car);
		}
		return mult1(a, b, pp, n, level+1);
	}
}
Esempio n. 4
0
/* Main computational kernel. The whole function will be timed,
   including the call and return. */
    static
void kernel_floyd_warshall(int n,
        DATA_TYPE POLYBENCH_2D(path,N,N,n,n))
{
    int i1, i2, j3;

#pragma scop

    for(int k=0; k< _PB_N; k++){
        multifor(i1=0,i2=0,j3=0; i1<k+1, i2<k+1, j3<k+1; i1++,i2++,j3++; 1,1,1; 0,1,1){
0:{
      mult1(i1, path, k);
  }
1:{
      mult2(i2,path, n, k);
  }
2:{
      mult3(j3,path,n,k);
  }
        }
    for(int i=k+1; i<n;i++){
        for(int j=k+1;j<n;j++){
            path[i][j] = path[i][j] < path[i][k] + path[k][j] ? path[i][j] : path[i][k] + path[k][j];
        }
    }
    }
    //source code  for (k = 0; k < _PB_N; k++)
    //source code  {
    //source code      for(i = 0; i < _PB_N; i++)
    //source code          for (j = 0; j < _PB_N; j++)
    //source code              path[i][j] = path[i][j] < path[i][k] + path[k][j] ?
    //source code                  path[i][j] : path[i][k] + path[k][j];
    //source code  }
#pragma endscop

}
int main(void)
{
	FILE *finalB1L1 = fopen("finalB1L1.txt", "r");
	FILE *finalB1L2 = fopen("finalB1L2.txt", "r");
	FILE *finalW1L1 = fopen("finalW1L1.txt", "r");
	FILE *finalW1L2 = fopen("finalW1L2.txt", "r");
	FILE *finalSoftmaxTheta = fopen("finalSoftmaxTheta.txt", "r");
	FILE *testData = fopen("testData.txt", "r");
	FILE *testLabels = fopen("testLabels.txt", "r");
	FILE *testresult = fopen("result.txt", "r");

	int Labels[10000];

	char line[8000];
	char *ptr;
	int i;
	int j;


	void *VA;
	int fd;
	clock_t time;


	if ((fd = open("/dev/mem", (O_RDWR|O_SYNC))) == -1) {
		perror("ERROR: could not open \"/dev/mem\"\n");
		return 1;
	}

	VA = mmap(NULL, HW_SPAN, (PROT_READ|PROT_WRITE), MAP_SHARED, fd, HW_BASE);
	if (VA == MAP_FAILED) {
		perror("ERROR: mmap() failed ... \n");
		close(fd);
		return 1;
	}
	sdram = VA + ((unsigned long)(HW_BASE + 0x00) & (unsigned long)(HW_MASK));
	printf("sdram = 0x%X\n", (unsigned int)sdram);





	puts("parsing start");
	time = (float) clock();
	i = 0;
	while (fgets(line, 8000, finalB1L1) != NULL) {
		line[strlen(line)-1] = '\0';
		((float*)sdram)[B1L1_OFFSET+i] = atof(line);
		i++;
	}


	i = 0;
	while (fgets(line, 8000, finalB1L2) != NULL) {
		line[strlen(line)-1] = '\0';
		((float*)sdram)[B1L2_OFFSET+i] = atof(line);
		i++;
	}

	i = 0;
	while (fgets(line, 8000, testLabels) != NULL) {
		line[strlen(line)-1] = '\0';
		Labels[i] = atoi(line);
		i++;
	}


	unsigned short buf = 0;
	int count = 0;
	int writeCount = 0;

	while (fgets(line, 8000, finalW1L1) != NULL) {
		line[strlen(line)-1] = '\0';
		ptr = strtok(line, ",");

		while (ptr != NULL) {
			count++;
			buf <<= 4;
			buf = buf | ((short)(round(atof(ptr))) & 0xF);

			if (count == BUS_WITH/4) {
				count = 0;
				((short*)sdram)[WEIGHTS1_OFFSET + writeCount++] = buf;
				buf = 0;
			}
			ptr = strtok(NULL, ",");
		}
	}


	buf = 0;
	count = 0;
	writeCount = 0;

	while (fgets(line, 8000, finalW1L2) != NULL) {
		line[strlen(line)-1] = '\0';
		ptr = strtok(line, ",");

		while (ptr != NULL) {
			count++;
			buf <<= 4;
			buf = buf | ((short)(round(atof(ptr))) & 0xF);

			if (count == BUS_WITH/4) {
				count = 0;
				((short*)sdram)[WEIGHTS2_OFFSET + writeCount++] = buf;
				buf = 0;
			}
			ptr = strtok(NULL, ",");
		}
	}


	rewind(finalW1L2);
	i = 0;
	j = 0;
	while (fgets(line, 8000, finalW1L2) != NULL) {
		line[strlen(line)-1] = '\0';
		ptr = strtok(line, ",");

		while (ptr != NULL) {
			((float*)sdram)[W1L2_OFFSET+i*200+j] = atof(ptr);
			j++;
			ptr = strtok(NULL, ",");
		}
		j = 0;
		i++;
	}


	i = 0;
	j = 0;
	while (fgets(line, 8000, finalSoftmaxTheta) != NULL) {
		line[strlen(line)-1] = '\0';
		ptr = strtok(line, ",");

		while (ptr != NULL) {
			((float*)sdram)[SOFTMAX_OFFSET+i*200+j] = atof(ptr);
			j++;
			ptr = strtok(NULL, ",");
		}
		j = 0;
		i++;
	}

	i = 0;
	j = 0;
	while (fgets(line, 8000, testData) != NULL) {
		line[strlen(line)-1] = '\0';
		ptr = strtok(line, ",");

		while (ptr != NULL) {
			((float*)sdram)[DATA_OFFSET+i*784+j] = round(atof(ptr));
			j++;
			ptr = strtok(NULL, ",");
		}
		j = 0;
		i++;
	}

	fprintf(stderr, "parsing end: %.2f seconds\n",(float) (clock() - time) / CLOCKS_PER_SEC);






	float max = 0;
	int maxidx = 0;
	int fignum = 0;
	count = 0;

	time = (float) clock();
	for (fignum = 0; fignum < FIGNUM; fignum++) {
		//writeZero();
		mult1(fignum, 200, 784, 1);
		//writeResult(results, fignum);
		add(HIDDEN1_OFFSET, B1L1_OFFSET, 200, 1);
		sigmoid(HIDDEN1_OFFSET, 200);

		//mult2(W1L2_OFFSET, HIDDEN1_OFFSET, 200, 200, 1);
		newmult2(W1L2_OFFSET, HIDDEN1_OFFSET, 200, 200, 1);
		add(HIDDEN2_OFFSET, B1L2_OFFSET, 200, 1);
		sigmoid(HIDDEN2_OFFSET, 200);

		mult3(SOFTMAX_OFFSET, HIDDEN2_OFFSET, 10, 200, 1);
		sigmoid(OUT_OFFSET, 10);
		
		for (i = 0; i< 10; i++ ) {
			//printf("%.3f\t", final[i][0]);
			if (((float*)sdram)[OUT_OFFSET+i] > max) {
				max = ((float*)sdram)[OUT_OFFSET+i];
				maxidx = i + 1;
			}
		}
		printf("max_index = %d; expected %d\n", maxidx, Labels[fignum]);

		if (Labels[fignum] == maxidx) {
			count++;
		}
		
		max = 0;
		maxidx = 0;
	}

	fprintf(stderr, "Calculation: %.2f seconds\n",(float) (clock() - time) / CLOCKS_PER_SEC);
	printf("sample size = %d, accuracy = %f\n", fignum, count / (float)fignum);
	return 0;
}
Esempio n. 6
0
//最终返回长度集合
vector<double>MyCalcu::calculate( double X, double Y, double Z, double a, double b, double c)
{  
    //存储上下顶点集合
	vector<matrixly> v1;
    vector<matrixly> v2;
	
	//存储Bi点的集合
    vector<matrixly> v3;

	//杆长临时集合
	vector<double> temp_list; 
	
	//杆长变化集合
	vector<double> move_list;
	//视觉识别X,Y,Z 结构体
	matrixly CA;
	CA.dataly[0][0]=X;
    CA.dataly[1][0]=Y;
    CA.dataly[2][0]=Z+400;
	CA.rowly=3;
	CA.colly=1;

	//下平台点坐标
    matrixly C1;
	matrixly C2;
	matrixly C3;
	matrixly C4;
	matrixly C5;
	matrixly C6;
	matrixly C7;
	matrixly C8;
    
    double dataC1[3] ={-200,158,0}; 
	double dataC2[3] ={60,158,0};
	double dataC3[3] ={200,158,0};
	double dataC4[3] ={258,60,0}; 
	double dataC5[3] ={200,-158,0};
	double dataC6[3] ={-60,-158,0};
	double dataC7[3] ={-200,-158,0};
	double dataC8[3] ={-258,-60,0};
	
    
	for(int q=0;q<3;q++)
		{
			C1.dataly[q][0]=dataC1[q];
		    C2.dataly[q][0]=dataC2[q];
			C3.dataly[q][0]=dataC3[q];
			C4.dataly[q][0]=dataC4[q];
			C5.dataly[q][0]=dataC5[q];
			C6.dataly[q][0]=dataC6[q];
			C7.dataly[q][0]=dataC7[q];
			C8.dataly[q][0]=dataC8[q];

	}
		C1.rowly=3;
		C1.colly=1;
		C2.rowly=3;
		C2.colly=1;
		C3.rowly=3;
		C3.colly=1;
		C4.rowly=3;
		C4.colly=1;
		C5.rowly=3;
		C5.colly=1;
		C6.rowly=3;
		C6.colly=1;
		C7.rowly=3;
		C7.colly=1;
		C8.rowly=3;
		C8.colly=1;
		
	  v1.push_back( C1 );
	  v1.push_back( C2 );
	  v1.push_back( C3 );
	  v1.push_back( C4 );
	  v1.push_back( C5 );
	  v1.push_back( C6 );
	  v1.push_back( C7 );
	  v1.push_back( C8 );

	//上平台点坐标
    matrixly A1;
	matrixly A2;
	matrixly A3;
	matrixly A4;
	matrixly A5;
	matrixly A6;
	matrixly A7;
	matrixly A8;

	double dataA1[3] ={-200,158,0}; 
	double dataA2[3] ={-60,158,0};
	double dataA3[3] ={200,158,0};
	double dataA4[3] ={258,-60,0};
	double dataA5[3] ={200,-158,0}; 
	double dataA6[3] ={60,-158,0}; 
	double dataA7[3] ={-200,-158,0}; 
	double dataA8[3] ={-258,60,0}; 

		for(int p=0;p<3;p++)
		{
			A1.dataly[p][0]=dataA1[p];
			A2.dataly[p][0]=dataA2[p];
			A3.dataly[p][0]=dataA3[p];
			A4.dataly[p][0]=dataA4[p];
			A5.dataly[p][0]=dataA5[p];
			A6.dataly[p][0]=dataA6[p];
			A7.dataly[p][0]=dataA7[p];
			A8.dataly[p][0]=dataA8[p];
		}

        A1.rowly=3;
		A1.colly=1;
		A2.rowly=3;
		A2.colly=1;
		A3.rowly=3;
		A3.colly=1;
		A4.rowly=3;
		A4.colly=1;
		A5.rowly=3;
		A5.colly=1;
		A6.rowly=3;
		A6.colly=1;
		A7.rowly=3;
		A7.colly=1;
		A8.rowly=3;
		A8.colly=1;

	v2.push_back( A1 );	
	v2.push_back( A2 );	
	v2.push_back( A3 );	
	v2.push_back( A4 );	
	v2.push_back( A5 );	
	v2.push_back( A6 );	
	v2.push_back( A7 );	
	v2.push_back( A8 );	
         
	//A	
	double data1[3][3] ={1,0,0,0,cos(a),-sin(a),0,sin(a),cos(a)};
	//B
	double data2[3][3] ={cos(b),0,sin(b),0,1,0,-sin(b),0,cos(b)};
	//C
	double data3[3][3] ={cos(c),-sin(c),0,sin(c),cos(c),0,0,0,1};
	matrix A;
	A.col=3;
	A.row=3;
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
		{
           	A.data[i][j]=data1[i][j];
		}
		matrix B;
		B.col=3;
		B.row=3;
		for(int m=0;m<3;m++)
			for(int n=0;n<3;n++)
			{
				B.data[m][n]=data2[m][n];
			}
			matrix C;
			C.col=3;
			C.row=3;
			for(int o=0;o<3;o++)
				for(int p=0;p<3;p++)
				{
					C.data[o][p]=data3[o][p];
				}

				//show(A);
				//show(B);
				//show(C);
				//show(mult(C,B));
				//show(mult(mult(C,B),A));
				//showly(mult1(mult(mult(C,B),A), v2.at(1)));
				//showly(add(CA,mult1(mult(mult(C,B),A), v2.at(1))));

	           //进行8次求解Bi
				for(int count = 0; count<8;count++)
				{
				 //添加集合
                 v3.push_back(add(CA,mult1( mult(mult(C,B),A), v2.at(count))));
                
				}
				//清空数据
				temp_list.clear();
				//计算长度
				for(int countn=0;countn<8;countn++)
				{
                 temp_list.push_back(distance(v3.at(countn),v1.at(countn)));
				}
				return temp_list;		
};