forked from mia/Aegisub
Added a small .cpp file (console program) to show how a pipeline is done in OpenMP.
Originally committed to SVN as r2066.
This commit is contained in:
parent
da0a10ce99
commit
0a0f383b4a
3 changed files with 59 additions and 3 deletions
55
aegilib/test/omp_pipeline.cpp
Normal file
55
aegilib/test/omp_pipeline.cpp
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <omp.h>
|
||||||
|
|
||||||
|
double wasteTime(double in)
|
||||||
|
{
|
||||||
|
double accum = in;
|
||||||
|
for (size_t i=0;i<5000000;i++) {
|
||||||
|
accum = accum + accum/2.0 - accum/3.0;
|
||||||
|
}
|
||||||
|
return accum;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
using namespace std;
|
||||||
|
cout << "OpenMP test:\n";
|
||||||
|
bool run = true;
|
||||||
|
int n = 0;
|
||||||
|
omp_set_num_threads(8);
|
||||||
|
#pragma omp parallel shared(run,n)
|
||||||
|
{
|
||||||
|
while (run) {
|
||||||
|
int myTask;
|
||||||
|
double lol = 0.0;
|
||||||
|
|
||||||
|
#pragma omp critical (secA)
|
||||||
|
{
|
||||||
|
myTask = n;
|
||||||
|
n++;
|
||||||
|
if (myTask >= 50) run = false;
|
||||||
|
if (run) {
|
||||||
|
cout << "Thread #" << omp_get_thread_num() << " on task " << myTask << "/1.\n";
|
||||||
|
lol -= wasteTime(myTask * 1.0);
|
||||||
|
cout << "Thread #" << omp_get_thread_num() << " got " << lol << " on task " << myTask << "/1. Task done.\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (run) {
|
||||||
|
#pragma omp critical (secB)
|
||||||
|
{
|
||||||
|
cout << "Thread #" << omp_get_thread_num() << " on task " << myTask << "/2.\n";
|
||||||
|
lol += wasteTime(myTask * 2.0);
|
||||||
|
cout << "Thread #" << omp_get_thread_num() << " got " << lol << " on task " << myTask << "/2. Task done.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma omp critical (secC)
|
||||||
|
{
|
||||||
|
cout << "Thread #" << omp_get_thread_num() << " on task " << myTask << "/3.\n";
|
||||||
|
lol -= wasteTime(myTask * 3.0);
|
||||||
|
cout << "Thread #" << omp_get_thread_num() << " finished task " << myTask << " with the useless result of " << lol << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -40,8 +40,8 @@
|
||||||
#include "text_file_reader.h"
|
#include "text_file_reader.h"
|
||||||
#include "text_file_writer.h"
|
#include "text_file_writer.h"
|
||||||
|
|
||||||
|
int main()
|
||||||
int main() {
|
{
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Gorgonsub;
|
using namespace Gorgonsub;
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ int main() {
|
||||||
// Load subtitles
|
// Load subtitles
|
||||||
cout << "Loading file... ";
|
cout << "Loading file... ";
|
||||||
timer.Start();
|
timer.Start();
|
||||||
control.LoadFile(L"subs_in.ass",L"UTF-16LE");
|
control.LoadFile(L"subs_in.ass",L"UTF-8");
|
||||||
timer.Pause();
|
timer.Pause();
|
||||||
cout << "Done in " << timer.Time() << " ms.\n";
|
cout << "Done in " << timer.Time() << " ms.\n";
|
||||||
//system("pause");
|
//system("pause");
|
||||||
|
|
|
@ -120,6 +120,7 @@
|
||||||
AdditionalIncludeDirectories="../include"
|
AdditionalIncludeDirectories="../include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||||
RuntimeLibrary="2"
|
RuntimeLibrary="2"
|
||||||
|
OpenMP="false"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="4"
|
WarningLevel="4"
|
||||||
Detect64BitPortabilityProblems="true"
|
Detect64BitPortabilityProblems="true"
|
||||||
|
|
Loading…
Reference in a new issue