ファイルから浮動小数点数を読み取って並べ替えようとしています。ソートはパラレルUPCでなければなりません。それは現在のコードです:UPCによる動的配列とソートの割り当て
#include <upc_relaxed.h>
#include <upc_collective.h>
#include <stdio.h>
#include <stdlib.h>
int lt_int(shared void *x, shared void *y) {
int x_val = *(shared int *)x,
y_val = *(shared int *)y;
return x_val > y_val ? -1 : x_val < y_val ? 1 : 0;
}
shared int size=0;
int main(int argc, char* argv[]) {
FILE *f;
int i=0;
if (MYTHREAD == 0) {
f = fopen ("dane.dat", "r");
while (feof(f) == 0) {
fscanf (f, "%f\n");
++size;
}
fclose(f);
}
upc_barrier;
/* allocation goes wrong! */
shared [] float *array = upc_all_alloc(size, sizeof(float));
/* printf("%d\n",sizeof(array)); // it returns 8! */
upc_barrier;
if (MYTHREAD == 0) {
f = fopen ("dane.dat", "r");
i=0;
while (feof(f) == 0) {
printf("%d\n", i);
/* segmentation fault! */
fscanf (f, "%f\n", &array[i]);
printf("%f\n", array[i]);
i++;
}
fclose(f);
}
upc_barrier;
upc_all_sort(array, sizeof(float), size/THREADS, size, lt_int, UPC_IN_ALLSYNC);
upc_barrier;
if (MYTHREAD == 0) {
for (i = 0; i<=atoi(argv[1]) ; ++i) {
printf("%f\n", array[atoi(argv[1]) + (size/atoi(argv[1]))]);
}
}
return 0;
}
私は間違って何をしているのか分かりません。メモリの割り当てがうまくいかないため、セグメンテーション違反が発生します。手伝って頂けますか?
* 1つ以上のフロートのスペースを割り当てる必要がありますか?代わりに 'sizeof(float)* THREADS'バイトを割り当ててみてください。 – Borealid
私は試しました(私は多くのことを試しました)。 sizeof(array)は8を返します。もう一度seqmentationフォールトがあります。(。 – ciembor