LINUX.ORG.RU

История изменений

Исправление stevejobs, (текущая версия) :

всё это строго имхо, не кипятись так ;) Я пишу про СЕБЯ в первую очередь, рассказывать что делать другим людям - это плохо ;)

В то же мере что и Java - тоже замена ассемблеру.

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

Си тебе с этим не поможет. Только ассемблер.

ассемблер и Фортран! :3

ващет поможет, лол. Зачем люди приносят все эти кровавые жертвы, если бы их боги им не помогали?

Интеловский компилятор, pure C:

void add_floats(float *a, float *b, float *c, float *d, float *e, int n) {
 int i;
 #pragma simd
 for (i=0; i<n; i++){
  a[i] = a[i] + b[i] + c[i] + d[i] + e[i];
 } 
}
icl vect.c -nologo -Qvec-report2 vect.c 
  d:\git\cpptest\vect.c(4): (col. 3) remark: SIMD LOOP WAS VECTORIZED.

Майкрософтовский компилятор, параллелизация C++ по-умолчанию (но можно отключить):

int A[1000];
void test() {
#pragma loop(hint_parallel(0))
    for (int i=0; i<1000; ++i) {
        A[i] = A[i] + 1;
    }

    for (int i=1000; i<2000; ++i) {
        A[i] = A[i] + 1;
    }
}
cl d:\git\cpptest\par.cpp /O2 /Qpar /Qpar-report:2
--- Analyzing function: void __cdecl test(void)
d:\git\cpptest\par.cpp(4) : loop parallelized
d:\git\cpptest\par.cpp(4) : loop not parallelized due to reason '1008'

То же самое для векторизации: автоматом юзаются SSE2/4.2, AVX, AVX2, NEON, и отключается через #pragma loop(no_vector).

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

Как и 90% современных языков. И что?

Си к ним не относится, поэтому и спроса с него нет. C++ к ним относится, по крайней мере такова легенда.

Более того, C++ фанатики уже все уши прожужжали своей херней про «современный язык программирования», «идеальное средство для написания логики». Хочется вот просто взять и ударить в пятак!

Я правильно тебя понял? «Си это средство пропихивания ассемблерных вставок в Java»???

Ну почему же только в Java :)))

Высокоуровневые приложения должны писаться на высокоуровневых яыках, а нижняя платформа (в том числе «пропихивание аппаратных функций») делается уже на C/C++. Какая-то такая идея.

Например, если ты пишешь веб-приложение на PHP, ясно же что команда «положить в поток буковку» написана на Си. Чтобы добавить в PHP какую-то новую функцию - нужно вначале написать её на Си. Но упаси бог использовать эту функцию напрямую, без прослойки в виде PHP!

Исходная версия stevejobs, :

всё это строго имхо, не кипятись так ;) Я пишу про СЕБЯ в первую очередь, рассказывать что делать другим людям - это плохо ;)

В то же мере что и Java - тоже замена ассемблеру.

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

Си тебе с этим не поможет. Только ассемблер.

ващет поможет, лол. Зачем люди приносят все эти кровавые жертвы, если бы их боги им не помогали?

Интеловский компилятор, pure C:

void add_floats(float *a, float *b, float *c, float *d, float *e, int n) {
 int i;
 #pragma simd
 for (i=0; i<n; i++){
  a[i] = a[i] + b[i] + c[i] + d[i] + e[i];
 } 
}
icl vect.c -nologo -Qvec-report2 vect.c 
  d:\git\cpptest\vect.c(4): (col. 3) remark: SIMD LOOP WAS VECTORIZED.

Майкрософтовский компилятор, параллелизация C++ по-умолчанию (но можно отключить):

int A[1000];
void test() {
#pragma loop(hint_parallel(0))
    for (int i=0; i<1000; ++i) {
        A[i] = A[i] + 1;
    }

    for (int i=1000; i<2000; ++i) {
        A[i] = A[i] + 1;
    }
}
cl d:\git\cpptest\par.cpp /O2 /Qpar /Qpar-report:2
--- Analyzing function: void __cdecl test(void)
d:\git\cpptest\par.cpp(4) : loop parallelized
d:\git\cpptest\par.cpp(4) : loop not parallelized due to reason '1008'

То же самое для векторизации: автоматом юзаются SSE2/4.2, AVX, AVX2, NEON, и отключается через #pragma loop(no_vector).

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

Как и 90% современных языков. И что?

Си к ним не относится, поэтому и спроса с него нет. C++ к ним относится, по крайней мере такова легенда.

Более того, C++ фанатики уже все уши прожужжали своей херней про «современный язык программирования», «идеальное средство для написания логики». Хочется вот просто взять и ударить в пятак!

Я правильно тебя понял? «Си это средство пропихивания ассемблерных вставок в Java»???

Ну почему же только в Java :)))

Высокоуровневые приложения должны писаться на высокоуровневых яыках, а нижняя платформа (в том числе «пропихивание аппаратных функций») делается уже на C/C++. Какая-то такая идея.

Например, если ты пишешь веб-приложение на PHP, ясно же что команда «положить в поток буковку» написана на Си. Чтобы добавить в PHP какую-то новую функцию - нужно вначале написать её на Си. Но упаси бог использовать эту функцию напрямую, без прослойки в виде PHP!