Я написал небольшую программу CUDA на моем macbook pro и теперь попробовал ее на своем Linux-боксе и получил разные результаты.CUDA разные результаты на разных платформах
Для обеспечения правильности, я написал модульные тесты: массив устройств, содержащий значения для проверки, копируется на устройство, а затем обратно. Хуже всего то, что он иногда возвращает разные значения в Linux (и очень странные), но на моем Mac он работает правильно каждый раз.
Я использую CUDA 3.1 на обеих платформах на Mac, однако мне приходится скомпилировать его 32bit, потому что 64-битная CUDA еще не поддерживается. Машина Linux и x64 с Ubuntu 10.04 (gcc 4.3.4) на Mac, версия gcc - i686-apple-darwin10-gcc-4.2.1.
Графические процессоры находятся на Mac GeForce 9600M GT (Compute возможностей 1,1) и на PC GeForce GTX 285 или (способность Compute 1,3) Telsa C1060
Я сделал несколько больше проверки и обеспечить, чтобы данные читаются полностью, но до сих пор я не мог идентифицировать проблему с любыми идеями, как выяснить, что вызывает проблемы?
Обновление Я не смог воспроизвести все, но этот пример иногда печатает только нули, а иногда и правильные результаты .. почему?
#include <stdio.h>
__device__ void testFunc(float *ptr)
{
*ptr = 3.4;
}
__global__ void testkernel(float* validation_data, int n)
{
for(int i=0; i<100; i++)
validation_data[i] = 666;
float *ptr;
testFunc(ptr);
validation_data[0] = *ptr;
}
int main()
{
int n = 100;
float *validation_data = (float*)malloc(sizeof(float)*100);
float *validation_data_d;
cudaMalloc((void**)&validation_data_d, sizeof(float)*n);
testkernel <<<1,1>>> (validation_data_d, n);
// Copy the array back again.
cudaMemcpy(validation_data, validation_data_d, sizeof(float)*n,
cudaMemcpyDeviceToHost);
for(int i=0; i<n; i++)
printf("%f ", validation_data[i]);
printf("\n");
}
не специфичен здесь делает его трудно ответить на то, что мне интересно, в основном, есть еще кто-нибудь сталкивались с подобными проблемами? – Nils
обычно бывает, что код, который, по вашему мнению, прав, действительно глючит. AFAIK Mac имеет некоторые ограничения выравнивания памяти, которые могут повлиять на макет памяти. Можете ли вы разместить часть кода? – fabrizioM
Комментарий Ditto fabrizioM, пожалуйста, напишите код, который вы используете! – Tom