Потоки Qt, по-видимому, не разделяются одинаково на ядра - PullRequest
0 голосов
/ 29 марта 2012

У меня многопоточное приложение.Однако я заметил, что я использую OpenGL, и это не должно работать без семафоров.И это сделал.Я добавил семафоры позже, потому что они должны использоваться.

Не так уж велик тот факт, что у меня теперь есть многопоточное приложение, которое на самом деле не использует несколько потоков или ядер на процессоре.

Кажется, что баланс моей нагрузки всегда идет к одному ядру (из 4) с разницей не менее 40%.

Нужно ли переключать триггер в файле проекта Qt илиЯ что-то упускаю из виду?Вполне возможно, что такое поведение ожидается, но было бы неплохо прояснить ситуацию.

Моя платформа - Ubuntu 11.10.

class DrawChunkThread : public QThread
{
    public:
        DrawChunkThread(World *world, int x, int z);
        void run();
        World *world;
        int x;
        int z;
        static QSemaphore *sem;
    private:
};


QSemaphore *DrawChunkThread::sem = new QSemaphore(1);

DrawChunkThread::DrawChunkThread(World *world, int x, int z) {
    this->world = world;
    this->x = x;
    this->z = z;
}

void DrawChunkThread::run()
{
    world->drawChunk(x, z);
    if (world->isInside) {
        world->drawInsideChunk(x, z);
    }
}

1 Ответ

2 голосов
/ 29 марта 2012

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

В общем случае ваше параллельное приложение, содержащее последовательную часть, не может масштабироваться больше, чем параллельная часть, деленная на количество ядер, согласно закону Амдала .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...