История изменений
Исправление
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!