Получена функция для простого разбиения по матричной матрице. Тем не менее, запуск int8 int16 версий возвращает целочисленное деление на 0 ошибок от valgrind, & seg ошибок из командной строки. Функции int32, spfp и dpfp, которые я обеспечивал, были тем же самым текстом, кроме объявления типа, не имеют этой проблемы. Значения в матрице случайным образом разделены функцией rand(). Почему только некоторые из них возвращают деление на 0 ошибок?Вблизи идентичных функций, но только некоторые из них дают деление на 0 ошибок
Первая функция
double matrix_matrix_div_elementwise_int8(int size,int threads)
{
//initialize index variables, random number generator, and timer
int i;
int size2D=size*size;
srand(SEED);
struct TIME_STRUCT start,end;
//allocate memory for matrices
INT8_TYPE *A=malloc(sizeof(INT8_TYPE)*(size*size));
INT8_TYPE *B=malloc(sizeof(INT8_TYPE)*(size*size));
INT8_TYPE *C=malloc(sizeof(INT8_TYPE)*(size*size));
//initialize input matrices to random numbers
//initialize output matrix to zeros
for(i=0;i<(size*size);i++)
{
A[i]=rand();
B[i]=rand();
C[i]=0;
}
//serial operation
if(threads==1)
{
//start timer
TIME_GET(&start);
//computation
for(i=0;i<size2D;i++)
{
C[i]=A[i]/B[i];
}
//end timer
TIME_GET(&end);
}
//parallel operation
else
{
//start timer
TIME_GET(&start);
//parallelize with OpenMP
#pragma omp parallel for num_threads(threads) private(i)
//computation
for(i=0;i<size2D;i++)
{
C[i]=A[i]/B[i];
}
//end timer
TIME_GET(&end);
}
//free memory
free(C);
free(B);
free(A);
return TIME_RUNTIME(start,end);
}
Вторая функция
double matrix_matrix_div_elementwise_int32(int size,int threads)
{
//initialize index variables, random number generator, and timer
int i;
int size2D=size*size;
srand(SEED);
struct TIME_STRUCT start,end;
//allocate memory for matrices
INT32_TYPE *A=malloc(sizeof(INT32_TYPE)*(size*size));
INT32_TYPE *B=malloc(sizeof(INT32_TYPE)*(size*size));
INT32_TYPE *C=malloc(sizeof(INT32_TYPE)*(size*size));
//initialize input matrices to random numbers
//initialize output matrix to zeros
for(i=0;i<(size*size);i++)
{
A[i]=rand();
B[i]=rand();
C[i]=0;
}
//serial operation
if(threads==1)
{
//start timer
TIME_GET(&start);
//computation
for(i=0;i<size2D;i++)
{
C[i]=A[i]/B[i];
}
//end timer
TIME_GET(&end);
}
//parallel operation
else
{
//start timer
TIME_GET(&start);
//parallelize with OpenMP
#pragma omp parallel for num_threads(threads) private(i)
//computation
for(i=0;i<size2D;i++)
{
C[i]=A[i]/B[i];
}
//end timer
TIME_GET(&end);
}
//free memory
free(C);
free(B);
free(A);
return TIME_RUNTIME(start,end);
}
Не могли бы вы показать какой-нибудь код, пожалуйста? –
Не могли бы вы указать код [_minimal_] (https://stackoverflow.com/help/mcve), пожалуйста? – edmz