Keima
1

Потоки не работают эффективно на выделенные ядра

17.06.2012, 23:23. Показов 1433. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На 4 ядерном компе. Создаются 2 потока на 1-ое и 2-ое ядро и в диспетчере работает на 100% 1-ое
а 2-ое даже и не похоже что работает, хотя вычисления немного происходят по примеру ниже. SetThreadAffinityMask используется для визуального вида в диспетчере без него также приложение работает на 25%.
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication6
{
  
    public partial class Form1 : Form
    {
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern UIntPtr SetThreadAffinityMask(IntPtr hThread,UIntPtr dwThreadAffinityMask);
 
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern IntPtr GetCurrentThread();
 
        public Form1()
        {
            InitializeComponent();
            
        }
   
        private void button1_Click(object sender, EventArgs e)
        {
            new Thread(TT_).Start();
            new Thread(TT).Start();
        }
        static long H1;
        static long H2;
        public static void TT()
        {
            SetThreadAffinityMask(GetCurrentThread(), new UIntPtr(0x1<<0));
            while (true) { H1++;}
        }
        public static void TT_()
        {
            SetThreadAffinityMask(GetCurrentThread(), new UIntPtr(0x1 << 1));
            string TS12 = "e";
            string TS121 = "e";
            while (true) { H2++; TS12 = TS121 + "e"; }
 
        }
 
    
    }
 
   
}
Однако если сделать по примеру ниже то все начинает работать на все 2 ядра.В чем причина непонятна совсем ведь операции тока добавилось а работать стало нормально.Мажет как-то потоки создавать по другому можно или как еще этот глюк исправить?Проверялось на 2 машинах.

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication6
{
  
    public partial class Form1 : Form
    {
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern UIntPtr SetThreadAffinityMask(IntPtr hThread,UIntPtr dwThreadAffinityMask);
 
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern IntPtr GetCurrentThread();
 
        public Form1()
        {
            InitializeComponent();
            
        }
   
        private void button1_Click(object sender, EventArgs e)
        {
            new Thread(TT_).Start();
            new Thread(TT).Start();
        }
        static long H1;
        static long H2;
        public static void TT()
        {
            SetThreadAffinityMask(GetCurrentThread(), new UIntPtr(0x1<<0));
            string TS12 = "3e";
            string TS121 = "4e";
            while (true) { H1++; TS12 = TS121 + "34e"; }
        }
        public static void TT_()
        {
            SetThreadAffinityMask(GetCurrentThread(), new UIntPtr(0x1 << 1));
            string TS12 = "e";
            string TS121 = "e";
            while (true) { H2++; TS12 = TS121 + "e"; }
 
        }
 
    
    }
 
   
}
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2012, 23:23
Ответы с готовыми решениями:

Потоки на ядра
Есть программа, в которой четыре функции.Требуется запустить каждую функцию параллельно на каждое...

Процессоры, ядра, потоки. Использование ядер процессора
В какую сторону копать или что почитать? Я реализовал программные потоки, и хотел узнать о...

Intel Hyper-Threading (HTT) НЕ работает. ядра и потоки
Здравствуйте. Приобрёл процессор intel xeon x3460 2.8GHz на замену i3. В характеристиках написано:...

Многопоточность. У семафора(слим) есть функция WaitAsync(), как понять, что прошли все выделенные потоки или только один
Всем привет. Хочу замерить инициализацию потока для выполнения, для ожидания потока у...

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

Phenom 2 x6 1055t - не все ядра работают
Вот такая проблема с компом процессор Phenom 2 x6 1055t , в нем работает только одно ядро вместо 6...

Не работают 2 ядра из 6 или синий экран 0х00000101
Всем привет вообщем проблема такая, когда запускаешь комп со всеми включенными 6 ядрами процессора....

amd phenom ii x4 925 работают почему то 3 ядра
У меня amd phenom ii x4 925 работают почему то 3 ядра,в биосе включены все 4 ядра.почему так и что...

Все ядра работают на максимальной частоте в простое
Процессор i7-7700k, память HyperX Fury в разгоне до 2400 МГц через активацию XMP-профиля в БИОСе....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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