Синхронизация Cuda 4 между GPU

Кто-нибудь успешно протестировал эту функцию на Cuda4? Кажется, я не могу заставить его работать правильно, не уверен, что это ошибка в моем коде или функция еще не полностью реализована.

Например, я хочу сделать вызов ядра после копирования памяти с 1 GPU на другой. Поток 0, mem0 создается на gpu0, поток 1, mem1 создается на gpu1. Оба Ферми Тесла (C2070)

cudaMemcpyAsync( mem1, mem0, size, cudaMemcpyDefault, stream0 );
cudaEventRecord(P2Pevent, stream0);

cudaStreamWaitEvent(stream1, P2Pevent, 0);
cudaKernel<<<block,thread,0,stream1>>>(mem1);

Иногда кажется, что память еще не готова для ядра, поэтому результат неверный. Если я добавлю cudaDeviceSynchronize на Gpu0, все будет работать нормально.

Спасибо


person w00d    schedule 04.04.2011    source источник
comment
Вам нужно использовать cudaMemcpyPeerAsync для прямых копий памяти между GPU. И оба графических процессора должны поддерживать одноранговый доступ, который в настоящее время поддерживается только на картах Fermi Telsa.   -  person talonmies    schedule 04.04.2011
comment
@talonmies Перед этим я включаю PeerAccess, чтобы напрямую использовать cudaMemcpyAsync. Так что копирование точно работает, вот только не могу синхронизироваться на другом GPU. (как я уже сказал, обе они являются картой Ферми)   -  person w00d    schedule 04.04.2011
comment
Вы ожидаете P2Pevent в потоке 1, но записали его в потоке 0. Это опечатка?   -  person Jonas Bötel    schedule 04.04.2011
comment
у вас есть карта TESLA или только 480 карт Fermi? эта операция работает только с платами $$$ TESLA.   -  person fabrizioM    schedule 04.04.2011
comment
@fabrizio: брат Ферми Тесла, я еще раз подтверждаю, что P2P работает   -  person w00d    schedule 05.04.2011
comment
@LumpN: Итак, я записываю поток 0 в P2PEvent, а поток 1 ожидает его завершения. Имеет ли это смысл ?   -  person w00d    schedule 05.04.2011
comment
@iKid, Fermi != Fermi Tesla, BRO. Проверяете ли вы возвращаемые ошибки при каждом вызове API?   -  person fabrizioM    schedule 05.04.2011
comment
@fabrizioM извините, я действительно не хочу поднимать здесь шумиху, но с самого начала я имею в виду, что сам P2P работал правильно, потому что, если я удалю все вызовы ядра позже, результат будет во втором графическом процессоре. Единственная проблема в том, что я не могу синхронизировать его даже с другими. Я проверил, ошибки нет. Если у вас это работает, дайте мне знать, мне нужно будет проверить свою программу.   -  person w00d    schedule 05.04.2011
comment
@iKid, работает ли это, если вы поместите NULL в качестве потока? Я не могу воспроизвести, потому что у меня нет двух карт Fermi Tesla :)   -  person fabrizioM    schedule 05.04.2011


Ответы (1)


Это ошибка в моем коде! Работает корректно Спасибо ребята

person w00d    schedule 05.04.2011