Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2016, 17:20   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Параллельные вычисления С++

Добрый день.Мне нужно использовать технологию AMP для распараллеливания вычисления совершенных чисел(число, равное сумме всех своих собственных делителей ). Я написала эту программу и в ней использовала OMP,теперь нужно AMP. Прочитав информацию про технологию AMP выяснилось,что она работает только на ОС Windows 7 ,Windows Server 2008 R2 либо выше,переустанавливать сейчас винду нет возможности.Могли бы вы показать,что нужно исправить в моей программе,чтобы в ней использовалась технология AMP вместо OMP,если это возможно. Заранее благодарю
Код:
// lab1_rozpodil_system.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
// lab1_rozpodil_system.cpp: определяет точку входа для консольного приложения.
//
 
 
#include <iostream>
#include <iomanip>
#include <ctime>
#include <windows.h>
#include <stdio.h>
#include <cmath> 
#include <omp.h>
 
#define N 40000
 
using namespace std;
 
 
int m = 0;
int Func( int x)
{
    int *mas_num = (int *) malloc(x*sizeof(int));
    int *mas_core = (int *) malloc(x*sizeof(int));
 
    int y = 0, j = 0;
    int nthreads = 2;
    int a = omp_get_max_threads();
    
    omp_set_num_threads(a);
    
    int k = 0;
        #pragma omp parallel for
        for (int i = 1; i <= N; i++) //счетчик делителей
        {
            int sun = 0;
            for (int j = 1; j <= i/2; j++) {
    
                
                if (i%j == 0) //если проверяемое число делится на делитель без остатка
                {
                    sun += j; //в переменную sun заносим подходящий делитель
                }
            }
            if (i == sun) //если цикличная переменная равна sun
            {
                mas_num[k] = i; //значит найдено совершенное число,заносим его в массив совершенных чисел
                mas_core[k] = omp_get_thread_num(); //запоминаем поток в котором было найдено число
                k++;
 
            }
        }
        for (int i = 0; i < x; i++) {
            cout  << mas_num[i] << "*" << mas_core[i] << endl;
        }
    
            
    return 0;
}
 
int main()
 
{
    int x;
u:cout << "Enter number" << endl;
    cin >> x; //кол-во совершенных чисел, которые мы будем искать 
    if (x>4) //ограничения из-за того,что очень много времени уходит на поисх
    {
        cout << "Uncorrect" << endl;
        goto u;
    }
 
    unsigned int start_time = clock(); // начальное время
    Func( x); //вызываем ф-цию поиска и передаем кол-во чисел
    unsigned int end_time = clock(); // конечное время
    
    
    unsigned int search_time = end_time - start_time; // искомое время
    cout << "\nsearch time " << search_time / 1000.0 << endl;
 
    system("pause");
 
    return 0;
}
Вероника99 вне форума Ответить с цитированием
Старый 27.03.2016, 19:13   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Посмотрите здесь:
Введение в C++ AMP https://msdn.microsoft.com/magazine/hh882446.aspx
Learn C++ AMP https://blogs.msdn.microsoft.com/nat...0/learn-c-amp/
Parallel Programming in Visual C++ https://msdn.microsoft.com/en-us/library/hh875062.aspx
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 27.03.2016, 19:28   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Код:
    int *mas_num = (int *) malloc(x*sizeof(int));
    int *mas_core = (int *) malloc(x*sizeof(int));
Зачем здесь вообще две области открываете? Оперативки дохрна? Ну-ну. К стати, ещё и не удаляете открытое. Вообще утечка памяти - колоссальная. А потом мне же ещё и жалуются: Вот, написал прогу и комп начал тормозить. Да, после такого, не удивительно.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 27.03.2016, 21:57   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

сори, у меня тоже нет ответа и тема превратилась в оффторп.
challenger симитировал гугл.
Smitt&Wesson вспомнил детство.

а я решил посмеяться с Smitt&Wesson. ха-ха.
f.hump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу программиста для написания программы на Делфи тема: "Параллельные вычисления. Программирование с MPI" Фъюрика Фриланс 0 25.11.2012 09:27
Параллельные вычисления, С++ Anastasia.K Помощь студентам 0 07.10.2011 13:21
параллельные потоки Алма Помощь студентам 6 23.01.2011 22:09
Параллельные вычислений Иллидан Общие вопросы C/C++ 1 22.11.2010 13:07
Параллельные вычисления. работа с MPI elpilasgsm Общие вопросы C/C++ 1 27.07.2009 14:54