Я довольно новичок в 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;
}
Мне кажется, это нормально, и, конечно, (если я не допустил какой-то глупой синтаксической ошибки) получаю правильный результат, но у меня есть подозрение, что встроенные для циклов не оптимальны. Если есть другой способ, которым я должен идти об этом, пожалуйста, дайте мне знать. Предложения приветствуются.
Я благодарю вас за терпение и за любые советы, которые вы можете иметь. Еще раз, я очень неопытен с C, но поиск в Google принес мне немного радости для этого запроса.