0

голосов
0

ответ
2

Просмотры

Установка встраиваемая существенно libnuma-DEV для cyclictest в настраиваемой RedHat Linux?

Так как я хочу, чтобы проверить производительность настроенного RedHat Linux (RTOS) с набором инструментов к.т.-тест, я должен установить встроенный существенно и libnuma-DEV первый в соответствии с инструкцией по эксплуатации. Тем не менее, настроенный RedHat RT Linux не зарегистрирован в RHN, так что я не могу установить две библиотеки RT-тест опирается на с помощью команды ня. Хорошей новостью является то, что аппарат находится в моей руке, и я знаю его аппаратную конфигурацию и его версию Linux ядра. Итак, мой вопрос, как я могу установить сборки заменимых и libnuma-DEV в автономном режиме?
foool
1

голосов
1

ответ
611

Просмотры

Why 64-bits aligned XOR do not run faster than 32-bits aligned XOR?

I want to test the speed of two block of memmory, and I did a experiment in a 64 bits machine(4M cache), and XOR two region of memory with 32-bits aligned and 64-bits aligned respectively.I thought the 64-bits aligned region XOR counld much faster than 32-bits aligned region XOR, but the speed of two types of XOR are quiet the same. code: void region_xor_w32( unsigned char *r1, /* Region 1 */ unsigned char *r2, /* Region 2 */ unsigned char *r3, /* Sum region */ int nbytes) /* Number of bytes in region */ { uint32_t *l1; uint32_t *l2; uint32_t *l3; uint32_t *ltop; unsigned char *ctop; ctop = r1 + nbytes; ltop = (uint32_t *) ctop; l1 = (uint32_t *) r1; l2 = (uint32_t *) r2; l3 = (uint32_t *) r3; while (l1 < ltop) { *l3 = ((*l1) ^ (*l2)); l1++; l2++; l3++; } } void region_xor_w64( unsigned char *r1, /* Region 1 */ unsigned char *r2, /* Region 2 */ unsigned char *r3, /* Sum region */ int nbytes) /* Number of bytes in region */ { uint64_t *l1; uint64_t *l2; uint64_t *l3; uint64_t *ltop; unsigned char *ctop; ctop = r1 + nbytes; ltop = (uint64_t *) ctop; l1 = (uint64_t *) r1; l2 = (uint64_t *) r2; l3 = (uint64_t *) r3; while (l1 < ltop) { *l3 = ((*l1) ^ (*l2)); l1++; l2++; l3++; } } Result:
foool
1

голосов
1

ответ
187

Просмотры

Столбики ошибок смещения в Multiplot

data.txt test1 файла 10 1 test2 10 2 12 3 test3 .plt установить терминал приписку EPS сплошного цвета расширенный "Helvetica" 20 Набора выход "io1.eps" установить размер 1,1 набора макет Multiplot 1,2 набора стили гистограммы errorbars разрыва 1 Lw 1 заголовок TextColor -1 Lt установить данные типа гистограммы установить lmargin на экране 0,1; установить rmargin на экран 0.45 набор xrange [-0.5: 1.5] установлено YRange [0:15] сюжет './data.txt' каждый ::: 0 :: 0 с помощью 2: 3 названием "ааа" FC "# RgB 00ff00" фс рисунок 9 набора lmargin на экране 0,55; установить rmargin на экране 0.9 множество xrange [-0.5: 1.5] множество YRange [0:15] Участок './data.txt' каждого ::: 1 :: 1, с использованием 2: 3 названия "БББ" FC "# RgB f0f000" фс рисунок 3 результатов Multiplot переменных не установлены Проблема Существует разрыв между колонной среднего значения и баром ошибки во втором подфигуров, как это исправить?
foool
6

голосов
1

ответ
1.2k

Просмотры

Скорость тетсра () в значительной степени зависит от различных способов таНоса ()

Я написал программу, чтобы проверить скорость тетсра (). Однако, как память сильно выделяется влияет на скорость. КОД # include # include # include силы основных (INT ARGC, символ * ARGV []) {неподписанные символ * pbuff_1; неподписанные символ * pbuff_2; неподписанные длинные Iters = 1000 * 1000; INT Тип = atoi (ARGV [1]); INT buff_size = atoi (ARGV [2]) * 1024; если (тип == 1) {pbuff_1 = (недействительный *) таНос (2 * buff_size); pbuff_2 = pbuff_1 + buff_size; } Еще {pbuff_1 = (недействительными *) таНос (buff_size); pbuff_2 = (недействительными *) таНос (buff_size); } Для (INT I = 0; г <Iters; ++ я) {тетсру (pbuff_2, pbuff_1, buff_size); } Если (тип == 1) {свободный (pbuff_1); } Еще {свободный (pbuff_1); бесплатно (pbuff_2); }} ОС Linux-2.6.35 и компилятор GCC-4.4.5 с опциями "-std = c99 -O3" , Результаты на моем компьютере (тетср 4KB итерация 1 миллион раз): время ./test.test 1 4 реальных 0m0.128s пользователя 0m0.120s SYS 0m0.000s время ./test.test 0 4 реального 0m0.422s 0m0.420s пользователей SYS 0m0.000s Этот вопрос связан с предыдущим вопросом: Почему скорость тетсра () резко падать каждый 4KB? UPDATE Причина связана с GCC компилятором, и я составил и запустить эту программу с различными версиями GCC: GCC версии -------- -------- 4.1.3 4.4.5 ---- ---- 4.6.3 Время Б (1) ----- 0m0.183s ---- 0m0.128s ---- 0m0.110s Время Б (0) ----- 0m1.788s --- -0m0.422s ---- 0m0.108s кажется GCC становится умнее. 000s Этот вопрос связан с предыдущим вопросом: Почему скорость тетсра () резко падать каждый 4KB? UPDATE Причина связана с GCC компилятором, и я составил и запустить эту программу с различными версиями GCC: GCC версии -------- -------- 4.1.3 4.4.5 ---- ---- 4.6.3 Время Б (1) ----- 0m0.183s ---- 0m0.128s ---- 0m0.110s Время Б (0) ----- 0m1.788s --- -0m0.422s ---- 0m0.108s кажется GCC становится умнее. 000s Этот вопрос связан с предыдущим вопросом: Почему скорость тетсра () резко падать каждый 4KB? UPDATE Причина связана с GCC компилятором, и я составил и запустить эту программу с различными версиями GCC: GCC версии -------- -------- 4.1.3 4.4.5 ---- ---- 4.6.3 Время Б (1) ----- 0m0.183s ---- 0m0.128s ---- 0m0.110s Время Б (0) ----- 0m1.788s --- -0m0.422s ---- 0m0.108s кажется GCC становится умнее.
foool
49

голосов
3

ответ
18.3k

Просмотры

Why does the speed of memcpy() drop dramatically every 4KB?

I tested the speed of memcpy() noticing the speed drops dramatically at i*4KB. The result is as follow: the Y-axis is the speed(MB/second) and the X-axis is the size of buffer for memcpy(), increasing from 1KB to 2MB. Subfigure 2 and Subfigure 3 detail the part of 1KB-150KB and 1KB-32KB. Environment: CPU : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz OS : 2.6.35-22-generic #33-Ubuntu GCC compiler flags : -O3 -msse4 -DINTEL_SSE4 -Wall -std=c99 I guess it must be related to caches, but I can't find a reason from the following cache-unfriendly cases: Why is my program slow when looping over exactly 8192 elements? Why is transposing a matrix of 512x512 much slower than transposing a matrix of 513x513? Since the performance degradation of these two cases are caused by unfriendly loops which read scattered bytes into the cache, wasting the rest of the space of a cache line. Here is my code: void memcpy_speed(unsigned long buf_size, unsigned long iters){ struct timeval start, end; unsigned char * pbuff_1; unsigned char * pbuff_2; pbuff_1 = malloc(buf_size); pbuff_2 = malloc(buf_size); gettimeofday(&start, NULL); for(int i = 0; i < iters; ++i){ memcpy(pbuff_2, pbuff_1, buf_size); } gettimeofday(&end, NULL); printf("%5.3f\n", ((buf_size*iters)/(1.024*1.024))/((end.tv_sec - \ start.tv_sec)*1000*1000+(end.tv_usec - start.tv_usec))); free(pbuff_1); free(pbuff_2); } UPDATE Considering suggestions from @usr, @ChrisW and @Leeor, I redid the test more precisely and the graph below shows the results. The buffer size is from 26KB to 38KB, and I tested it every other 64B(26KB, 26KB+64B, 26KB+128B, ......, 38KB). Each test loops 100,000 times in about 0.15 second. The interesting thing is the drop not only occurs exactly in 4KB boundary, but also comes out in 4*i+2 KB, with a much less falling amplitude. PS @Leeor offered a way to fill the drop, adding a 2KB dummy buffer between pbuff_1 and pbuff_2. It works, but I am not sure about Leeor's explanation.
foool
4

голосов
1

ответ
2.4k

Просмотры

How can I use SIMD to accelerate XOR two blocks of memory?

Я хочу XOR двух блоков памяти как можно быстрее, как я могу использовать SIMD, чтобы ускорить его? Мой исходный код ниже: аннулируются region_xor_w64 (неподписанные символ * r1, / * Регион 1 * / неподписанные символ * r2, / * Регион 2 * / INT-байт) / * Количество байт в области * / {uint64_t * l1; uint64_t * l2; uint64_t * LTOP; неподписанные символ * ctop; ctop = R1 + число-байт; LTOP = (uint64_t *) ctop; l1 = (uint64_t *) г1; l2 = (uint64_t *) г2; в то время как (l1 <LTOP) {* 2 = ((* l1) ^ (* l2)); l1 ++; l2 ++; }} Я написал один сам, но немного скорость увеличилась. недействительными region_xor_sse (неподписанный символ * ДСТ, неподписанный символ * SRC, Int block_size) {Const __m128i * wrd_ptr = (__m128i *) SRC; Const __m128i * wrd_end = (__m128i *) (SRC + block_size); __m128i * dst_ptr = (__m128i *) ДСТ; делать {__m128i XMM1 = _mm_load_si128 (wrd_ptr); __m128i xmm2 = _mm_load_si128 (dst_ptr); xmm2 = _mm_xor_si128 (XMM1, xmm2); _mm_store_si128 (dst_ptr, xmm2); ++ dst_ptr; ++ wrd_ptr; } В то время как (wrd_ptr <wrd_end); }
foool
3

голосов
3

ответ
200

Просмотры

A ++ Класс-функция C

Простой файл C ++ и класс TT имеет два метода. # include # include # include используя патезрасе; класс TT {общественности: TT (Const строки и строка); templateT Read (сопзЬ строку & ключ) сопзЬ; templateT чтения (Const строка & ключ, сопзЬ Т & значение) Const; }; TT :: TT (сопзЬ строку & Обл) {соиЬ
foool
3

голосов
2

ответ
1.6k

Просмотры

Различия между OPC и ДДС?

Я хочу знать разницу между OPC (Open Platform Communication) и ДДС (Service Распределение данных). Мое понимание этих двух основ является: Связь промежуточное программное более машин для упрощения сложного сетевого программирования. Оба из двух они используются для передачи программ более физически отдельных машин путем передачи сообщений. Они принимают модель клиент-сервер для связи, как сокет TCP / IP, но они могут обмениваться данными в нескольких 2-мульти образом. Кроме того, DDS часто используется в критической системе в качестве самолетов и военных кораблей. Если есть какое-либо недоразумение, или вы знаете, некоторые различия в них, пожалуйста, дайте мне знать.
foool