Перейти к публикации

Как написать UDF для параллельного счета?


Игорь (Москва)

Рекомендованные сообщения

Добрый день!

Озадачился следующим вопросом. Как сделать, чтобы UDF считала одновременно несколько областей?

В этой программе сделан двойной цикл по всем ячейкам - для каждой ячейки считается объемный интеграл по всем остальным ячейкам.

Таким образом количество операций =N^2 от числа ячеек.

Если область разделить например на четыре подобласти- то каждую подобласть можно считать отдельно своим ядром процессора.

Вопрос - если я разделю область внутренними линиями на подобласти - что и как написать в UDF чтобы подобласти считались одновременно?

Или как-то вообще по другому надо делать?

Программка сейчас считает... но... получается что на одном ядре. Если запускаю четыре потока - то какой-то бред с выводом. Как будто UDF отрабатывает четыре раза.

В общем вот. Нужна помощь всезнающего All.

DEFINE_ON_DEMAND(Bsl)

{

Domain *d;

Thread *t,*t1;

cell_t c,c1;

face_t f;

double r,z,r1,z1;

d = Get_Domain(1);

printf("Start calculation...\n");

thread_loop_c (t,d)

{

double x[ND_ND];

if (NULL != THREAD_STORAGE(t,SV_UDS_I(0)))

{

begin_c_loop (c,t) //Внешний цикл - его хорошо бы распараллелить.

{

C_CENTROID(x,c,t);

r=x[1];

z=x[0];

begin_c_loop (c1,t) //Внутренний цикл

{

C_CENTROID(x,c1,t);

r1=x[1];

z1=x[0];

...

...

//Что-то считается

}

end_c_loop (c1,t);

}

}

end_c_loop (c,t)

}

}

С уважением,

Игорь

Ссылка на сообщение
Поделиться на других сайтах


Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • hlibhlib
      Нашел в инете запись про мастеркам 2016 = Оказывается, это Мастеркам 8 
    • Andrey.V
      2016 версия  Выше ответил. Оригинал файла не могу выслать, поищу что-то похожее и обязательно вышлю 
    • hlibhlib
      Может Эксклюзив????????????   Но такой версии точно не было. ))
    • GalielO
      Такой версии нет. Есть Х9 и 2017. У вас точно Mastercam?
    • Andrey_kzn
      @gudstartup , а вы впитываете информацию как губка Код у сименса хранится в контроллере в пригодном для редактирования виде. И по идее, должен выгружаться. Естественно без комментариев. Просто в нашем случае - это станок с 840DSL и контроллер  319, выгрузить проект в портал я  не могу. И в Step7 тоже не могу, пишет что-то про несовместимость версий.  Как будет в случае с настоящим Sinumerik ONE, не знаю.  Там контроллер 1500. Тут ещё надо не забывать о аппаратно-программной совместимости портала и железа, порталов уже куча разных версий вышла.  Поэтому, если перед вами станок с Sinumerik ONE, совсем не факт, что железо будет совместимо с вашей версией портала.  Станок с проектом в тиа портале у нас один,  и попробовать больше негде.  
    • hlibhlib
      Попробуй    Строй поверхности и по ним траекторию. Нет файла = нет конкретики.
    • Andrey.V
    • hlibhlib
      В смысле не нашел?!!! У тебя какая версия? На видео 21-ая.
    • Andrey.V
      Вот посмотрите, но я у себя не нашел эту функцию 
    • hlibhlib
      Построить Каркасную геометрию нужно и использовать ее, как ограничение или направление. Если файл не супер секретный, то выкладывай.  Если секретный, то построй приблизительную модель и выложи. Такие переходы в одно единое не соединишь. Можно попробовать создать поверхности из тела. И строить траекторию по поверхностям.
×
×
  • Создать...