Форум программистов, компьютерный форум CyberForum.ru

Распараллеливание вычислений - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Объявить переменные разных типов в заголовке for http://www.cyberforum.ru/cpp-beginners/thread961128.html
Здравствуйте, хочу узнать можно ли как-то объявить в for переменные разных типов, например: for(int i=0, double d=1.2; i<10; i++, d+=0.5) Заранее, спасибо.
C++ Поиск максимального елемента массива , используя метод деления пополам Найти максимальный элемент в массиве a1, ..., an, используя метод деления пополам max (a1, ..., an) = max (max (a1, ..., an/2), max (an/2+1, ..., an)). http://www.cyberforum.ru/cpp-beginners/thread961122.html
C++ Как создать сервер компилятор?
Как создать сервер компилятор? Чтобы компилировала gnu c++ Я ЧАЙНИК!!!
Удаление элемента из двусвязного списка C++
Помогите пожалуйста найти где я ошибся. Элементы в список добавляются, вывод на экран тоже работает, но после удаления любого элемента: добавление в конпец списка не работает, попытка удалить элемент вызывает аварийное завершение? В чем напутал? Заранее спасибо. #include<iostream> #include<conio.h> #include<string> #include<cstdlib> #include<new> #include<iomanip> using namespace std;
C++ считывание координан из файла http://www.cyberforum.ru/cpp-beginners/thread961066.html
Добрый день,возникла проблема,нужно чтобы подпрограмма считывала координаты отрезка в пространстве (x,y,z) из файла,где будут находится координаты всех отрезков
C++ Массивы. Как перевести мат. формулу в функцию с++ в виде кода Здравствуйте, всем! Помогите объявить функцию в виде массива(3-х мерная матрица), где элементы массива равны согласно картине которую выкладываю. Нужно пробежаться по элементам матрицы в массиве, после чего умножить с каждым элементом 2-х матриц, а также их сложить и получить матрицу нового массива и в нем записать значение. Если нужно больше материала, предоставляю:... подробнее

Показать сообщение отдельно
Firework
57 / 81 / 21
Регистрация: 01.04.2013
Сообщений: 567

Распараллеливание вычислений - C++

24.09.2013, 12:42. Просмотров 890. Ответов 6
Метки (Все метки)

Вычисляю произведение матриц несколькими потоками (количество задаётся пользователем).
Потоки "засыпают" на 1 мс.
При вычислении матриц размерами больше 5 проблем не возникает. А вот при вычислении матриц размерами 3х4, 2х4
остаются не вычисленные элементы.
Когда я убираю Sleep(), то вычисления происходят нормально, но при малых размерах матрицы только одним потоком.
Вот код моей функции, адрес которой я передаю потокам для вычисления элементов матрицы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DWORD WINAPI thread_func(LPVOID Param)
{
    while (count < num_elements) {
        dwWaitResult = WaitForSingleObject( hMutex, INFINITE );
        int i = count/cols;
        if (i >= cols) {
            ExitThread(NULL);
            return 0;
        }
        int j = q%k;
        M3[i][j] = 0;
        for (int g = 0; g < rows; ++g) {
            M3[i][j] += M1[i][g] * M2[g][j]; 
        }
        ++count;  // счётчик элементов матрицы
        ReleaseMutex(hMutex);
        Sleep(1);
    }
    return 0;
}
Не вычисленными остаются последние элементы матрицы. Получается, что когда в каком-то из потоков счётчик достигает числа элементов матрицы, вычисления приостанавливаются во всех потоках?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru