前提・実現したいこと
行列積の計算を、指定したサイズで行うようにしたいです。
サイズの指定は、オプションで指定するようにしてあり、変数 size に格納されています。
コンパイルのエラーは無くなったのですが、実行しても何も表示されません。
該当のソースコード
C
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
double gettime()
{
struct timespec ts;
int rv = clock_gettime(CLOCK_REALTIME, &ts);
if (rv != 0) {
printf("clock_gettime() failed\n");
exit(1);
}
return ts.tv_sec + ts.tv_nsec * 1.0e-9;
}
void dumpMat(const char *pName, double pArray, int size)
{
printf("%s[%d][%d] = {\n", pName, size, size);
for (int i = 0; i < size; i++) {
printf(" {");
for (int j = 0; j < size; j++) {
printf("%s%7.4f", ((j == 0) ? " " : ", "), pArray[isize+j]);
}
printf(" };\n");
}
printf("};\n\n");
}
int
main(int argc, char *pArgv[])
{
int size = 0;
if (argc != 2) {
printf("Usage : matmul SIZE\n");
exit(1);
}
size = atoi(pArgv[1]);
if (size <= 0) {
printf("Invalid size.\n");
}
// allocate memory for matrix a/b/c
double **a, **b, **c;
double **pA, **pB, **pC;
int i, j, k;
int n;
int term;
a = malloc(nnsizeof(double));
b = malloc(nnsizeof(double));
c = malloc(nnsizeof(double));
for(i = 0; i<nn;i++){
a[i] = malloc(nnsizeof(double));
b[i] = malloc(nnsizeof(double));
c[i] = malloc(nnsizeof(double));
}
// Initialize matrix.
// Set random value to a/b by pseudo random generator drand48().
// Matrix c is cleared bt 0.
srand(1);
pA = malloc(nsizeof(double ));
pB = malloc(nsizeof(double ));
pC = malloc(nsizeof(double *));
for(i = 0; i < n; i++){
pA[i] = a + in;
pB[i] = b + in;
pC[i] = c + in;
for(j = 0; j < n; j++){
pA[i][j] = drand48();
pB[i][j] = drand48();
printf(".");
}
}
double ts = gettime();
// Write matrix multiply code, here.
// Calculate c = a * b
for(i=0;i<3;i++){
for(j=0;j<3;j++){
c[i][j] = a[i][j] * b[i][j];
for(i=0;i<n;i++){ for(j=0;j<n;j++){ term = 0; for(k=0;k<n;k++) term = term + a[i][k] * b[k][j]; c[i][j] = term; } } }
}
double te = gettime();
printf("ELAPSED TIME : %f msec\n", (te - ts) * 1000);
if (size <= 6) {
// Output matrix.
dumpMat("a", *pA, size);
dumpMat("b", *pB, size);
dumpMat("c", *pC, size);
}
// Release memory of matrix a/b/c.
free(a);
free(b);
free(c);
free(pA);
free(pB);
free(pC);
return 0;
}
### 補足情報(FW/ツールのバージョンなど) CygwinとVimを使って書いています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/03 03:12
2018/07/03 04:07
2018/07/03 04:31
2018/07/03 04:34
2018/07/03 04:47
2018/07/03 04:55
2018/07/03 05:09