OSDev

для всех
Текущее время: 17 дек 2017, 18:40

Часовой пояс: UTC + 3 часа




Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
СообщениеДобавлено: 30 дек 2014, 20:18 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
эмбрион писал(а):
Zealint писал(а):
эмбрион писал(а):
решают крайне редко.

Доказательства тоже сюда, пожалуйста.

Ну вы поспрошайте, хотя бы на этом форуме, кто из участников каждый день решает задачи по расстановке ферзей. А когда получите ответы - отпадёт желание требовать с меня всем (кроме вас) очевидных доказательств.

Это не доказательство. Причём здесь расстановка ферзей? Вам нужно доказать, что задачи, которые я называю простыми, решают крайне редко. Среди названных нет упражнения для школьников, которое называется "расстановка ферзей". Жду обоснования.

эмбрион писал(а):
И да, она решает.

Правда, это пока никто не смог доказать.

эмбрион писал(а):
Без всякой зауми про перестановки ферзей ваша задача решена простейшим алгоритмом и укладывается в ваши 100 секунд на вашем железе.

Причём здесь расстановка ферзей? Сдайте задачу в системе, а не утверждайте голословно, что она уложится. Или давайте сюда код, я сам её отправлю и мы все вместе посмотрим : ) Но сразу говорю, что ваше заявление - одна из разновидностей брехни. Вы нифига не может сдать, а чтобы скрыть тот факт, что бы публично обделались, начинатете выдумывать про меня всякие вещи, чтобы увести беседу в сторону. Думаете, этого не видно?

эмбрион писал(а):
Да тривиал у вас, а не задачи, если честно сказать.

Нет, не тривиал. Вы вот пока не одной не решили : ) Это простые задачи, они сложнее, чем "тривиал".

эмбрион писал(а):
Берёте готовые, давно придуманные не вами алгоритмы, а потом тупо и нудно подбираете варианты оптимального использования кэшей и набора инструкций, каждый раз сверяясь с мануалом по оптимизации, скачанным с сайта Интела.

Докажите, что я делаю именно так : )

эмбрион писал(а):
После года нудных мучений

Приведите обоснование.

эмбрион писал(а):
выкладываете результат и заявляете - я крут как никто другой

Покажите хоть одно место, где я так сказал.

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

Приведите конкретную цитату, где я так говорю. В некоторых моих конкурсах участники чаще показывали более сильные результаты, чем я, за что я им очень благодарен. А вы нифига не показали, только треплитесь.

эмбрион писал(а):
И да, смею вас уверить, подавляющее большинство других людей не станет тратить год жизни на каких-то там ферзей и их перестановки.

Меня не интересует мнение большинства. Ссылка на большинство как на авторитет или единственный показатель правильности - это признак слабоумия ссылающегося. Если присовокупить сюда редкую форму дебилизма, выраженную в попытке меня всячески унизить, чтобы хоть как-то поднять опущенное ниже плинтуса чувство собственного достоинства, то получается, что вы можете только трепаться. Я сказал, что ваша жава - фуфло для HPC, я буду говорить это и дальше, а вот Вы, не смотря на свои потуги, не смогли решить даже простую задачу... хотя да, я забыл, перемножение матриц большинство программистов не интересует. Это вообще ненужная никому вещь : ) Точно-точно : )

эмбрион писал(а):
Но понимание бессмысленности таких мегазатрат времени другими людьми вы выдаёте за свою крутость, мол меня ни кто не может достать на вершине замка.

Покажите, где я так говорил : )

эмбрион писал(а):
Да вы просто ни кому не интересны, что бы вас доставать, вот ведь суть ситуации.

Вообще пофиг, абсолютно. Мне присылают на рецензии статьи из престижных научных журналов (последняя была из Journal of Applied Mathematics), а так да, я совершенно никому не интересен. Хотя, если вы сможете доказать, что я никому неинтересен, то я поверю. Но пока вы не смогли доказать даже, что на жаве можно решить хотя бы одну простую задачу. Я просил 3, но вы и одной не смогли. Хотя так яростно бросились доказывать свою мало интересующую кого-то позицию.

эмбрион писал(а):
И да, надеюсь "правда в глаза" подтолкнёт вас к поиску выхода из вашего мрачного мира иллюзий.

Правду я знаю. Вы - трепло и пытаетесь меня задеть, чтобы хоть как-то вылезти из того дерьма, куда сами себя загнали. Сами ничего толком не умеете, поэтому единственный вариант оправдания - наезды на других.

Продолжение разговора с моей стороны будет после того, как вами будут предъявлены убедительные доказательства, которые я в полном праве от вас требовать, так как в данный момент вы написали кучу клеветы на меня и обязаны за неё ответить. Если убедительных доказательств не будет, то все увидят, что вы - обычный пи...бол и трепло : ) итак, следующим постом вы либо доказываете то, что я тот, о ком вы говорите, либо то, что вы - пи...бол и трепло. Итак, посмотрим : )


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 дек 2014, 21:21 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Цитата:
Ну вот, а вы говорили, что С компилятор мегакрут и уделает мой ручной код на ассемблере "как два пальца ...".

Я ни разу этого не говорил. Не надо выдумывать. Я сказал, что чистый ассемблер уделает java-inline в случае постоянного обращения к JNI. Всё. Вопрос про JNI с массивами снят, со структурами остался. В целом, учитывая нормальную работу с массивами, и если со структурами не работать - то разумеется, Java-inline будет работать на равне с обычным ассемблером, т.к. это и есть обычный ассемблер, только до жути неудобный и нечитаемый.
Цитата:
И тем не менее - умный компилятор должен знать много хитрых штучек по экономии байтов и циклов процессора.

Никакой компилятор не может придумать переделать весь алгоритм. Он может только оптимизировать существующий. Если ваш компилятор сам сочиняет алгоритмы - получайте нобеля и живите на дивиденды от его использования, потому что это и есть ИИ.
Цитата:
На 8 Мгц, может и не стоит возиться с Java, но там ведь и задачи-то примитивные, типа выдать сигнал на такой-то ноге с такого-то по такой-то такт.

Когда как. Матрицы мне конечно перемножать не приходилось, но иногда требуются и сортировки, и вычисления геометрии.
Цитата:
Хотя опять же, если вы пишете на Java, понимая, что не стоит заниматься выделением памяти в критически важных местах программы, то сразу все проблемы со сборщиком мусора исчезают магическим образом - он просто не запускается, когда ему нет работы.

А если мне нужна работа с памятью в критически важных местах? Нельзя сказать сборщику, что "вот отсюда до сюда выключи сборщик". Он мог навыделять кучу памяти ранее, и тогда он не освободит всю память к началу критически важного кода и начнет вклиниваться в критические места, даже если вызовов NEW там не так много. Короче говоря, он непредсказуем. А когда запустится - так это всё, прощай скорость.
Цитата:
Я что-то не соображу, какую это формулу можно заменить сотней if-ов ?

Код:
result = a / 100;

некоторые "программисты" (китайцы) запишут как
Код:
if (a >= 0 && a < 100) result = 0;
else if (a >= 100 && a < 200) result = 1;
...

и это не шутка. Хотя чаще у таких убогих программистов встречается свичкейс.
Цитата:
Ну давайте ещё тестов напишем и сравним, а ? И за одно вспомним, что там с обещаным тестом на умножение матриц на С ?

... Повторю то, что уже сказал. Я говорю, что вычисления на java будут работать медленней. Пройти тест на медлительность? Написать самый медленный код на java? Без проблем.
А тест на Си+Асм уже написан и не раз разными людьми. Гуглится без проблем. Исходники участников того же самого сайта Zealint'а.
Цитата:
Я уже в другой ветке рассказывал - байткод на 100% преобразуем в исходный код на Java. Комментарии и форматирование, конечно, потеряются, но всё остальное останется.

А я в той же ветке рассказал, что ЯНУ никогда не преобразуется на 100% в ЯВУ, и привел примеры и обоснование. Помните про сложные условия, циклы? Я каждый день вижу с десяток файлов, которые частично не подлежат автоматическому восстановлению, и это без всякой обфускации. Все потому, что в ЯНУ (байт-коде), да и вообще в машине Тьюринга, коей является ассемблер нет таких понятий, как "цикл" или "условие". Есть только переход по ленте команд в произвольную точку. И отличить цикл от условия очень трудно, а найти точное условие цикла, например, бывает невозможно при использовании хоть одного break/continue. При наличии же сложных условий получаем множество паттернов для превращения байт-кода в код на ЯВУ, которые сильно конфликтуют друг с другом, и на выходе получаем какую-то бессвязную мешанину IF-ов и while-ов, которые никоим образом не связаны с оригинальным кодом.
Я потратил кучу времени на бодание с декомпиляцией, и понял, что все паттерны все равно не распознать. Если не верите - напишите декомпилятор, который будет всегда распознавать все логические конструкции. Мне как раз такой нужен. Ни один из существующих не справляется. Или хотя бы составьте все паттерны распознавания логических конструкций.
Цитата:
Поэтому компилируйтесь в байткод и будет вам счасть
см выше
Цитата:
Это скорее от вас требуют реализации на конкретном языке, чем вы осознанно что-то под задачу ищете. Например - расскажите про магию выбора между C, C++, Delphi, C# и Java для одной и той же задачи ?

Нет, ну поясните, как так можно читать?
Я пишу: "Я выбираю язык под задачу". Вопрос: "Объясните магию выбора РАЗНЫХ языков для ОДНОЙ задачи".
Объясняю "магию" выбора ОДНОГО языка для ОДНОЙ задачи, потому что я делаю именно так:
Если проект требует работы с железом (микроконтроллеры и операционная система, которую я тут пилю), критичен к скорости или является грязным хаком какой-нибудь проги, где разработчики не удосужились сделать нужную мне фичу - Ассемблер.
Если проект очень сложной логической структуры и требует постоянного переписывания кусков кода - Си или C++. Чистый си в случае нежелательности ООПшить (например, если делаю ДЛЛ или пишу под систему, где предполагается только структурный код, аля моя ОС или дрова под линукс).
Если проект критичен к скорости, но на ассемблере его реализовать очень тяжело - С++.
Если проекту нужно красивое GUI - Delphi. Для меня нет гуи-строителя удобней, но тут кому что нравится.
Если проект нужно написать быстро, имеются шаблоны готового кода, проект связан с и без того тормозными вещами (БД) или если проект делается "на один раз" - C#.
->Если шаблоны кода на Java - то Java.
Разумеется, иногда задача разбивается на две, и я делаю часть на одном языке, часть на другом, и соединяю. Если проект попадает в несколько из этих категорий, и разделить на части его нельзя - выделяю самую приоритетную и по ней выбираю язык.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 дек 2014, 21:41 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
Bargest писал(а):
Исходники участников того же самого сайта Zealint'а.

Там, к сожалению, не совсем то, что нужно для FastComputing. В том конкурсе 4-хлетней давности было ограничение на 600 по модулю для входных данных, и благодаря этому можно было использовать одну хитрую инструкцию. В задаче 0000 у нас ограничения другие и реализация тоже. Но быстрый метод перемножения матриц, использующий SSE, можно реализовать меньше чем за пару дней, если не знать ни SSE, ни блочного алгоритма. Собственно, всё и правда легко найти в сети. В набор профессиональных навыков программиста входит умение искать информацию о хорошо известных методах, алгоритмах и подходах к решению классических задач, даже если он плохо понимает принципы, лежащие в их математической части. Но наш оппонент этого не знает, ему удобнее оскорблять других, чтобы возвыситься самому.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 дек 2014, 21:42 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
Давайте разбавим тему напоследок, так как она, видимо, скоро будет закрыта. Я, к сожалению, не верю, что эмбрион сможет продемонстрировать здесь элементы здравомыслия.

Изображение

Собственно, каждому инструменту своё место.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 31 дек 2014, 14:22 

Зарегистрирован: 15 апр 2014, 14:13
Сообщения: 127
Zealint писал(а):
эмбрион писал(а):
выкладываете результат и заявляете - я крут как никто другой

Покажите хоть одно место, где я так сказал.

Количество мест вы посчитайте сами, но в каждом из них звучит такая мысль - эти задачи я называю простыми, а про те, которые я называю сложными, даже не заикаюсь, ибо знаю с кем имею дело.
Zealint писал(а):
Продолжение разговора с моей стороны будет после того, как вами будут предъявлены убедительные доказательства

Да пожалуйста. Вот собственно тест:
Код:
public class QuickMatrix
{
   public static void main(String args[])
   {
      int n=5000;
      int m1=25,m2=25;
      test(n, 946394746, 390182287, 592523744, m1, 23640146, 479316017, 991314862, m2);
   }
   
   public static void test(int n, int a1, int p1, int r1, int m1, int a2, int p2, int r2, int m2)
   {
      int as[][]=new int[n][n+3];
      int bs[][]=new int[n][n+3];
      int aAligns[]=new int[n];
      int bAligns[]=new int[n];
      int aAddresses[]=new int[n];
      int bAddresses[]=new int[n];
      long sums[][]=new long[n][n];
      long xors[]=new long[n];

      for (int i=0;i<n;i++)
      {
         long l=AlignHelper.pinAndGetAlignedOffset(16,as[i],false);
         aAligns[i]=(int)((l&0xffffffffl)>>2);
         aAddresses[i]=(int)(l>>>32);
         l=AlignHelper.pinAndGetAlignedOffset(16,bs[i],true);
         bAligns[i]=(int)((l&0xffffffffl)>>2);
         bAddresses[i]=(int)(l>>>32);
      }
      m1=0xffffffff>>>(32-m1);
      m2=0xffffffff>>>(32-m2);

      int prev1=a1,prev2=a2;
      as[0][aAligns[0]]=prev1;
      bs[0][bAligns[0]]=prev2;
      for (int y=0;y<n;y++)
      {
         int x0=0;
         if (y==0) x0=1;
         for (int x=x0;x<n;x++)
         {
            as[x][y+aAligns[x]]=prev1=(prev1*p1+r1)&m1;
            bs[y][x+bAligns[y]]=prev2=(prev2*p2+r2)&m2;
         }
      }
      
      calculateUnsafeBlocks500(n, aAddresses, bAddresses, aAligns, bAligns, sums);

      for (int i=0;i<n;i++)
      {
         ArrayReleaser.release(as[i]);
         ArrayReleaser.release(bs[i]);
      }
      
      for (int y=0;y<n;y++)
      {
         long xor=0;
         for (int x=0;x<n;x++)
            xor=xor^sums[y][x];
         xors[y]=xor;
      }

      long xor=0;
      for (int i=0;i<n;i++)
         xor=xor^xors[i];

      System.out.println(xor);
   }

   private static void calculateUnsafeBlocks500(int n, int aAddresses[], int bAddresses[],
                                                                        int aAligns[], int bAligns[], long[][] sums)
   {
      long t=System.currentTimeMillis();
   
      int bmax=500;
      if (n/bmax!=1.0*n/bmax) throw new IllegalArgumentException("Array size must be divisible by "+bmax);
      for (int by=0;by<n/bmax;by++)
         for (int bx=0,xmin=0;bx<n/bmax;bx++,xmin+=bmax)
            for (int ii=0,imin=0;ii<n/bmax;ii++,imin+=bmax)
               for (int y=by*bmax,ym=y+bmax;y<ym;y++)
               {
                  int aOffset=aAligns[y];
                  for (int x=xmin,xm=x+bmax;x<xm;x++)
                  {
                     sums[y][x]=sums[y][x]+ArrayMultiplicationSSE2Unsafe.multiplyAlignedArrays(
                                                         aAddresses[y],bAddresses[x],imin+aOffset,imin+bAligns[x],bmax);
                  }
               }

      System.out.println("calculation="+(System.currentTimeMillis()-t));
   }
}

Далее идёт набор приложений:
Код:
import java.io.OutputStream;

import org.jembryos.inline.CallParameter.IP;
import org.jembryos.inline.InlineAssemblyHelper;

public class ArrayMultiplicationSSE2Unsafe extends ArrayMultiplication
{
   static // ensure we have required native library
   { InlineAssemblyHelper.initializeNativeCode_deleteExistingLibraryAndNoExceptions(new ArrayMultiplicationSSE2Unsafe(null)); }

   public ArrayMultiplicationSSE2Unsafe(OutputStream debugStream)
   { super(debugStream); }

   public static native long multiplyAlignedArrays(int aAddress, int bAddress, int aOffset, int bOffset, int lengthDivisibleBy4);

   @Override
   public void writeNativeCode()
   {
      String returnSum="returnSum", loop="loop";
      
      parameterIn(r.EAX,IP.In0); // address 1
      parameterIn(r.EDX,IP.In2); // offset 1
      shl.x32(r.EDX,(byte)2); // offset*4
      add.x32(r.EAX,r.EDX); // start address in EAX
      parameterIn(r.EBX,IP.In1); // address 2
      parameterIn(r.EDX,IP.In3); // offset 2
      shl.x32(r.EDX,(byte)2); // offset*4
      add.x32(r.EBX,r.EDX); // start address in EBX
      parameterIn(r.ECX,IP.In4); // length in ECX
      // loop
      pxor.x128(r.XMM3,r.XMM3); // sum=0
   label(loop);
      jcc.jecxzShort(returnSum);
         movdqa.x128(r.XMM0,i(r.EAX));
         movdqa.x128(r.XMM1,i(r.EBX));
         movdqa.x128(r.XMM2,r.XMM0);
         pmuludq.x128(r.XMM0,r.XMM1);
         paddq.x128(r.XMM3,r.XMM0);
         psrldq.x128(r.XMM1,(byte)4);
         psrldq.x128(r.XMM2,(byte)4);
         pmuludq.x128(r.XMM2,r.XMM1);
         paddq.x128(r.XMM3,r.XMM2);
         add.x32(r.EAX,(byte)16);
         add.x32(r.EBX,(byte)16);
         sub.x32(r.ECX,(byte)4);
      jmp.near(loop);
   label(returnSum);
      movdq.x32(r.EAX,r.XMM3);
      psrldq.x128(r.XMM3,(byte)4);
      movdq.x32(r.EDX,r.XMM3);
      psrldq.x128(r.XMM3,(byte)4);
      movdq.x32(r.ECX,r.XMM3);
      psrldq.x128(r.XMM3,(byte)4);
      movdq.x32(r.EBX,r.XMM3);
      add.x32(r.EAX,r.ECX);
      adc.x32(r.EDX,r.EBX);
   }
}

Код:
import java.io.OutputStream;

import org.jembryos.inline.Architecture.Architectures;
import org.jembryos.inline.CallParameter.IP;
import org.jembryos.inline.InlineAssemblyHelper;
import org.jembryos.inline.JniFunctions;
import org.jembryos.inline.X86InlineAssembly;

public class AlignHelper extends X86InlineAssembly
{
   public static final int exitCode_arrayIsNull = -1;

   static // ensure we have required native library
   { InlineAssemblyHelper.initializeNativeCode_deleteExistingLibraryAndNoExceptions(new AlignHelper(null)); }

   public AlignHelper(OutputStream debugStream)
   { super(Architectures.X86.architecture, false, debugStream); }

   public static native long pinAndGetAlignedOffset(int align, int arr[], boolean release);
   
   @Override
   public void writeNativeCode()
   {
      String end="end", notNull="notNull";
      
      callFunction(r.EAX,JniFunctions.GetPrimitiveArrayCritical,p(IP.JNIEnv),p(IP.In1),v(0));
      or.x32(r.EAX,r.EAX); // EAX holds return value - the array pointer
      jcc.jnz(notNull); // if array is not NULL
         returnWithExitCode(exitCode_arrayIsNull,end);
      label(notNull);
      mov.x32(r.EDX,r.EAX); // address to return
      parameterIn(r.ECX,IP.In0); // align
      sub.x32(r.ECX,(byte)1); // align mask
      and.x32(r.EAX,r.ECX); // array's misalign
      add.x32(r.ECX,(byte)1); // align in ECX
      sub.x32(r.ECX,r.EAX);
      mov.x32(r.EAX,r.ECX); // aligned offset as a return value in EAX
      parameterIn(r.ECX,IP.In2);
      jcc.jecxzShort(end);
         push.x32(r.EAX);
         push.x32(r.EDX);
         callFunction(r.ECX,JniFunctions.ReleasePrimitiveArrayCritical,p(IP.JNIEnv),p(IP.In0),r(r.EDX),v(0));
         pop.x32(r.EDX);
         pop.x32(r.EAX);
      label(end);
   }
}

Код:
import java.io.OutputStream;

import org.jembryos.inline.InlineAssemblyHelper;
import org.jembryos.inline.JniFunctions;
import org.jembryos.inline.X86InlineAssembly;
import org.jembryos.inline.Architecture.Architectures;
import org.jembryos.inline.CallParameter.IP;

public class ArrayReleaser extends X86InlineAssembly
{
   public static final int exitCode_arrayIsNull = -1;

   static // ensure we have required native library
   { InlineAssemblyHelper.initializeNativeCode_deleteExistingLibraryAndNoExceptions(new ArrayReleaser(null)); }

   public ArrayReleaser(OutputStream debugStream)
   { super(Architectures.X86.architecture, false, debugStream); }

   public static native int release(int arr[]);
   
   @Override
   public void writeNativeCode()
   {
      String end="end", notNull="notNull";

      parameterIn(r.EAX,IP.In0);
      or.x32(r.EAX,r.EAX);
      jcc.jnz(notNull); // if array is not NULL
         returnWithExitCode(exitCode_arrayIsNull,end);
      label(notNull);
      callFunction(r.EDX,JniFunctions.ReleasePrimitiveArrayCritical,p(IP.JNIEnv),p(IP.In0),r(r.EAX),v(0));
      mov.x32(r.EDX,1); // result=OK
      label(end);
   }
}


Ну и что бы запустить всё это нужна библиотека отсюда. Я эту ссылку уже приводил, суть технологии объяснял.

В резуьтате имеем 100% Java код, который на простейшем алгоритме укладывается в 100 секунд на вашем железе.

Так что жду признаний в неправоте и извинений перед Java.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 31 дек 2014, 14:52 

Зарегистрирован: 15 апр 2014, 14:13
Сообщения: 127
Bargest писал(а):
Никакой компилятор не может придумать переделать весь алгоритм. Он может только оптимизировать существующий.

Да, конечно, но степень оптимизации существующего может быть разной. И собственно в этом направлении всё и развивается. Я не вижу причин, по которым нельзя даже ряд алгоритмов оптимизировать на этапе компиляции. Простейший пример: а = б; а = с; здесь первое присваивание выкидывается, хотя вроде и присутствует в первоначальном алгоритме. А более сложные алгоритмы можно обрабатывать по сути точно также, но просто нужно гораздо больше времени потратить на более умный оптимизатор.
Bargest писал(а):
Если ваш компилятор сам сочиняет алгоритмы - получайте нобеля и живите на дивиденды от его использования, потому что это и есть ИИ.

Даже если бы он у меня был, было бы совсем не просто его суметь выгодно продать :)
Bargest писал(а):
А если мне нужна работа с памятью в критически важных местах? Нельзя сказать сборщику, что "вот отсюда до сюда выключи сборщик".

Можно сказать. Вы просто выделяете нужную память до того, как началась критическая секция. И освобождаете только после секции. А во время работы секции никаких запросов на новые объекты/массивы не делаете. Здесь, правда, могут быть различные алгоритмы запуска сборщика мусора, но уж если кто-то сделает Java для микроконтроллеров, то уж будьте уверены, такую простейшую штуку, как указание сборщику не запускаться пока нет запросов на выделение памяти, сделать сумеют.
Bargest писал(а):
Он мог навыделять кучу памяти ранее, и тогда он не освободит всю память к началу критически важного кода и начнет вклиниваться в критические места

Ну так всё в ваших руках - если вы знаете, что критическая секция запустится тогда-то, что вам помешает заранее, с запасом, выделить для неё некий массив или что вам там потребуется ?
Bargest писал(а):
Цитата:
Я что-то не соображу, какую это формулу можно заменить сотней if-ов ?

Код:
result = a / 100;

Да, иногда народ не парится. Но если кто-то делает некое оптимизированное приложение, то наверняка подумает о таких вещах. А если оптимизация не нужна, то и ничего страшного в том, что народ не парится.
Bargest писал(а):
Я говорю, что вычисления на java будут работать медленней.

Ну вы поймите, что всё определяется компилятором. Если сишный компилятор будет умнее JIT, тогда он победит и "вычисления на java будут работать медленней". Но пока я сильно сомневаюсь, что сишный компилятор умнее. И никто не смог скомпилить для опровержения тривиальный пример, который я недавно выкладывал.
Bargest писал(а):
Помните про сложные условия, циклы? Я каждый день вижу с десяток файлов, которые частично не подлежат автоматическому восстановлению, и это без всякой обфускации. Все потому, что в ЯНУ (байт-коде), да и вообще в машине Тьюринга, коей является ассемблер нет таких понятий, как "цикл" или "условие". Есть только переход по ленте команд в произвольную точку. И отличить цикл от условия очень трудно, а найти точное условие цикла, например, бывает невозможно при использовании хоть одного break/continue. При наличии же сложных условий получаем множество паттернов для превращения байт-кода в код на ЯВУ, которые сильно конфликтуют друг с другом, и на выходе получаем какую-то бессвязную мешанину IF-ов и while-ов, которые никоим образом не связаны с оригинальным кодом.

Да, сложные паттерны декомпиляторы могут не понять. Но суть-то в том, что и компилятор тоже не поймёт этот паттерн по исходнику. Поэтому всё равно получается, что пока компилятор с декомпиятором недостаточно умные, их глупость взаимно компенсируется. То есть ни компилятор не сможет оптимизировать ряд сложных паттернов, ни декомпилятор эти паттрены не сможет восстановить из байткода. Но тем не менее - в байткоде информации об изначальном алгоритме гораздо больше, чем в ассемблерном представлении, поэтому компилировать байткод всё же практически так же выгодно, как и компилировать из исходника. Поэтому я и говорил - не хотите с исходниками поставлять софт, значит можно поставлять в виде байткода и эффект при компиляции будет как и при наличии исходников.
Bargest писал(а):
Нет, ну поясните, как так можно читать?
Я пишу: "Я выбираю язык под задачу". Вопрос: "Объясните магию выбора РАЗНЫХ языков для ОДНОЙ задачи".

Ну не придирайтесь к словам, смысл же очевиден - я пытался понять, как вы выбираете язык.
Bargest писал(а):
Объясняю "магию" выбора ОДНОГО языка для ОДНОЙ задачи, потому что я делаю именно так:
Если проект требует работы с железом (микроконтроллеры и операционная система, которую я тут пилю), критичен к скорости или является грязным хаком какой-нибудь проги, где разработчики не удосужились сделать нужную мне фичу - Ассемблер.
Если проект очень сложной логической структуры и требует постоянного переписывания кусков кода - Си или C++. Чистый си в случае нежелательности ООПшить (например, если делаю ДЛЛ или пишу под систему, где предполагается только структурный код, аля моя ОС или дрова под линукс).
Если проект критичен к скорости, но на ассемблере его реализовать очень тяжело - С++.
Если проекту нужно красивое GUI - Delphi. Для меня нет гуи-строителя удобней, но тут кому что нравится.
Если проект нужно написать быстро, имеются шаблоны готового кода, проект связан с и без того тормозными вещами (БД) или если проект делается "на один раз" - C#.
->Если шаблоны кода на Java - то Java.

Понятно. Получается у вас постоянно меняется поле деятельности. В Java мире не совсем так, там если уж начал enterprise софтом баловаться, то вариантов нет, только на Java и даже ещё и список таких вещей как сервера приложений и БД весьма ограничен. Но с другой стороны - это хорошо тем, что народ осваивает системы глубоко, не разбрасывается на кучу разных языков, серверов, библиотек и т.д.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 31 дек 2014, 15:41 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
эмбрион писал(а):
Количество мест вы посчитайте сами, но в каждом из них звучит такая мысль - эти задачи я называю простыми, а про те, которые я называю сложными, даже не заикаюсь, ибо знаю с кем имею дело.

Это не доказательство, а очередная ложь. Я не даю сложных задач только потому, что не вижу в этом смысла, так как начинать нужно с простых. Что поделать, если у меня есть своя классификация и в ней есть ряд уровней, которые я определил для удобства работы со студентами разных групп? Однако если меня кто-то спросит (не в этой теме), я могу назвать задачи из другой группы. Но зачем? Эта тема предназначена конкретно для того, чтобы кто-либо из любителей анального секса жавы показал, что на ней можно решать HPC (и близкие к этой тематике) задачи. Только простые. То, что нельзя решать средние и сложные - это для меня совершенно очевидно.
эмбрион писал(а):
В резуьтате имеем 100% Java код, который на простейшем алгоритме укладывается в 100 секунд на вашем железе.

Это невозможно проверить, так как вы не смогли сделать код подходящим под условия проверки в системе. Вам нужно доказать, что он уложится на том железе, но вы сделали всё так, чтобы проверить этого было нельзя. Так что утверждение голословно. Более того, посмотрев на алгоритм, я сразу могу сказать, что он не пройдёт. Это совершенно очевидно. Такое говно не пройдет даже на Си.

эмбрион писал(а):
Так что жду признаний в неправоте и извинений перед Java.

Нет, тов. трепло. Вы не обосновали те места, которые я требую, чтобы вы обосновали - всю ту клевету, что вылили на меня. Придётся отвечать за слова.

Задача всё ещё не принята, так что работайте дальше. Я дал задачу, вы согласились решить, значит нужно, чтобы были соблюдены мои требования. Либо вы пишите сейчас, что отказываетесь решать задачу правильно и, тем самым, становитесь треплом в квадрате. По прежнему будет так, что никто ещё ни разу не смог показать мне, что на Java можно решить хоть одну простую задачу.

Итак, тов. трепло, продолжение беседы с моей стороны после выполнения задания в соответствии с условиями и объяснений в клевете. В противном случае я прошу модераторов закрыть эту тему, так как с треплом всё ясно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 31 дек 2014, 17:43 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
Zealint писал(а):
Итак, тов. трепло, продолжение беседы с моей стороны после выполнения задания в соответствии с условиями и объяснений в клевете. В противном случае я прошу модераторов закрыть эту тему, так как с треплом всё ясно.


В качестве альтернативного варианта в честь Нового года я могу предложить более подходящую для этого случая схему, так как я вижу, что мы совершенно по-разному понимаем принципы программирования: я пишу код на C++ для Visual Studio 2013, эмбрион его переписывает на Java "один-в-один", то есть сохраняя последовательность команд (алгоритм), изменяя только язык и специфические элементы. Кто-то из независимых экспертов, который может запустить у себя обе версии программы, тестирует и сообщает результаты. Одного теста здесь мало, нужно минимум 3 (как я и предложил вначале), а лучше 7-10 программ, затрагивающих разные приёмы HPC. Единственная сложность: найти независимого эксперта, которому мы могли бы доверять, и у которого достаточно хороший компьютер с объёмом оперативной памяти гигабайт так на 8. Многие задачи требуют больших объёмов памяти и узким местом как раз является работа с памятью.

Но всё это только после того, как он ответ за свои слова и всю высказанную в мой адрес клевету. Не раньше.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 31 дек 2014, 18:11 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 938
Откуда: Дагоба
Эмбрион,
Строгое предупреждение. Далее будет бан сроком на один месяц.
Вы постоянно переходите на личности, унижаете собеседников, перевираете сказанное ими, игнорируете очевидные факты. Zealint не должен вам ничего доказывать, т.к. это ваше утверждение, что Джава подходит для применения в сфере высокопроизводительных вычислений. Если вы считаете, что "высокопроизводительные вычисления" это то же самое, что "джава в некоторых условиях может сгенерировать достаточно быстрый код", то вы ничего не понимаете в HPC. Другие участники форума не обязаны разъяснять вам концепции HPC. Если вы озвучили тезис, то будьте добры самостоятельно доказывать его. Вам предложены критерии, если не хотите им следовать - это ваши проблемы.

Zealint,
Предупреждение за брань. Я понимаю, что Эмбрион тщательно и долго провоцировал, но тем не менее, воздержитесь от ругани и завуалированной нецензурщины.

Тема закрыта.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3, 4, 5

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB