问题是方阵乘法,我得到了顺序脚本,其中矩阵从文本文件加载。文本文件的第一行包含多少对矩阵及其尺寸。所以它们都是相同的大小并成对存储。所有对应逐一增加,结果应存储或打印在终端中。因此,我必须构建一个细粒度的代码版本,用户决定创建 n 线程,对于每对矩阵, n 线程应该采用工作的一部分。主要的问题是,我的细粒度版本,尽管得到正确的结果,比顺序版本花费更多的时间来完成这项工作,我重申了问题是我正在创建和销毁每对矩阵的线程,我我假设需要大量的时间。那么,有没有办法只创建一次这些线程,并在每次需要时调用它们?
以下是代码的一部分:
for(k=0; k<nmats; k++) {//Loading matrices from matrices.data
printf("\nMatrix #%d of %d\n",k+1,nmats);
for(i=0; i<matrixSize; i++) {
for(j=0; j<matrixSize; j++) {
fscanf(fh, "%lf", &a[i][j]);
}
}
for(i=0; i<matrixSize; i++) {
for(j=0; j<matrixSize; j++) {
fscanf(fh, "%lf", &b[i][j]);
}
}
//Creation of Threads
for(t=0; t<NUM_THREADS; t++)
{
//The threads are created sequentially
rc = pthread_create(&threads[t], NULL, mm, (void *)t);
if (rc)
{
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
for(t=0; t<NUM_THREADS; t++)
{
rc = pthread_join(threads[t], &status);
if (rc)
{
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
printResult(fres,results);//Calling printing function
}
文本文件应如下所示(例如1对3x3大小的矩阵):
1 3
1 -5 20
0 3 4
-2 7 9
-2 4 -3
11 8 -4
6 9 5