Профилирование кода с помощью вычислений nsight на Pascal завершается сбоем при использовании пулов памяти cuda
Я хотел бы использовать Nsight Compute для графических процессоров Pascal для профилирования программы, использующей пулы памяти CUDA. Я использую Linux, CUDA 11.5, драйвер 495.46. Nsight Compute — это версия 2019.5.0, последняя версия, поддерживающая Pascal.
Рассмотрим следующий пример программы
// nvcc -std=c++17 -arch=sm_61 -O3 main.cu -o main
#include <vector>
#include <memory>
#include <cassert>
#include <iostream>
__global__
void kernel(int* data){ data[0] = 1; };
int main(){
cudaMemPool_t pool{};
cudaMemPoolProps pool_props{};
pool_props.allocType = cudaMemAllocationTypePinned;
pool_props.handleTypes = cudaMemHandleTypePosixFileDescriptor;
pool_props.location.type = cudaMemLocationTypeDevice;
pool_props.location.id = 0;
auto status = cudaMemPoolCreate(&pool, &pool_props);
printf("%s\n", cudaGetErrorName(status));
auto stream = cudaStreamPerThread;
int data = 0;
int* d_data;
status = cudaMallocFromPoolAsync(&d_data, sizeof(int), pool, stream);
printf("%s\n", cudaGetErrorName(status));
kernel<<<1,1,0,stream>>>(d_data);
status = cudaGetLastError();
printf("%s\n", cudaGetErrorName(status));
status = cudaMemcpyAsync(&data, d_data, sizeof(int), cudaMemcpyDeviceToHost, stream);
printf("%s\n", cudaGetErrorName(status));
status = cudaFreeAsync(d_data, stream);
printf("%s\n", cudaGetErrorName(status));
status = cudaDeviceSynchronize();
printf("%s\n", cudaGetErrorName(status));
}
Без профилировщика работает нормально.
compute-sanitizer ./main
========= COMPUTE-SANITIZER
cudaSuccess
cudaSuccess
cudaSuccess
cudaSuccess
cudaSuccess
cudaSuccess
========= ERROR SUMMARY: 0 errors
При запуске с профилировщиком использование API пула возвращает ошибку
cudaErrorCallRequiresNewerDriver
/opt/nvidia/nsight-compute-2019.5/nv-nsight-cu-cli ./main
==PROF== Connected to process 155966 (main)
cudaErrorCallRequiresNewerDriver
cudaErrorCallRequiresNewerDriver
==PROF== Profiling "kernel" - 1: 0%....50%....100% - 1 pass
==ERROR== Error 0: UnknownError
cudaErrorCallRequiresNewerDriver
cudaErrorIllegalAddress
cudaErrorCallRequiresNewerDriver
cudaErrorIllegalAddress
==PROF== Disconnected from process 155966
==ERROR== An error occurred while trying to profile
Можно ли профилировать эту программу на Паскале с помощью вычислений nsight?