Я разработал два ядра CUDA. Один - это ядро, связанное с памятью, а другое - связанное с вычислением. Ядра, сначала были оптимизированы на Tesla K40, и сейчас я выполняю тест производительности на Tesla K40 и Tesla K80, чтобы сравнить их результаты. Тем не менее, я действительно смущен, потому что я получаю почти такую же производительность на обеих платах, в то время как K80 обеспечивает почти вдвое большую теоретическую пропускную способность и максимальную производительность DP. Я также тестировал с различным количеством потоков на блок, но снова не видел ощутимого улучшения производительности на Tesla K80 (около 2%) по сравнению с Tesla K40.Я получаю почти такую же производительность как на Tesla K40, так и на Tesla K80
компилировать код, используя следующие флаги:
На Tesla K40:
nvcc --cudart static --relocatable-device-code=false -gencode arch=compute_35,code=compute_35 -gencode arch=compute_35,code=sm_35 -link -o "test"
На Tesla K80:
nvcc --cudart static --relocatable-device-code=false -gencode arch=compute_37,code=compute_37 -gencode arch=compute_37,code=sm_37 -link -o "test"
Теоретически я должен получить более высокую производительность на Tesla K80, но я не знаю, почему это не работает.
Спасибо за любой ответ или комментарий!
Итак, K80 будет эффективен только для кода с несколькими GPU, не так ли? Мой код - это один графический процессор, который выполняется вторым ядром после завершения первого запуска ядра. – Siamak
Правильно. В качестве тривиального теста вы можете запустить две независимые операции гемма, используя CUBLAS. Если вы запустили их на одном K40, можно было бы побежать за другим, скорее всего. Если вы запускаете их на одном K80, вы можете запускать их на двух отдельных графических процессорах на K80, поэтому каждый из них может работать одновременно, и он должен занимать примерно половину длины, чем тест K40. –