双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

优化矩阵乘法程序求bug解决方法

chenlei1700 chenlei1700 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我照着资料伪代码写了个矩阵优化算法 思路就是充分利用1级缓存资源 把大矩阵分成若干个小矩阵进行乘算
问题是我算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;
}
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
chenlei1700
C语言 70,039 成员 243,237 内容