пользовательский оператор быстрого сравнения тяги CUDA

Я оцениваю CUDA и в настоящее время использую библиотеку Thrust для сортировки чисел.

Я хотел бы создать свой собственный компаратор для thrust :: sort, но он значительно замедляется! Я создал свой собственныйМеньше реализация путем простого копирования кода изfunctional.h, Однако, похоже, он скомпилирован как-то иначе и работает очень медленно.

компаратор по умолчанию: thrust :: less () -94Мизмой собственный компаратор: less () -906Миз

Я использую Visual Studio 2010. Что мне нужно сделать, чтобы получить ту же производительность, что и в варианте 1?

Полный код:

#include <stdio.h>

#include <cuda.h>

#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/generate.h>
#include <thrust/sort.h>

int myRand()
{
        static int counter = 0;
        if ( counter++ % 10000 == 0 )
                srand(time(NULL)+counter);
        return (rand()<<16) | rand();
}

template<typename T>
struct less : public thrust::binary_function<T,T,bool>
{
  __host__ __device__ bool operator()(const T &lhs, const T &rhs) const {
     return lhs < rhs;
  }
}; 

int main()
{
    thrust::host_vector<int> h_vec(10 * 1000 * 1000);
    thrust::generate(h_vec.begin(), h_vec.end(), myRand);

    thrust::device_vector<int> d_vec = h_vec;

    int clc = clock();
    thrust::sort(d_vec.begin(), d_vec.end(), less<int>());
    printf("%dms\n", (clock()-clc) * 1000 / CLOCKS_PER_SEC);

    return 0;
}

Ответы на вопрос(1)

Ваш ответ на вопрос