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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2013, 02:05   #1
Dilex
Пользователь
 
Аватар для Dilex
 
Регистрация: 04.11.2010
Сообщений: 76
По умолчанию Параллельное программирование в Visual C++

Задание :
1. С помощью языка С разработать алгоритм, что решает поставленную задачу, при последовательном выполнении операции.
2. Вычислить теоретическую вычислительную сложность алгоритма
3. Вычислить час выполнения алгоритма для массива размером 2048 и 4096 элементов. Для измерения времени выполнения выбрать одну из функций : _rdtsc () или GetTickCount.
4. Разработать алгоритм, что решает поставленное задание, с выполнением SIMD операций.
5. Определить время выполнения алгоритма с использованием SIMD операций.
6. Построить график зависимости времени вычисления от размера массива для пунктов 2,3 и 5


Дано : 2 массива чисел типа double одинаковой размерности. Разработать алгоритм для вычисления z[i] = x [i] - y [i]
Dilex вне форума Ответить с цитированием
Старый 20.11.2013, 12:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

По поводу распараллеливания могу предложить такое: http://www.programmersforum.ru/showthread.php?t=85876
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.11.2013, 02:22   #3
Dilex
Пользователь
 
Аватар для Dilex
 
Регистрация: 04.11.2010
Сообщений: 76
По умолчанию

Код:
// laba26.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "Time.h"
#include "Windows.h"
#include "Intrin.h"
#include <iostream>
#include <string>
#define N2048

int _tmain(int argc, _TCHAR* argv[])
{	char size;
double *arrayForX1 = new double[50000];
double *arrayForY1 = new double[50000];
double *arrayForZ1 = new double[50000];
std::string output;
DWORD startTime, endTime, outputs, dwLowDateTimeDiff, dwHighDateTimeDiff;
FILETIME Start,End, Start1, End1;

_declspec(align(16)) double arrayForAsmX1[50000] ;
_declspec(align(16)) double arrayForAsmY1[50000] ;
_declspec(align(16)) double arrayForAsmZ1[50000] ;
__m128i* pm;
__m128i* pk;
__m128i* pres;
pm = (__m128i*)arrayForAsmX1;
pk = (__m128i*)arrayForAsmY1;
pres = (__m128i*)arrayForAsmZ1;



	std::cout<<"Insert 0 for 2048 array size or 1 for 4096 array size"<<std::endl;
	std::cin>>size;

			for (int i = 0; i < 50000; i++)
			{
				
				arrayForX1[i] = rand()% 100+1;
				arrayForY1[i] = rand() % 100+1;
				arrayForAsmX1[i] = rand()% 100+1;
				arrayForAsmY1[i] = rand()% 100+1;
			}			

			GetSystemTimeAsFileTime(&Start);
			startTime = GetTickCount();
			for (int j = 0; j < 10000; j++)
			{
			for (int i = 0; i < 2048; i++)
			{				
				arrayForZ1[i] = arrayForX1[i] - arrayForY1[i];
			}
			}
			GetSystemTimeAsFileTime(&End);
			endTime = GetTickCount();
			outputs = endTime-startTime;
			dwHighDateTimeDiff = End.dwHighDateTime - Start.dwHighDateTime;
			dwLowDateTimeDiff = End.dwLowDateTime - Start.dwLowDateTime;
			std::cout<<outputs<<std::endl;
			std::cout<<dwHighDateTimeDiff<<std::endl;
			std::cout<<dwLowDateTimeDiff<<std::endl;
			Start1.dwHighDateTime = 0;
			Start1.dwLowDateTime = 0;
			GetSystemTimeAsFileTime(&Start1);
			startTime = 0;
			startTime = GetTickCount();
			for (int j = 0; j < 10000; j++)
			{
			for (int i = 0; i < 2048/8; i++)
			{
				*(pres+16)=_mm_sub_epi16(*(pm+16),*(pk+16));
			}
			}
			End1.dwHighDateTime = 0;
			End1.dwLowDateTime = 0;
			GetSystemTimeAsFileTime(&End1);
			endTime = 0;
			endTime = GetTickCount();
			outputs = endTime-startTime;
			dwHighDateTimeDiff = End1.dwHighDateTime - Start1.dwHighDateTime;
			dwLowDateTimeDiff = End1.dwLowDateTime - Start1.dwLowDateTime;
			std::cout<<outputs<<std::endl;
			std::cout<<dwHighDateTimeDiff<<std::endl;
			std::cout<<dwLowDateTimeDiff<<std::endl;		
	std::cin>>size;
	return 0;
}
сделал так не компилиться где ошибка мбб ?
Dilex вне форума Ответить с цитированием
Старый 21.11.2013, 12:37   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
где ошибка
А ты у компилятора спроси - он скажет на какой строке и какая.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параллельное программирование DENiskaKURT Помощь студентам 2 26.02.2011 13:31
Параллельное программирование L10n Помощь студентам 5 05.08.2010 15:13
Параллельное программирование mages Общие вопросы C/C++ 18 25.12.2009 17:59
Параллельное программирование Renegad Фриланс 5 10.06.2008 18:11
Параллельное программирование Ugly Win Api 7 16.03.2008 15:33