Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Java на мултипроцессорных компютерах, Чисто философский вопрос 
:(
    Опции темы
_Y_
Дата 13.2.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Чисто философский вопрос пришел ко мне спросонья. А используется ли Java на мултипроцессорных компютерах и кластерах предназначенных для тяжелых рассчетных задач? Thread вроде самим Создателем предназначена для этого.

ЗЫ: Это чисто теоретическию интерес.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Hidrag
Дата 13.2.2008, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: 3
Всего: 25



Похоже нифига не юзает, пишу софт использующий многопоточность, запускаю на двух ядерном проце, в итоге нагружается только одно ядро :(

Вычислить средствами джавы сколько процессоров в системе не проблема (и двухядерный проц определяется как два проца),  а вот как распределить задачи между процессорами, то есть разные потоки на разные процессоры (ядра) пустить?


--------------------
user posted image
PM WWW ICQ   Вверх
mikla
Дата 13.2.2008, 11:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 3.12.2006
Где: Витебск

Репутация: нет
Всего: нет



А  это разве не задача операционной системы : распределять потоки ? 
--------------------
PM MAIL ICQ Skype   Вверх
_Y_
Дата 13.2.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Цитата(mikla @ 13.2.2008,  11:55)
А  это разве не задача операционной системы : распределять потоки ?

Наверое да, если на PC. Но существуют специальные компьютеры для параллельных вычислений с тысячами процессоров. Я познакомился в общих чертах с одним таким. Но на том, с которым я знакомился только C++ и Fortran. Работу между процессорами распределяешь сам програмно. Кроме того существуют кластеры и программы для распределенных вычислений.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
LSD
Дата 13.2.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Hidrag @  13.2.2008,  11:41 Найти цитируемый пост)
Похоже нифига не юзает, пишу софт использующий многопоточность, запускаю на двух ядерном проце, в итоге нагружается только одно ядро :(

Значит или у тебя один процесс только грузит ЦП или ты что-то не так делаешь. Запусти:
Код

import static java.lang.Math.pow;
import java.util.Random;
import java.util.concurrent.atomic.AtomicBoolean;

public class TaylorSeries implements Runnable
{
  public static final int CPU_NUMBER = 1;

  private static AtomicBoolean running = new AtomicBoolean(true);
  private Random rnd = new Random();

  public void run()
  {
    double result = 1.0;
    while(running.get())
    {
      double newResult = calc(rnd.nextInt(50));
      result = newResult / result;
    }
  }

  private double calc(double x)
  {
    double sum = 0;
    double a, b, c;
    for(int n = 0; n < 100; n++)
    {
      a = pow(-1, n);
      b = n + 1;
      c = pow(3 * x, b);
      sum += a / b * c;
    }
    return sum;
  }

  public static void main(String[] args)
  {
    int threadCount = CPU_NUMBER;
    String s = System.getenv("NUMBER_OF_PROCESSORS");
    if(s != null)
    {
      try
      {
        threadCount = Integer.parseInt(s);
      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
    }
    System.out.println("threadCount = " + threadCount);

    Thread[] calcThreads = new Thread[threadCount];
    for(int i = 0; i < threadCount; i++)
    {
      calcThreads[i] = new Thread(new TaylorSeries(), "calc-thread-" + i);
      calcThreads[i].setPriority(Thread.MAX_PRIORITY);
    }

    for(Thread calcThread : calcThreads)
      calcThread.start();

    try
    {
      Thread.sleep(30 * 1000);
    }
    catch(InterruptedException e)
    {
      e.printStackTrace();
    }

    running.set(false);
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sardar
Дата 13.2.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Из-за AtomicBoolean тред чуть ли не в каждой итерации блокироваться будет (жёсткая синхронизация). Шедулер может и не разбросать треды по процессорам что мелкими рывками работают. Замени на обычную boolean (забей на ошибку де-синхронизации в пару миллисекунд), запусти threadCount*10 тредов.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
LSD
Дата 13.2.2008, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Sardar, ну ты бы почитал доку по java.util.concurrent.atomic
Цитата
A small toolkit of classes that support lock-free thread-safe programming on single variables.

или хотя бы запустил этот пример.

За Linux я конечно не скажу, но под Windows он на 30 секунд практически полностью блокирует GUI.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sardar
Дата 13.2.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Упс, туплюsmile
Глянул в код, это volatile переменная, дополненная атомарными операциями compareAndSet, lazySet etc. Ты их не используешь, т.е. по сути используешь обычную volatile, в принципе дело вкуса.

Цитата(LSD @  13.2.2008,  12:51 Найти цитируемый пост)
но под Windows он на 30 практически полностью блокирует GUI

У меня всего с 2 тредами полностью блокирует всё, даже менеджер задач в foreground, загрузка обеих ядер 100%.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0753 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.