LINUX.ORG.RU
Ответ на: комментарий от monk

Программируется на том же Си, на котором и все остальные.

Вот вам пример «того же Си, что и все остальные». Как думаете, сколько стоит строчка этого кода?

void Step10_asm( int count1, float xxi, float yyi, float zzi, float fsrrmax2, float mp_rsm2, float *xx1, float *yy1, float *zz1, float *mass1, float *ax, float *ay, float *az )
{
    int i = 0, j, k;
    const int offset = 32; 
    
    vector4double b0, b1, b2, b3, b4, b5, b6;
    vector4double c0, c1, c2, c3, c4, c5, c6;
    vector4double a0 = (vector4double){ 0.5, 0.5, 0.5, 0.5 };
    vector4double a1 = (vector4double){ (double)xxi, (double)xxi, (double)xxi, (double)xxi };
    vector4double a2 = (vector4double){ (double)yyi, (double)yyi, (double)yyi, (double)yyi };
    vector4double a3 = (vector4double){ (double)zzi, (double)zzi, (double)zzi, (double)zzi };
    vector4double a4 = (vector4double){ (double)fsrrmax2, (double)fsrrmax2, (double)fsrrmax2, (double)fsrrmax2 };
    vector4double a5 = (vector4double){ (double)mp_rsm2, (double)mp_rsm2, (double)mp_rsm2, (double)mp_rsm2 };
    vector4double a6 = (vector4double){ 0., 0., 0., 0. };
    vector4double a7 = (vector4double){ 0., 0., 0., 0. };
    vector4double a8 = (vector4double){ 0., 0., 0., 0. };
    vector4double a9 = (vector4double){ 0., 0., 0., 0. };
    vector4double a10 = (vector4double){ 0.269327, 0.269327, 0.269327, 0.269327 };
    vector4double a11 = (vector4double){ -0.0750978, -0.0750978, -0.0750978, -0.0750978 };
    vector4double a12 = (vector4double){ 0.0114808, 0.0114808, 0.0114808, 0.0114808 };
    vector4double a13 = (vector4double){ -0.00109313, -0.00109313, -0.00109313, -0.00109313 };
    vector4double a14 = (vector4double){ 0.0000605491, 0.0000605491, 0.0000605491, 0.0000605491 };
    vector4double a15 = (vector4double){ -0.00000147177, -0.00000147177, -0.00000147177, -0.00000147177 };

    /*
    int32_t depth = 3;
    L1P_SetStreamPolicy( L1P_stream_confirmed );
    L1P_SetStreamDepth(depth);
    */

    for ( i = 0, j = 0; i < count1-7; i = i + 8, j = j + 32 ) 
    { 
    
        __dcbt( (void *)&xx1  [i+offset] );
        __dcbt( (void *)&yy1  [i+offset] );
        __dcbt( (void *)&zz1  [i+offset] );
        __dcbt( (void *)&mass1[i+offset] );
    

        b0 = vec_ld( j   , xx1 );
        c0 = vec_ld( j+16, xx1 );
        
        b1 = vec_ld( j   , yy1 );
        c1 = vec_ld( j+16, yy1 );

        b2 = vec_ld( j   , zz1 );
        c2 = vec_ld( j+16, zz1 );

        b3 = vec_sub( b0, a1 );
        c3 = vec_sub( c0, a1 );

        b4 = vec_sub( b1, a2 );
        c4 = vec_sub( c1, a2 );

        b5 = vec_sub( b2, a3 );
        c5 = vec_sub( c2, a3 );

        b0 = vec_madd( b3, b3, a6 );
        c0 = vec_madd( c3, c3, a6 );

        b0 = vec_madd( b4, b4, b0 );
        c0 = vec_madd( c4, c4, c0 );

        // Ну и так далее... за продолжением обращайтесь к автору. 
VIT ★★★
()
Ответ на: комментарий от doomer

Они уже сейчас никому не нужны ,а через n лет и подавно

Chord ★★★★★
()
Ответ на: комментарий от VIT

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

Просто нужен опытный в этой области специалист и все.

Да думаю каждый программист в итоге чем то подобным и занимается в той или иной мере при плотном вовлечении в тему. На любом языке.

Так что этот код не про уникальность какую то.

Меня в этом плане математики больше изумляют. Которые хорошо разбираютс именно в математике и применят ее по делу в программировании. Именно специалисты. Вот они создают действително волшебные вещи. Если не понимаешь, конечно, как это работает.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от VIT
  1. Доля такого кода очень мала.

  2. Такой код писать хоть под Intel, хоть под Эльбрус - сложность одинакова.

Вот для Эльбруса:

float *pX = x;
float *pY = y;
__m128 Sum = _mm_setzero_ps();
int num = n / 4;
for (int i = 0; i < num; ++i, pX += 4, pY += 4)
{
  Sum = _mm_add_ps(Sum, _mm_mul_ps(_mm_load_ps(pX), _mm_load_ps(pY)));
}
float result = _mm_extract_ps(Sum, 0) + _mm_extract_ps(Sum, 1) + _mm_extract_ps(Sum, 2) + _mm_extract_ps(Sum, 3);
monk ★★★★★
()
Ответ на: комментарий от LightDiver

Хотите посмотреть оригинал? Это три года работы специалиста, профессионально занимавшегося векторизацией кода на тот момент (2010-2012 годы). И код этот уникальный много чем, но мы с вами это здесь обсуждать не будем, для этого другие форумы есть. «Просто Си» - да не совсем просто. Грубо говоря это перенос вычислительной схемы с машины RoadRunner на машину Sequoia.

VIT ★★★
()
Ответ на: комментарий от monk

Доля такого кода очень мала.

И заказчиков для того кода тоже очень не много. Об чём и речь!

VIT ★★★
()
Ответ на: комментарий от VIT

Я довольно плохоо понимаю си, но даже мне примерно понятно о чем код. Я к тому, что сложной работа специалиста может показаться непосвященному и только по началу. И самому специалисту тоже, пока он не войдет плотно в работу. А вот потом все скатывается к банальщине и рутине - привыкаешь ко всему.

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

На самом деле это качается вообще любого специалиста. В любой профессии есть такое. Из мелких шагов собирается сложная картина, но мастеру она уже не сложная, он привык.

LightDiver ★★★★★
()
Ответ на: комментарий от monk

Ну что, обычный dot product. Мой код посложнее будет порядка на три. Там сильное взаимодействие считается.

VIT ★★★
()
Ответ на: комментарий от monk

А вообще есть рабочие станции на Risc-V?

Да я гуглил, процы есть. Я думал, тут как раньше Sparc в российской военке использовался, так же можно внедрить. А под общего назначения RISC в любом случае что-нибудь делать проще...

Shadow ★★★★★
()
Ответ на: комментарий от LightDiver

Меня в этом плане математики больше изумляют. Которые хорошо разбираютс именно в математике и применят ее по делу в программировании. Именно специалисты. Вот они создают действително волшебные вещи. Если не понимаешь, конечно, как это работает.

Ага. Типа такого (вычисление обратного квадратного корня)

float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;
    i  = 0x5f3759df - ( i >> 1 );
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );
    y  = y * ( threehalfs - ( x2 * y * y ) );
    return y;
}
monk ★★★★★
()
Ответ на: комментарий от LightDiver

А вот потом все скатывается к банальщине и рутине - привыкаешь ко всему.

Нет. Я вот тридцать лет этим занимаюсь и всё равно каждый день учусь, хотя здась надо мной по этому поводу всё время потешаются. Не привыкаешь. Каждый день что-то новое.

VIT ★★★
()
Ответ на: комментарий от monk

Вот! Вот об этом я и говорю! А представь вариант с таблично-интерполяционным подходом вычисления? Математика в программировании - величайшая вещь. А само программирование не такое сложное, как кажется.

LightDiver ★★★★★
()
Ответ на: комментарий от VIT

ридцать лет этим занимаюсь и всё равно каждый день учусь, хотя здась надо мной по этому поводу всё время потешаются. Не привыкаешь. Каждый день что-то

Ты привык к старому, но никто не говорит, что прекращаешь учиться новому. Но заметь, изученное и давно отработанное старое у тебя явно выходит на автомате.

LightDiver ★★★★★
()
Ответ на: комментарий от VIT

Но зачем?

Обычно ответ на этот вопрос: «потому что заказчик платит». А заказчик с помощью такого кода уже решает свои коммерческие или военные задачи.

monk ★★★★★
()
Ответ на: комментарий от monk

Круто конечно. Но сколько NOP'ов в средней инструкции на обычном, не оптимизированном коде? Как компилятор может предсказать кэш-мисс?

vazgen05 ★★★
()
Ответ на: комментарий от monk

Да, но у нас разные заказчики. Диаметрально разные.

VIT ★★★
()
Последнее исправление: VIT (всего исправлений: 1)
Ответ на: комментарий от Shadow

Интересно, а им тогда что мешает попасть в магазины? Понятно, почему нет Эльбрусов: очень дорого. Понятно, почему нет Лунсонов: КНР запрещает экспорт. Но что мешает тому же SiFive?

monk ★★★★★
()
Ответ на: комментарий от LightDiver

Но заметь, изученное и давно отработанное старое у тебя явно выходит на автомате.

Кстати мы сейчас с одним моим студентом (точнее с группой под его руководством) работаем над проектом формализации этого знания. Пока плохо получается.

VIT ★★★
()
Ответ на: комментарий от VIT

А без опыта никакое знание не приживется. Оно должно быть отработано многократно, осознано на уровне подсознания и полностью впитано. И только потом как прорывает и становится предельно понятным.

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

А как же ML? Шучу, шучу. «Мужики всё равно собирались выпить, но тут кто-то вспомнил про день шахтёра».

VIT ★★★
()
Ответ на: комментарий от vazgen05

Круто конечно. Но сколько NOP’ов в средней инструкции на обычном, не оптимизированном коде?

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

Или если вызвать что-то вроде x->f()->g()->k(). Тогда после возврата из функции может до 6 NOP быть (если нечего больше вычислять). Но если есть доступ к телу функций, тогда компилятор оптимизирует.

Как компилятор может предсказать кэш-мисс?

Предсказать не может. Сделать в этом случае полезную работу, в том числе спекулятивно, может. Есть rbranch = переход, если случился кэш-мисс.

monk ★★★★★
()
Ответ на: комментарий от vazgen05

Как компилятор может предсказать кэш-мисс?

А ещё есть инструкции для подкачки в кэш. Поэтому, если программа до обработки внешних данных выполняется хотя бы 200 тактов, всё нужное будет подкачано.

monk ★★★★★
()
Ответ на: комментарий от ugoday

В-четвёртых, от людей, которые в этом эксперименте участвовали (я читал у Горшенина): там большая часть претензий к комплектации ИНУЭМ-овского сервера, чем, собственно, к процессору (в формате «ручек нет», стартовую программу (типа BIOS) подшаманить-бы и вот это всё).

По производительности много чего решили буквально сразу после отчёта, например пересобрав и оптимально перенастроив java-машину. Да, в Сбере много кода на Джаве и на Эльбрус её, насколько я помню, пилили и пилят отдельная контора.

SkyMaverick ★★★★★
()
Ответ на: комментарий от vazgen05

Как компилятор может предсказать кэш-мисс?

Никак, как правило.

sabacs
()
Ответ на: комментарий от monk

А есть сравнительный анализ с IA64, какие ошибки IA64 были учтены? Ладно, пойду ИИ спрошу...

Говорит, что IA64 был сферическим конём в вакууме, на котором решили скакать. А у Эльбруса много костылей в хорошом смысле и сразу поднимался вопрос - «а как мы на нём...»

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 2)
Ответ на: комментарий от Shadow

А есть сравнительный анализ с IA64, какие ошибки IA64 были учтены?

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

https://www.usenix.org/legacy/event/usenix05/tech/general/gray/gray.pdf

VIT ★★★
()
Ответ на: комментарий от VIT

Были бы ресурсы, никто с компилятором возиться не стал бы.

Спорно. Компилятор дешевле, чем микропроцессорные навороты. Или «ресурсы» = готовая схема процессора уровня Intel Core i9?

Хотя Интел именно поэтому и профукал свой IA-64. С компилятором возиться не стал.

monk ★★★★★
()

Я вот удалил закладку этого сайта из браузера как и хабра

И снова здорово!

Dimez ★★★★★
()
Ответ на: комментарий от monk

про волшебный компилятор и другие сказки Бабаяна я с 90-х слышу
может он уже типичную, специально не заточенную задачу успешно запилить с производительностью, близкой к теоретической?

madcore ★★★★★
()
Ответ на: комментарий от VIT

Были бы ресурсы, никто с компилятором возиться не стал бы.

Так у нас выбора особо нет. Мы уже до 3нм техпроцесса дошли. В опытах Дэвиссона и Джермера длина волны де Бройля сопостовима и меньше этого транзистор не сделать. А вот предела сложности в разработке компиляторов мы не то чтоб не достигли, а не факт что таковой предел вообще существует.

ugoday ★★★★★
()
Ответ на: комментарий от sparkie

Ну хорошо наверное. Я вот все стесняюсь к ним сходить, так то можно биос писать…

А ведь они очень удобно размещаются, прямо рядом со мной.

aiqu6Ait ★★★★★
()
Последнее исправление: aiqu6Ait (всего исправлений: 1)
Ответ на: комментарий от monk

Спорно. Компилятор дешевле, чем микропроцессорные навороты.

Только до тех пор, пока страна перестаёт быть сырьевым придатком. По мере накопления капитала, самая большая ценность становятся люди, а не груда кремния. Посмотрите на метаморфозу Китая, который за 30 лет из страны с бесплатной рабочей силы превратился в лидера экономики с отнюдь не дешёвыми специалистами.

VIT ★★★
()
Ответ на: комментарий от ugoday

До сих пор технологию transistor all-around не освоила ни TSMC ни Intel ни Samsung. До сих пор никто из троих не делает трёхмерные структуры. Не торопитесь про 3 нм, хотя и 18A уже показаны.

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

VIT ★★★
()
Ответ на: комментарий от madcore

может он уже типичную, специально не заточенную задачу успешно запилить с производительностью, близкой к теоретической?

Для типичных задач выдаёт производительность выше Интела в операциях на такт. Для заточенных выдает выше в разы.

monk ★★★★★
()
Ответ на: комментарий от VIT

По мере накопления капитала, самая большая ценность становятся люди, а не груда кремния.

И для суперскаляра и для компилятора нужны люди. В первом случае они проектируют процессор, во втором компилятор. Интел идёт по пути суперскаляров исключительно из-за инерции: у него огромные наработки по процессорной архитектуре, которые он просто перетаскивает из версии в версию. А при переходе на VLIW все эти наработки становятся лишними как коробка передач и турбонаддув на электромобиле. Поэтому затраты на IA-64 получились гораздо больше, чем на очередной Core и Интел пошёл проторенной тропой.

А у нас нет «бесплатных» готовых блоков, поэтому для нас выгоднее спроектировать оптимизацию кода не в железе, а в компиляторе. Потенциально компилятор может делать всё, что может делать процессор, но видеть намного больше контекста. Например, если программа обрабатывает по очереди два независимых блока данных, компилятор вполне может воткнуть вычисление второго блока в незаполненные операции при вычислении первого блока. Спекулятивное выполнение суперскаляра настолько вперёд читать не может.

monk ★★★★★
()

Это на них чесали делать банкоматы? Вангую всю партию выкупит сбер для будущих ремонтов. :D

TheNewDragon
()
Ответ на: комментарий от monk

Я бы очень хотел поговорить с вами об этом через тридцать лет. Когда мы вели точно такие же разговоры в конце 80х, мы тоже били молоды и оптимистичны. Мы тоже думали, что все недостатки и неподъёмную сложность железа можно решить программно. Сейчас я знаю, что вера в компилятор утопична. Подождём, когды вы тоже набъёте свои шишки и придёте к своим заключениям, возможно опровергнув наши. К сожелению, я это уже не увижу. Это ничего, это эволюция.

VIT ★★★
()
Ответ на: комментарий от VIT

Не торопитесь про 3 нм, хотя и 18A уже показаны.

Мне спешить некуда, но сколько верёвочки не виться, а если электрон квантовой магией может телепортироваться сквозь транзистор, то всё, амба, приехали.

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

Вы это так говорите, как будто

ехнологию transistor all-around не освоила ни TSMC ни Intel ни Samsung. До сих пор никто из троих не делает трёхмерные структуры

это всё не те же самые человекоресурсы требует.

ugoday ★★★★★
()
Ответ на: комментарий от monk

Да, а если на современных интелах включить многочисленные защиты от уязвимостей, то Эльбрус стремительно начинает догонять trollface.jpg

Aceler ★★★★★
()
Ответ на: комментарий от LightDiver

Скорее всего, начнут работать быстрее. Но тут мы возвращаемся к вопросу, для кого делают эльбрусы, и там защиту отключать не любят.

Aceler ★★★★★
()
Ответ на: комментарий от ugoday

Мне спешить некуда, но сколько верёвочки не виться, а если электрон квантовой магией может телепортироваться сквозь транзистор, то всё, амба, приехали.

Вы это так говорите, как будто … это всё не те же самые человекоресурсы требует.

Я по долгу службы изучаю вычисления на фотонах, биологических структурах, химических реакциях, квантовых машинах. Много, что можно сделать, дело не в том что можно, а в том как это сделать выгодно в текущих экономических условиях. Пока мы живём, условия тоже меняются. То, что раньше было невыгодно может оказаться выгодным и наоборот.

VIT ★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)