Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 27.01.2021
Сообщений: 8

Векторное сложение массивов

04.02.2022, 14:29. Показов 1381. Ответов 4

Студворк — интернет-сервис помощи студентам
Добрый день. Решил освоить MCStudio4 под Centos 7. Долго мучался, чтобы понять как работает эта студия. Попробовал простую математику посчитать, всё получилось. А как к масивам подобрался, появилось куча проблем. Код, который я прикрепил является примером предлагаемым самой студией, для ознакомления, только проблема в том, что там куча ошибок было. Сейчас осталось только одна проблема на 67(63) строчке kernel_vector_add(array1, array2, dst, ARRAY_LENGTH);
ошибка undefined reference to `kernel_vector_add'. В консоли выдаёт следующую информацию:

Building target: s003-excutable
Invoking: GCC C Linker
gcc -o "s003-excutable" ./s003-excutable.o
./s003-excutable.o: In function `main':
/home/master/workspace/s003-excutable/Debug/../s003-excutable.c:67: undefined reference to `kernel_vector_add'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
make: *** [s003-excutable] Ошибка 1
"make all" terminated with exit code 2. Build might be incomplete.


Прошу помочь решить данную проблему.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <stdlib.h>
#include <stdio.h>
 
 
#define COLS_COUNT 16
#define ARRAY_LENGTH 256
 
/**
 * Печатает массив в stdout
 * @param array - указатель на массив
 * @param length - длина массива
 */
 
 
void print_array(unsigned char *array, unsigned int length) {
    for (int i = 0; i < length;) {
        do {
 
            printf("%4.3d", array[i++]);
        } while (i % COLS_COUNT);
 
        printf("\n");
    }
}
 
/**
 * Инициализирует массив псевдослучайными числами
 * @param array - указатель на массив
 * @param length - длина массива
 */
void init_array(unsigned char *array, unsigned int length) {
    for (int i = 0; i < length; ++i) {
        array[i] = (rand() + 1) & 0xff;
    }
}
 
/**
 * Вычисляет векторную сумму двух массивов
 * @param array1 - указатель на массив 1
 * @param array2 - указатель на массив 2
 * @param dst - указатель на массив с результатами сложения
 * @param length - длина массива
 */
void kernel_vector_add(unsigned char *array1, unsigned char *array2, unsigned char *dst, unsigned int length);
 
int main() {
    unsigned char array1[ARRAY_LENGTH];
    unsigned char array2[ARRAY_LENGTH];
    unsigned char dst[ARRAY_LENGTH]= {0};
    printf("Sample 3: Vector adding arrays\n");
 
    //Инициализируем массивы псевдослучайными числами
    init_array(array1, sizeof(array1));
    init_array(array2, sizeof(array2));
 
    //Выводим исходные массивы
    printf("Source array 1:\n");
    print_array(array1, sizeof(array1));
    printf("Source array 2:\n");
    print_array(array2, sizeof(array2));
 
    //Вызываем вычислительный кернел
    kernel_vector_add(array1, array2, dst, ARRAY_LENGTH);
 
    //Выводим результат
    printf("Destination array:\n");
    print_array(dst, sizeof(dst));
 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.02.2022, 14:29
Ответы с готовыми решениями:

Сложение двух массивов
Напишите функцию с именем addarray(), принимающую два массива в качестве аргументов одинаковой длины. Функция должна складывать...

Сложение двух массивов
Нужно написать функцию для поэлементного сложения двух массивов длины n(не больше 100) целых чисел с выводом получившегося массива на...

Сложение двух массивов
Добрый день, помогите пожалуйста. Задача: Сложить 2 одномерных массива, и вывести их. Я написал, но что-то не то выводит. #include...

4
13 / 13 / 0
Регистрация: 21.10.2011
Сообщений: 58
06.02.2022, 17:18
А где у вас описана функция kernel_vector_add? Как по вашему линковщик должен собрать вашу программу?
0
0 / 0 / 0
Регистрация: 27.01.2021
Сообщений: 8
09.02.2022, 15:08  [ТС]
Вот, только проблема в том, что тело функции написано в отдельном файле kernel-vector-add-array.s и линкер его не видет.



C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
 ASM процедура, вычисляющая векторное сложение массивов
 */
 
; Объявление глобальной метки  _kernel_vector_add, которая указывает на процедуру  _kernel_vector_add
.globl _kernel_vector_add
 
.text
; Процедура  _kernel_vector_add
; Input:
; - r0: array1 - указатель на первый массив
; - r1: array2 - указатель на второй массив
; - r3: length - длинна массивов
; Output:
; - r2: dst - указатель на массив c результатами сложения
_kernel_vector_add:
    ; Сохраняем используемые векторные регистры на стек
    alframe 0xc8
    vst v0, (r13)
    vst v1, (r13 + 0x40)
    vst v2, (r13 + 0x80)
 
    ; Вычисляем количество итераций цикла (length / 64)
    lsrl  6, r3, r3
 
    ; Вычислительный цикл
    do r3, 1f
        ; Загружаем данные 2x64 byte
        vld (r0)+, v0   vld (r1)+, v1
        ; Векторно складываем загруженные данные 64х1 unsigned byte, с сатурацией
        vaddbu.sat v0, v1, v2
    1:
        ; Сохраняем результат
        vst v2, (r2)+
 
    ; Восстанавливаем сохраненные на стек регистры и выходим из процедуры
    vld (r13), v0
    vld (r13+0x40), v1
    vld (r13+0x80), v2
 
    deframer
0
13 / 13 / 0
Регистрация: 21.10.2011
Сообщений: 58
10.02.2022, 22:43
А почему вы его (файл на ассемблере) не упоминаете при сборке? Потом, вероятно функцию нужно определить как extern, так как функция определена во внешнем файле
0
7 / 6 / 1
Регистрация: 26.12.2019
Сообщений: 71
04.04.2022, 23:56
И метка у вас _kernel_vector_add, а функцию вы декларируете kernel_vector_add. Где подчеркивание ? И надеюсь вы вкурсе, что ассемблерный код у вас не x86 ? Спросил так, на всякий случай
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2022, 23:56
Помогаю со студенческими работами здесь

CUDA: сложение двумерных массивов
Я новичок, как в CUDA, так и в С++. Задача - сложить два одинаковых массива, число строк и столбцов задается с клавиатуры. Я чувствую,...

Сложение двух двумерных массивов
Нужно написать программу, которая складывает двумерные массивы. Количество матриц (num) и их размер (cols, rows) задаются пользователем.

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

Решить векторное сложение 2 векторов
Помогите пожалуйста решить векторное сложение 2 векторов на php . Не могу справиться, нужно чтобы пользователь вводил данные в форму и...

Векторное сложение двух контуров
Мне нужно нарисовать контура и определить направление обхода координат. Нужно считать данные из txt файла, координаты в файле заданы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru