Форум программистов, компьютерный форум, киберфорум
OpenMP
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 23.01.2021
Сообщений: 10
1

Получаю Segmentation Fault с OpenMP

26.11.2021, 23:16. Показов 4299. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Уже весь вечер торчу над кодом который нужно из одно поточного в многопоточный переделать. Сама программа делает тренировку и потом тест, как я понял, нейронная сеть в общем (хотя это не точно). Может ли кто подсказать почему дает ошибку по коду?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/// <summary>
/// Classifies and evaluates performance with the specified samples.
/// </summary>
/// <param name="test">The test samples to be classified.</param>
/// <param name="labels">Output parameter with a vector of integers that represents the most common label of the k nearest neighbors for each of the test samples.</param>
/// <returns>
/// The accuracy of the classification.
/// </returns>
double KNN::classifyAndEvaluate(const std::vector<TSample> &test, std::vector<int> &labels) const
{
    #pragma omp flush
    #pragma pack (2)
    int matches = 0;
    #pragma omp parallel for
    for(int i=0;i<test.size();i++)
    {
        std::cout<<i<<"/"<<test.size()<<"\r"<<std::flush;
        int label = this->classify(test[i]);
        labels.push_back(label);
        if(label == test[i].label) matches++;
        
    }
    
    return matches / (double)test.size();
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/// <summary>
/// Classifies the specified sample.
/// </summary>
/// <param name="test">The test sample to be classified.</param>
/// <returns>
/// An integer that represents the most common label of the k nearest neighbors of the test samples.
/// </returns>
int KNN::classify(const TSample &test) const
{
    std::vector<KNNResult> results;
 
    for(int i=0;i<this->train.size();i++)
    {
        KNNResult training;
        training=KNNResult(test, this->train[i]);
        #pragma omp critical
        {
        results.push_back(training);
        }   
    }
    
    
    std::sort(results.begin(), results.end());
    
    return maxVotesLabel(histogram(results, this->k));
}


Пример вывода из консоли
Starting search for best K parameter in range [1, 10] using 5-Folds Cross Validation with 20000 samples.
Testing k 1
Starting 5-Folds Cross Validation
Testing fold 0
Fold: 0 Accuracy: 96.375% completed in 13.5115 seconds
Testing fold 1
Fold: 1 Accuracy: 95.95% completed in 13.31 seconds
Testing fold 2
Fold: 2 Accuracy: 95.925% completed in 13.2212 seconds
Testing fold 3
Fold: 3 Accuracy: 96.225% completed in 13.2977 seconds
Testing fold 4
Violación de segmento (`core' generado)

Я пытался поставить pragma omp parallel for в classify тоже но не помогло.
Также я сделал следующий код когда пробовал и в принципе он работает, но я также не уверен так как проценты Accuracy ниже (примерно на 5%):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
int KNN::classify(const TSample &test) const
{
    int i=0;
    std::vector<KNNResult> results;
    //std::cout<<train.size();
    
    int numThreads=4;
    int tam=train.size()/numThreads;
    #pragma omp parallel sections shared (results) private (i)
    {
        #pragma omp section
        {
            for(i=tam*0;i<train.size()*(1/4);i++)
            {
                results.push_back(KNNResult(test, this->train[i]));
            }
        }
        
        #pragma omp section
        {
            for(i=tam*1;i<train.size()*(2/4);i++)
            {
                results.push_back(KNNResult(test, this->train[i]));
            }
        }
        
        #pragma omp section
        {
            for(i=tam*2;i<train.size()*(3/4);i++)
            {
                results.push_back(KNNResult(test, this->train[i]));
            }
        }
        
        #pragma omp section
        {
            for(i=tam*3;i<train.size();i++)
            {
                results.push_back(KNNResult(test, this->train[i]));
            }
        }
        
    }
    
    std::sort(results.begin(), results.end());
    
    return maxVotesLabel(histogram(results, this->k));
}
Буду благодарен за любую помощь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2021, 23:16
Ответы с готовыми решениями:

Mpi segmentation fault
Здравствуйте! Пробую пользоваться openMPI. Есть компьютер, на который без меня установлен openMPI,...

Получаю segmentation fault
Всем привет! Я пишу программу, которая должна по заданному ИД-шнику процесса найти все его...

Segmentation fault
Доброго времени суток. Есть 2 класса. object class object{ void (*f)(object*); public:...

Segmentation fault
Собственно отрывок кода: my_news.max_news = atoi(sql(&quot;SELECT COUNT(*) FROM t_news WHERE a_id&quot;));...

Segmentation fault
Здраствуйте, написал программу в qt-creator, проект на си без qt ось убунту и решил затестить на...

1
фрилансер
5834 / 5351 / 1101
Регистрация: 11.10.2019
Сообщений: 14,312
27.11.2021, 08:53 2
Цитата Сообщение от Sergswa Посмотреть сообщение
#pragma pack (2)
вот это 100% нужно убрать

Добавлено через 1 минуту
в функции KNN::classifyAndEvaluate для std::vector<int> &labels нужно добавить межпоточную синхронизацию

Добавлено через 59 секунд
в функции KNN::classify - для std::vector<KNNResult> results;

Добавлено через 45 секунд
может, ещё какие косяки есть, я не вникал ) Это то, что сразу бросается
0
27.11.2021, 08:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2021, 08:53
Помогаю со студенческими работами здесь

Segmentation fault
Пишу лабу для универа. В общем необходимо использовать только свои функции, никаких, str......

Segmentation fault
Не могу разобраться в чем проблема :wall: хотя примерно понимаю, что она связана с удалением...

Segmentation fault
Доброго времени суток. Столкнулся в программе с ошибкой Segmentation fault. Вообще, задача...

Segmentation Fault
void Coder::set(const char * buf, size_t size) { if ((buf == nullptr)) { throw...

Segmentation fault
Помогите найти плз ошибку(и), из-за которой происходит ошибка сегментации Само задание: дана...

Segmentation fault: 11
Смысл программы: вводят строку, я должен разделить на слова, если что-то в кавычках - присоединить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru