优化矩阵乘法程序求bug解决方法
我照着资料伪代码写了个矩阵优化算法 思路就是充分利用1级缓存资源 把大矩阵分成若干个小矩阵进行乘算
问题是我算10*10的矩阵没有问题 算1000*1000就出bug了
我估计是内存分配或者指针越界的问题 但是我找不出来了
求高手帮我找找到底哪里出错了。
代码如下(ubuntu下编译的)
问题是我算10*10的矩阵没有问题 算1000*1000就出bug了
我估计是内存分配或者指针越界的问题 但是我找不出来了
求高手帮我找找到底哪里出错了。
代码如下(ubuntu下编译的)
#include<sys/types.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sched.h>
#include <time.h>
#include <sys/time.h>
#include <pthread.h>
#include <sys/wait.h>
#define N 100
#define THREAD_NUM 1
void thread_func(void *arg){
printf("thread start \n");
int i,j,k,i2,j2,k2;
double **a;
double **b;
double **c;
double *aa,*bb,*cc;
a = (double**)malloc(sizeof(int*)*N);
for (i=0; i<N; i++)
a[i] = (double*)malloc(sizeof(double)*N);
b = (double**)malloc(sizeof(double*)*N);
for (i=0; i<N; i++)
b[i] = (double*)malloc(sizeof(double)*N);
c = (double**)malloc(sizeof(double*)*N);
for (i=0; i<N; i++)
c[i] = (double*)malloc(sizeof(double)*N);
srand((unsigned)time(NULL));
for(i = 0; i < N; i++)
for(j = 0; j <N; j++)
*(*(a+i)+j) = 555.123;
for(i = 0; i < N; i++)
for(j = 0; j <N; j++){
*(*(b+i)+j) = 666.456;
}
for(i = 0; i < N; i++)
for(j = 0; j <N; j++){
*(*(c+i)+j) = 0.0;
if(j==N-1&&i==N-1)
printf("*(*(b+i)+j) =%f \n",*(*(b+i)+j));
}
for(i = 0; i < N; i+=8)
for(j = 0; j < N; j+=8)
for(k = 0; k < N; k+=8)
for(i2=0,cc=&(*(*(c+i)+j)),aa=&(*(*(a+i)+k));i2<8;++i2,cc+=N,aa+=N)
for(k2=0,bb=&(*(*(b+k)+j));k2<8;++k2,bb+=N)
for(j2=0;j2<8;++j2){
*(cc+j2)+=*(aa+k2)*(*(bb+j2));
//printf("cc ,*(cc+j2)%d %d\n",cc,*(cc+j2));
}
printf("ready to free \n");
for (i=0; i<N; i++)
free(a[i]); free(b[i]);free(c[i]);
free(a);free(b);free(c);
printf("thread done \n");
}
int main(void)
{
printf("program start \n");
int i;
pthread_t handle[THREAD_NUM];
for( i=0;i<THREAD_NUM;i++)
pthread_create(&handle[i],NULL,(void*)thread_func,NULL);
for(i=0;i<THREAD_NUM;i++)
pthread_join(handle[i],NULL);
perror("a*b leaveing");
return 0;
}
...全文
相关推荐
python实现矩阵乘法的方法
本文实例讲述了python实现矩阵乘法的方法。分享给大家供大家参考。具体实现方法如下: def matrixMul(A, B): res = [[0] * len(B[0]) for i in range(len(A))] for i in range(len(A)): for j in range(len(B[0])): for k in range(len(B)): res[i][j] += A[i][k] * B[k][j] return res def matrixMul2(A, B): return [[sum(a * b for
x86汇编写矩阵乘法问题(实现一个3×3矩阵乘法的汇编代码)
ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏「Bug调优」,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个,您的支持就是我坚持写作分享知识点传播技术的最大动力。「猿圈奇妙屋」;
基于FPGA的矩阵乘法器
该代码是基于FPGA的矩阵乘法器的代码,可以实现32x32大小有符号矩阵相乘,开发环境是ISE,用modelsim进行仿真
java 二维数组矩阵乘法的实现方法
java 二维数组矩阵乘法的实现方法,需要的朋友可以参考一下
基于c语言实现的矩阵乘法
基于c语言的两个n*n维矩阵的乘法,值得借鉴其中的思维模式。



