Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Нужен выигрыш от двух праоцессоров (17 стр)

Нужен выигрыш от двух праоцессоров (17 стр)

Страницы: 113 14 15 16 17 18 Следующая »
ExelentsПостоялецwww24 авг. 200820:56#240
Мде, чего-то в последнее время некрофилы активизировались.
ALTAIRПостоялецwww22 сен. 201116:07#241
пишу в эпичном треде :)
JohnSmithПостоялецwww22 сен. 201116:23#242
Этим тредом вдохновлялись создатели Cuda, OpenCL, DirectCompute.
asvpПостоялецwww22 сен. 201116:24#243
Асмурфенный прикол. Я такою штуку пока видел только на двухядерном BlackFine от Analog Device.
JohnSmithПостоялецwww22 сен. 201116:40#244
Тем не менее в Advanced Vector Extensions (AVX) как раз такой код и приветствуется:
_mm_main_pp(int argc0, int argc1, int argc2, int argc3);

_mm_printf_pp("Hell", "o, W", "orl", "d!"); // Boost 4x Perf

_mm_return_pp(0, 0, 0, 1);

Выводит Hello World! в 4 раза быстрее обычной си программы.

stopkinПостоялецwww5 мар. 201314:42#245
ronniko
>Вобщем решил изучить параллельное использование ядер.
>Первое не понимаю как (если я к примеру включил ядро 2) туда поместить мой код?
>Правильно ли я понимаю SetThreadIdealProcessor установил ядро 1 потом идет мой код A, затем я делаю опять SetThreadIdealProcessor и указываю номер ядра 2 и идет код B. Получаеться код А работает на ядре 1, а код В на ядре 2?
dobordxНовичокwww29 мар. 20138:20#246
На С++11 можно и так вот
#include <chrono>

#pragma region Внутренние подробности

#include <memory>
#include <iostream>
#include <vector>
#include <thread>

//!    Интерфейс задания
struct iTask{
  virtual void Execute()=0;
  virtual ~iTask(){}
};

//!    Обёртка над лямбда-заданием
template< typename T>
struct Wrap: iTask
{
  T t;
  Wrap(T t):t(t){}
  virtual void Execute(){t();}
};

//! Сильный указатель на задание
typedef std::shared_ptr<iTask> task_t;

//! Слабый указатель на задание
typedef std::weak_ptr<iTask> wtask_t;

//!    Определение задания через лямбду
template< typename T>
task_t make_task(T t){ return task_t(new Wrap<T>(t));}

struct CTL
{
  std::vector< task_t > columns;
  std::vector< std::thread > threads;

  CTL(){ Reset(); }

  void Reset();

  void Start(){
    for( auto &t : columns )
      threads.push_back( std::thread([t]{ if(t) t->Execute(); }));
  }

  void Wait(){
    for( auto &t: threads )
      t.join();
    threads.clear();
  }

} ctl;

#pragma endregion Внутренние подробности


using namespace std;
using namespace std::chrono;

int _tmain(int argc, _TCHAR* argv[])
{

#define DF( F )\
  F(                                                            ,                                                            ,                                                            )\
  F(       for( int i=0; i<5; ++i){                             ,                                                            ,                                                            )\
  F(           cout<<"#1 "<<i<<endl;                            ,                                                            ,                                                            )\
  F(           this_thread::sleep_for( seconds(1) );            ,   this_thread::sleep_for( milliseconds(200) );             ,                                                            )\
  F(       }                                                    ,   for( int i=0; i<2; ++i){                                 ,    this_thread::sleep_for( milliseconds(600) );            )\
  F(                                                            ,       cout<<"#2 "<<i<<endl;                                ,    for( int i=0; i<3; ++i){                                )\
  F(                                                            ,       this_thread::sleep_for( seconds(2) );                ,        cout<<"#3 "<<i<<endl;                               )\
  F(                                                            ,   }                                                        ,        this_thread::sleep_for( seconds(3) );               )\
  F(                                                            ,                                                            ,    }                                                       )\
  F(                                                            ,                                                            ,                                                            )\
  F(                                                            ,                                                            ,                                                            )\
  F(                                                            ,                                                            ,                                                            )\
  F(                                                            ,                                                            ,                                                            )\
  F(                                                            ,                                                            ,                                                            )

  ctl.Start();
  ctl.Wait();

  cout<<"exit"<<endl;
  cin.get();
  return 0;
}

#pragma region Подробности2

#define F0( C0, C1, C2 ) C0
#define F1( C0, C1, C2 ) C1
#define F2( C0, C1, C2 ) C2

void CTL::Reset()
{
  columns.clear();
  columns.resize(3);

  columns[0] = make_task([]{ DF(F0) });
  columns[1] = make_task([]{ DF(F1) });
  columns[2] = make_task([]{ DF(F2) });
}

#undef F2
#undef F1
#undef F0

#pragma endregion Подробности2

#undef DF

Счастливой отладки =)

caxapexacПостоялецwww9 янв. 201813:46#247
2018 помнит данный тред!
Легенда жива!
gamedevforПостоялецwww10 янв. 20180:15#248
Сейчас модно корутины.
kiparПостоялецwww10 янв. 20181:24#249
gamedevfor
они не дают выигрыша от двух праоцессоров.
gamedevforПостоялецwww10 янв. 20181:39#250
kipar
зато удобно. )))
MisanthropeПостоялецwww10 янв. 20182:11#251
у меня 16 ядерный процессор.
вот так вот :)
gamedevforПостоялецwww10 янв. 20182:36#252
Misanthrope
ядра не считаются, только процессоры.
Жора МонтировкаПостоялецwww10 янв. 20188:01#253
А есть ли сейчас десктопы с несколькими процессорами?
kiparПостоялецwww10 янв. 20188:39#254
gamedevfor
Но все равно они выигрыша не дают. То ли дело горутины или акторы из эрланга.
Страницы: 113 14 15 16 17 18 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр