Есть несколько вопросов похожих к этому, но в данном случае это немного странно; NVCC 3.1 это не нравится, но 3.2 и 4.0RC нравится;
float xtmp[MAT1];
for (i=0; i<MAT1; i++){
xtmp[i]=x[p[i]]; //value that should be here
}
Где p передается по ссылке на функцию (int *p), поступающую из...
int p_pivot[MAT1],q_pivot[MAT1];
Чтобы добавить немного контекста, прежде чем p попадет в «верхнюю» функцию, они заполняются (для ясности я вырезаю столько нерелевантного кода, сколько могу)
...
for (i=0;i<MAT1;i++){
...
p_pivot[i]=q_pivot[i]=i
...
}
...
Кроме того, единственными операциями на своде являются трехэтапные свопы с целочисленными временными значениями.
После того, как все это p_pivot передается в «верхнюю» функцию с помощью (&p_pivot[0])
Для тех, кто ищет более подробную информацию, код здесь и единственное изменение, которое необходимо для переключения между 3.2/ 4.0 на более раннюю версию — изменить cudaDeviceSynchronise(); в cudaThreadSynchronize();. Это мой грязный грязный экспериментальный код, поэтому, пожалуйста, не судите меня! :D
Как уже отмечалось, все вышеперечисленное отлично работает в более высоких версиях NVCC, и я работаю над тем, чтобы установить их на рассматриваемую машину, но мне было бы интересно посмотреть, что мне не хватает.
Это должно быть индексирование поиска в массиве, которое вызывает проблему, но я не понимаю, почему?