У меня возникает ошибка сегментации при запуске моего кода на 8 процессорах, но он отлично работает для 1 и 4 процессоров.Ошибка сегментации (сбрасывается ядром) при изменении количества процессоров в lpthreads
Я использую библиотеку lpthread, и это функция, которую я выполняю в каждом потоке. Если вам нужен еще один код, я могу добавить еще.
void *compute_gauss(void *threadid){
int local_row, local_norm, col;
float multiplier;
long tid;
tid = (long)threadid;
fprintf(stdout, "Thread %ld has started\n", tid);
while (global_norm < N){
while (global_row < N) {
pthread_mutex_lock(&global_row_lock);
local_row = global_row;
global_row++;
pthread_mutex_unlock(&global_row_lock);
print_inputs();
multiplier = A[local_row][global_norm]/A[global_norm][global_norm];
for (col = global_norm; col < N; col++) {
A[local_row][col] -= A[global_norm][col] * multiplier;
}
B[local_row] -= B[global_norm] * multiplier;
}
pthread_barrier_wait(&barrier);
if (tid == 0){
global_norm++;
global_row=global_norm+1;
}
pthread_barrier_wait(&barrier); // wait until all threads arrive
}
}
Вот функция вызова, где я инициализировать барьеры:
void gauss() {
int norm, row, col; /* Normalization row, and zeroing
* element row and col */
int i = 0;
float multiplier;
pthread_t threads[procs]; //declared array of threads equal in size to # processors
global_norm = 0;
global_row = global_norm+1;
printf("Computing Parallelized Algorithm.\n");
pthread_barrier_init(&barrier, NULL, procs);
/* Gaussian elimination */
for (i = 0; i < procs; i++){
pthread_create(&threads[i], NULL, &compute_gauss, (void *)i);
}
printf("finished creating threads\n");
for (i = 0; i < procs; i++){
pthread_join(threads[i], NULL);
}
printf("finished joining threads\n");
/* (Diagonal elements are not normalized to 1. This is treated in back
* * substitution.)
* */
fprintf(stdout, "pre back substition");
/* Back substitution */
for (row = N - 1; row >= 0; row--) {
X[row] = B[row];
for (col = N-1; col > row; col--) {
X[row] -= A[row][col] * X[col];
}
X[row] /= A[row][row];
}
fprintf(stdout, "post back substitution");
}
Хорошо. Это хорошо знать. – immibis
Что такое backtrace segfault? – fluter
Stack следы пожалуйста? –