Войти
ПрограммированиеФорумГрафика

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

Страницы: 113 14 15 16 17 18 Следующая »
#240
20:56, 24 авг. 2008

Мде, чего-то в последнее время некрофилы активизировались.


Прошло более 3 лет
#241
16:07, 22 сен. 2011

пишу в эпичном треде :)

#242
16:23, 22 сен. 2011

Этим тредом вдохновлялись создатели Cuda, OpenCL, DirectCompute.

#243
16:24, 22 сен. 2011

Асмурфенный прикол. Я такою штуку пока видел только на двухядерном BlackFine от Analog Device.

#244
16:40, 22 сен. 2011

Тем не менее в 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 раза быстрее обычной си программы.

Прошло более 1 года
#245
14:42, 5 мар. 2013

ronniko
>Вобщем решил изучить параллельное использование ядер.
>Первое не понимаю как (если я к примеру включил ядро 2) туда поместить мой код?
>Правильно ли я понимаю SetThreadIdealProcessor установил ядро 1 потом идет мой код A, затем я делаю опять SetThreadIdealProcessor и указываю номер ядра 2 и идет код B. Получаеться код А работает на ядре 1, а код В на ядре 2?

#246
8:20, 29 мар. 2013

На С++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

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

Прошло более 4 лет
#247
13:46, 9 янв. 2018

2018 помнит данный тред!
Легенда жива!

#248
0:15, 10 янв. 2018

Сейчас модно корутины.

#249
1:24, 10 янв. 2018

gamedevfor
они не дают выигрыша от двух праоцессоров.

#250
1:39, 10 янв. 2018

kipar
зато удобно. )))

#251
2:11, 10 янв. 2018

у меня 16 ядерный процессор.
вот так вот :)

#252
2:36, 10 янв. 2018

Misanthrope
ядра не считаются, только процессоры.

#253
8:01, 10 янв. 2018

А есть ли сейчас десктопы с несколькими процессорами?

#254
8:39, 10 янв. 2018

gamedevfor
Но все равно они выигрыша не дают. То ли дело горутины или акторы из эрланга.

Страницы: 113 14 15 16 17 18 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.