Skip to content
Open
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
3 changes: 3 additions & 0 deletions 1706-4/brazhnikov_ea/OpenMPFoxAlg/Debug/OpenMP.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
 Source.cpp
c1xx : error C2338: двухэтапный поиск имен не поддерживается для C++/CLI, C++/CX или OpenMP. Используйте /Zc:twoPhase-
c1xx : fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
��
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#TargetFrameworkVersion=v4.0:PlatformToolSet=v142:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0
Debug|Win32|C:\App\CProjects\OpenMP\|
Empty file.
31 changes: 31 additions & 0 deletions 1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29613.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenMP", "OpenMP.vcxproj", "{1B1C8D32-78CD-45DF-9974-696CB25F6C82}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Debug|x64.ActiveCfg = Debug|x64
{1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Debug|x64.Build.0 = Debug|x64
{1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Debug|x86.ActiveCfg = Debug|Win32
{1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Debug|x86.Build.0 = Debug|Win32
{1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Release|x64.ActiveCfg = Release|x64
{1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Release|x64.Build.0 = Release|x64
{1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Release|x86.ActiveCfg = Release|Win32
{1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6C4D8EEB-51FE-4154-99E4-CDCA1A9EC6A1}
EndGlobalSection
EndGlobal
154 changes: 154 additions & 0 deletions 1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<ProjectGuid>{1B1C8D32-78CD-45DF-9974-696CB25F6C82}</ProjectGuid>
<RootNamespace>OpenMP</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<OpenMPSupport>true</OpenMPSupport>
<AdditionalOptions>/Zc:twoPhase- %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<OpenMPSupport>true</OpenMPSupport>
<AdditionalOptions>/Zc:twoPhase- %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<OpenMPSupport>true</OpenMPSupport>
<AdditionalOptions>/Zc:twoPhase- %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<OpenMPSupport>true</OpenMPSupport>
<AdditionalOptions>/Zc:twoPhase- %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Source.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
22 changes: 22 additions & 0 deletions 1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj.filters
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Исходные файлы">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Файлы заголовков">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Файлы ресурсов">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Source.cpp">
<Filter>Файлы ресурсов</Filter>
</ClCompile>
</ItemGroup>
</Project>
4 changes: 4 additions & 0 deletions 1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj.user
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
3 changes: 3 additions & 0 deletions 1706-4/brazhnikov_ea/OpenMPFoxAlg/Release/OpenMP.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
 Source.cpp
c1xx : error C2338: двухэтапный поиск имен не поддерживается для C++/CLI, C++/CX или OpenMP. Используйте /Zc:twoPhase-
c1xx : fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
��
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#TargetFrameworkVersion=v4.0:PlatformToolSet=v142:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0
Release|Win32|C:\App\CProjects\OpenMP\|
Empty file.
139 changes: 139 additions & 0 deletions 1706-4/brazhnikov_ea/OpenMPFoxAlg/Source.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
#include <iostream>
#include <omp.h>
#include <ctime>
#include <random>

using namespace std;

void PrintMatrix(double* matrix, int N) {

int M = N;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++)
{
cout << matrix[i * M + j] << " ";
for (int k = 0; k < (5 - log10((double)(matrix[i * M + j]))); k++)
cout << " ";
}
cout << endl;
}
cout << endl;
}

void MatrixCreate(double* A, double* B, double* C, double *CSeq, int size) {
for (int i = 0; i < size * size; ++i) {
A[i] = rand() % 10 + 1;
B[i] = rand() % 10 + 1;
C[i] = 0;
CSeq[i] = 0;
}
}

void Multiplication(double* Ablock, double* Bblock, double* Cblock, int _blockSize)
{
double temp;
for (int i = 0; i < _blockSize; i++)
for (int j = 0; j < _blockSize; j++) {
temp = 0;
for (int k = 0; k < _blockSize; k++)
temp += Ablock[i * _blockSize + k] * Bblock[k * _blockSize + j];
Cblock[i * _blockSize + j] += static_cast<int>(temp * 100) / 100;
}
}

void SequentialAlgorithm(double* A, double* B, double* C, int size) {
for (int i = 0; i < size * size; ++i)
C[i] = 0;
Multiplication(A, B, C, size);
}

void Fox(double* A, double* B, double* C, int size, int procNum) {
int Grid = int(sqrt(procNum));
int BlockSize = size / Grid;
omp_set_num_threads(procNum);
#pragma omp parallel
{
int numThreads = omp_get_thread_num();
int RowIndex = numThreads / Grid;
int ColIndex = numThreads % Grid;
for (int iter = 0; iter < Grid; iter++)
{
for (int i = RowIndex * BlockSize; i < (RowIndex + 1) * BlockSize; i++)
{
for (int j = ColIndex * BlockSize; j < (ColIndex + 1) * BlockSize; j++)
{
for (int k = iter * BlockSize; k < (iter + 1) * BlockSize; k++)
{
C[i * size + j] += A[i * size + k] * B[k * size + j];
}
}
}
}
} //pragma parallel
}

int main(int argc, char* argv[])
{
double* A;
double* B;
double* CSeq;
double* CFox;

double StartFoxAlg = 0, FinFoxAlg = 0, StartSeqAlg = 0, FinSeqAlg = 0; //�����

int size = 16; //������ �������
int procNum = 4; //���������� ���������
int BlockSize = int(sqrt(procNum)); //������ �����

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Странные входные данные для алгоритма Фокса. По смыслу в качестве аргументов командной строки должен использоваться размер матрицы (число строк=число столбцов) и размер блока. В предположении, что размер матрицы делится нацело на размер блока. Также в аргументах может задаваться количество потоков. В общем случае количество потоков не совпадает с общим числом блоков.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если я правильно понял, то все вышеперечисленное и включено в эти аргументы, где size - размер матрицы, procNum - количество потоков, и BlockSize - размер блока. Их можно менять и программа будет работать.
Или требуется сделать ввод со стороны пользователя именно при запуске программы уже?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Надо реализовать передачу параметров через аргументы командной строки,чтобы не пересобирать программу перед запуском.


if (BlockSize * BlockSize == procNum && size % BlockSize == 0) {


//�������������
A = new double[size * size];
B = new double[size * size];
CSeq = new double[size * size];
CFox = new double[size * size];

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Память из-под матриц нигде не освобождается.

MatrixCreate(A, B, CFox, CSeq,size);
//

//����� �� �����
if (size < 30) {
cout << "Matrix A" << endl;
PrintMatrix(A, size);
cout << "Matrix B" << endl;
PrintMatrix(B, size);
}
//

//FoxAlgPar
if (procNum != 1) {
StartFoxAlg = omp_get_wtime(); //omp_get_wtime ();
Fox(A, B, CFox, size, procNum);
FinFoxAlg = omp_get_wtime();
}
//

//FoxAlgSeq
StartSeqAlg = omp_get_wtime(); //omp_get_wtime ();
SequentialAlgorithm(A, B, CSeq, size);
FinSeqAlg = omp_get_wtime();
//

//����� �� �����
if (size < 30) {
cout << "Parallel Alg " << endl;
PrintMatrix(CFox, size);
}
if (size < 30) {
cout << "Seq Alg " << endl;
PrintMatrix(CSeq, size);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Надо сделать автоматическое поэлементное сравнение результатов работы последовательного и параллельного алгоритмов, а не просто вывод результатов.

cout << "time of parallel alg is " << (FinFoxAlg - StartFoxAlg) << endl;
cout << "time of seq alg is " << (FinSeqAlg - StartSeqAlg) << endl;
//
}
else
{
cout << "Error" << endl;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
d:\app\cprojects\openmp\x64\debug\vc142.pdb
d:\app\cprojects\openmp\x64\debug\vc142.idb
d:\app\cprojects\openmp\x64\debug\source.obj
d:\app\cprojects\openmp\x64\debug\openmp.exe
d:\app\cprojects\openmp\x64\debug\openmp.ilk
d:\app\cprojects\openmp\x64\debug\openmp.pdb
d:\app\cprojects\openmp\x64\debug\openmp.tlog\cl.command.1.tlog
d:\app\cprojects\openmp\x64\debug\openmp.tlog\cl.read.1.tlog
d:\app\cprojects\openmp\x64\debug\openmp.tlog\cl.write.1.tlog
d:\app\cprojects\openmp\x64\debug\openmp.tlog\link.command.1.tlog
d:\app\cprojects\openmp\x64\debug\openmp.tlog\link.read.1.tlog
d:\app\cprojects\openmp\x64\debug\openmp.tlog\link.write.1.tlog
Binary file not shown.
4 changes: 4 additions & 0 deletions 1706-4/brazhnikov_ea/OpenMPFoxAlg/x64/Debug/OpenMP.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
 Source.cpp
D:\App\CProjects\OpenMP\Source.cpp(61,11): warning C4244: инициализация: преобразование "double" в "int", возможна потеря данных
D:\App\CProjects\OpenMP\Source.cpp(96,16): warning C4244: инициализация: преобразование "double" в "int", возможна потеря данных
OpenMP.vcxproj -> D:\App\CProjects\OpenMP\x64\Debug\OpenMP.exe
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.25.28610:TargetPlatformVersion=10.0.18362.0:
Debug|x64|D:\App\CProjects\OpenMP\|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading