Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C# Воспроизведение файла https://www.cyberforum.ru/ csharp-beginners/ thread1829635.html
Подскажите как воспроизвести музыкальный файл(какой формата он должен быть wav mp3), сам музыкальный файл гудок теплохода длительностью 9 сек. файл лежит рядом с проектом
Разработать оконное приложение в соответствии с алгоритмами, реализованными в консольном приложении C#
По этой работе надо делать using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Лабораторная_работа_н._5 {
C# Построить циклическое консольное меню-приложение «Арифметические операции» Задача: Построить циклическое консольное меню-приложение «Арифметические операции». Команды меню задают арифметические операции, допустимые в выражениях языка C#. При выборе пункта меню пользователь получает приглашение к вводу одного или двух значений в зависимости от выбранного пункта меню, затем над значениями выполняется соответствующая операция, и ее результат выводится на консоль. https://www.cyberforum.ru/ csharp-beginners/ thread1829618.html C# Класс с методом проверки принадлежности точки заданной области Создать класс, реализующий метод проверки принадлежности точки заданной области. Вот что у меня получилось, но не уверен, что правильно... using System; using System.Text; namespace PTMExaples01x01_Project { public class Area { private double r; public double R https://www.cyberforum.ru/ csharp-beginners/ thread1829616.html
Монитор не выходит из сна по истечении времени C#
Мне надо сделать так, что по истечение 1 минуты монитор выключался, а потом через 10 секунд монитор включался. С выключение проблем нету а вот что бы выходил из сна по истечение 10 секунд не получается, просто не работает, пока я не нажму пробел //Выключение монитора private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); ...
C# Вызов команд в среде По какому принципу работает каждая из команд. Никак не могу понять. static void Main(string args) { bool _helpExsist = false; string _info = string.Empty; int _posEq = 0; for (byte _i = 0; _i < args.Length; _i++) { _posEq = args.IndexOf("="); switch (args.StartsWith("/") ?... https://www.cyberforum.ru/ csharp-beginners/ thread1829588.html
C# Определить, на сколько максимальная цифра превышает минимальную Задание - Дано натуральное число. Определить, на сколько его максимальная цифра превышает минимальную. https://www.cyberforum.ru/ csharp-beginners/ thread1829580.html C# Задан массив и число х, вставить х в массив, не нарушив порядок
Помогите решить задачу Задан массив А, упорядоченный по неубыванию, и число х. Вставить х в массив, не нарушив порядка.
C# Функцией Quarter(x, y) найти номера координатных четвертей для трех точек с данными ненулевыми координатами https://www.cyberforum.ru/ csharp-beginners/ thread1829573.html
Описать функцию Quarter(x, y) целого типа, определяющую номер координатной четверти, в которой находится точка с ненулевыми вещественными координатами (x, y). С помощью этой функции найти номера координатных четвертей для трех точек с данными ненулевыми координатами. Есть код к данной задаче, нужно сделать его рабочим. Пробовал сам, ничего не выходит. static void Main(string args)...
C# Сформировать массив 20 целых случайных чисел Сформировать массив 20 целых случайных чисел в диапазоне от минус 20 до 20. Напечатать его. Выполнить сортировку первых 10 чисел по возрастанию, а вторых 10 чисел – по убыванию значений элементов массива. Напечатать новый массив. Пожалуйста, очень необходим програмный код С#. https://www.cyberforum.ru/ csharp-beginners/ thread1829554.html
C# Описать функцию Calc(A, B, Op)
Описать функцию Calc(A, B, Op) вещественного типа, выполняющую над ненулевыми вещественными числами A и B одну из арифметических операций и возвращающую ее результат. Вид операции определяется целым параметром Op: 1 – вычитание, 2 – умножение, 3 – деление, остальные значения – сложение. С помощью Calc выполнить для данных A и B операции, определяемые данными целыми N1, N2, N3. Вообще в голову...
C# Фильтр ввода чисел Задание: Проверить попадает ли вводимая переменная в интервал от -10 до 10. Решение: static void Main(string args) { const int MIN = -10; const int MAX = 10; Console.WriteLine(" Enter a number : "); string str = Console.ReadLine(); int Num = Convert.ToInt32(str); https://www.cyberforum.ru/ csharp-beginners/ thread1829530.html
0 / 0 / 1
Регистрация: 27.12.2014
Сообщений: 298
0

Параллельное программирование - слишком большое ускорение - C# - Ответ 9663333

19.10.2016, 12:19. Показов 874. Ответов 2
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Если использовать параллельное программирование, при переходе от 1 потока к 2 потокам возможно ускорение максимум в 2 раза. А у меня при 2 потоках сильно ускорилось. Почему такое могло произойти? Может быть это какой-то turbo boost на процессоре i7-3930k или как?
Вот код функции при заданном числе потоков.
Заметил что такие резкие необъяснимые ускорения происходят только при МАЛЕНЬКИХ картинках. Например, при обработке картинки 60*16 пикселей.
Как можно объяснить такие результаты?
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
      private strParapetresTimeAllSystem getTotalTimeOneThread(Image<Lab, byte> thisImage, string strOnlyfileName, int iThreads, double dAlphaParam = 0)
        {
            //большая структура для возврата
            strParapetresTimeAllSystem BigStruct = new strParapetresTimeAllSystem();
 
            strParapetresTime strForReturnTemp = new strParapetresTime();
 
            double dTimeBinarization = 0;
            double dTimeSegmentation = 0;
            double dTimeAdditional = 0;
            double dTimeGetPirsonForParallel = 0;
            double dAlpha = 0;//для хакона Амдала
 
     
            watchAdditionalTime.Reset();
 
            //src = new Image<Lab, byte>(strFileName);
            watchAdditionalTime.Start();
            listObjectsWork.Add(new MyClass(thisImage, (int)numericUpDownMinObjectSize.Value));
            watchAdditionalTime.Stop();
            Matrix<int> finalClusters = new Matrix<int>(thisImage.Rows * thisImage.Cols, 1);
            //бинаризация
            listObjectsWork[iCountInList].Binarization(checkBoxUsePredobrabotka.Checked);
            dTimeBinarization = listObjectsWork[iCountInList].watchBinarization.Elapsed.TotalSeconds;//время бинаризации
            
            //найти контуры
 
            watchAdditionalTime.Start();
            listObjectsWork[iCountInList].FindCounturs();
            watchAdditionalTime.Stop();
            listObjectsWork[iCountInList].ControlQualityBinarization(iThreads, -1, false);            
            
 
 
            pictureBox2.Image = listObjectsWork[iCountInList].imgBinarized.ToBitmap();
 
 
            if (Directory.Exists(textBoxWorkFolder.Text) == false)
            {
                Directory.CreateDirectory(textBoxWorkFolder.Text);
            }
            if (Directory.Exists(textBoxWorkFolder.Text + strOnlyfileName) == false)
            {
                Directory.CreateDirectory(textBoxWorkFolder.Text + strOnlyfileName);
            }
            //Directory.CreateDirectory(textBoxWorkFolder.Text);
 
            //получить пиксели только объектов
            ParallelOptions options = new ParallelOptions
            {
                MaxDegreeOfParallelism = iThreads
            };
            _iallObjectsCount = listObjectsWork[iCountInList].listRect.Count;
            watchSegments.Reset();
            watchSegments.Start();
            //сегментация
            Parallel.For(0, listObjectsWork[iCountInList].listRect.Count, options, ProcessObjectList);
            watchSegments.Stop();
            for (int aa = 0; aa < listObjectsWork[iCountInList].allObjects.Length; aa++)
            {
                if (listObjectsWork[iCountInList].allObjects[aa] == null)
                {
                    int isdf = 0;
                }
            }
            watchPirson.Reset();
           watchPirson.Start();
           Parallel.For(0, listObjectsWork[iCountInList].listRect.Count, options, GetPirsonForParallel);
            watchPirson.Stop();
 
           try
           {
               string strFolder = textBoxWorkFolder.Text + strOnlyfileName;
               if (checkBoxSeveResults.Checked)
               {
                   for (int index = 0; index < listObjectsWork[iCountInList].listRect.Count; index++)
                   {
                       MyFilesWork.Save_jpg(index, strFolder, listObjectsWork[iCountInList].allObjects[index].imgObject, listObjectsWork[iCountInList].allObjects[index].imgSegmentedObject);
                       MyFilesWork.Save_txt(index, strFolder, listObjectsWork[iCountInList].allObjects[index].detailes.strSegmentsColorsAndS);
                   }
               }
           }
           catch
           {
           }
            dTimeAdditional = watchAdditionalTime.Elapsed.TotalSeconds;
            dTimeSegmentation = watchSegments.Elapsed.TotalSeconds;
            dTimeGetPirsonForParallel = watchPirson.Elapsed.TotalSeconds;
 
            strForReturnTemp.dTime = dTimeAdditional + dTimeSegmentation + dTimeGetPirsonForParallel + dTimeBinarization / _dBinarizationCoefficients[iThreads - 1] + listObjectsWork[iCountInList]._dTimePosledovatelno + listObjectsWork[iCountInList]._dTimeParallel;
            strForReturnTemp.iSize = thisImage.Cols * thisImage.Rows;
            strForReturnTemp.iThreads = iThreads;
            
            //сохранение времени работы всей системы
            BigStruct.allSystemRealTime.dTime = strForReturnTemp.dTime;
            BigStruct.allSystemRealTime.iSize = strForReturnTemp.iSize;
            BigStruct.allSystemRealTime.iThreads = iThreads;
 
            double dAmdals = 0;
 
            //далее следует сохранить время по Амдалсу
            //если 1 поток тогда рассчитываем данные сами
            if (iThreads == 1)
            {
                dAlpha = (dTimeAdditional + listObjectsWork[iCountInList]._dTimePosledovatelno)/ BigStruct.allSystemRealTime.dTime;//доля, которая может быть получена только последовательными вычислениями
                dAmdals = 1.0 / (dAlpha + (1.0 - dAlpha) * 1.0 / iThreads);
                BigStruct.dAlpha = dAlpha;//сохраним значение Альфа
            }
            //если 2 потока тогда на основании существующих данных
            else
            {
                dAlpha = dAlphaParam;
                dAmdals = 1.0 / (dAlpha + (1.0 - dAlpha) * 1.0 / iThreads);
                BigStruct.dAlpha = dAlpha;//сохраним значение Альфа
            }
            BigStruct.allSystemAmdals.dTime = dAmdals;
            BigStruct.allSystemAmdals.iSize = strForReturnTemp.iSize;
            BigStruct.allSystemAmdals.iThreads = iThreads;
            
            //далее сохраним время сегментации
            BigStruct.allSegmentation.dTime = dTimeSegmentation;
            BigStruct.allSegmentation.iSize = strForReturnTemp.iSize;
            BigStruct.allSegmentation.iThreads = iThreads;
 
            //далее сохраним время Пирсона
            BigStruct.allPirson.dTime = dTimeGetPirsonForParallel;
            BigStruct.allPirson.iSize = strForReturnTemp.iSize;
            BigStruct.allPirson.iThreads = iThreads;
 
            ////////////////////////////////////////////////////////////////////////////////////////////////////
            //удалить лишнее - чтобы сократить расходы памяти
            /*listObjectsWork[iCountInList].cannyEdges = null;
            listObjectsWork[iCountInList].imgBinarized = null;
            listObjectsWork[iCountInList].imgSource = null;
            for (int iObj = 0; iObj < listObjectsWork[iCountInList].allObjects.Count; iObj++)
            {
                listObjectsWork[iCountInList].allObjects[iObj].imgObject = null;
                listObjectsWork[iCountInList].allObjects[iObj].imgSegmentedObject = null;
                listObjectsWork[iCountInList].allObjects[iObj].listMatr = null;
            }*/
           //istObjectsWork[iCountInList] = null;
            iCountInList++;
            return BigStruct;
        }


Вернуться к обсуждению:
Параллельное программирование - слишком большое ускорение C#
Миниатюры
Параллельное программирование - слишком большое ускорение  
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2016, 12:19
Готовые ответы и решения:

Слишком большое время работы для маленького цикла
Я реализую алгоритм SURF. Имеется уже заполненная матрица яркостей, где lockBitmap.Width и...

Слишком большое потребление оперативной памяти в простом приложении
Привет. Это простое приложение чтобы делать скриншоты. Скажите почему оно занимает слишком много...

Слишком большое число
При открытии таблиц возникает такая ошибка. В конструкторе в размере поля задано длинное целое.

Слишком большое разрешение экрана
Стояла Vista Premium, пришлось переустановить на Home Basic,сразу после открытия увидела слишком...

2
19.10.2016, 12:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2016, 12:19
Помогаю со студенческими работами здесь

Слишком большое число циклов for
Здравствуйте! Столкнулся со следующей проблемой: появилась необходимость расчета большого числа...

Слишком большое разрешение экрана
Здравствуйте. Помогите пожалуйста с проблемой. Имеется ноутбук с диагональю 17.3 дюйма и...

Ttfb время слишком большое
Здравствуйте. Кто-нибудь знает, почему ttfb время слишком большое? От чего это бывает и как...

Слишком большое выделение оперативной памяти!
Искал в гугле,но конкретно с такой же проблемой не столкнулся!!!Во время обычной работы за...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru