Я новичок в C, и для большей части моих исследований мне не нужно было что-то более быстрое, чем python. Однако оказалось, что недавняя работа, которую я выполнял, требовала вычисления довольно больших векторов / матриц, и поэтому решение C + MPI могло бы быть подходящим.
С математической точки зрения задача очень проста. У меня много векторов размерности ~ 40k, и я хочу вычислить произведение Кронекера выбранных пар этих векторов, а затем суммировать эти произведения кронекера.
Вопрос в том, как это сделать эффективно? Что-то не так со следующей структурой кода, использованием циклов for или получением эффекта?
Функция kron
, описанная ниже, передает векторы A
и B
] длин vector_size
, и вычисляет их кронекеровское произведение, которое хранит в C
, матрице vector_size * vector_size
.
void kron(int *A, int *B, int *C, int vector_size) {
int i,j;
for(i = 0; i < vector_size; i++) {
for (j = 0; j < vector_size; j++) {
C[i*vector_size+j] = A[i] * B[j];
}
}
return;
}
Мне это кажется прекрасным, и, конечно (если я не допустил глупой синтаксической ошибки), дает правильный результат, но у меня есть скрытое подозрение, что встроенные циклы for не оптимальны. Если там' По-другому я должен поступить так, пожалуйста, дайте мне знать. Предложения приветствуются.
Благодарю вас за терпение и любые советы, которые у вас могут быть. Еще раз, я очень неопытен в C, но поиск в Google не принес мне большого удовольствия в ответ на этот запрос.