компиляция в GPU с использованием тяги (простые числа) - PullRequest
0 голосов
/ 05 июня 2018

У меня есть код, написанный на Thrust на языке C, но я не могу его скомпилировать, так как у меня нет GPU.Мой код должен рассчитывать первые 1000 простых чисел.Вот и все.Но проблема в том, что

1 - я не могу скомпилировать его, поскольку у меня нет графического процессора.

2 - Поскольку я не могу его скомпилировать, я не могу знать, действительно ли он вычисляет простые числа.

Вот мой код:

`struct prime{
_host_ _device_
    void operator()(long& x){
    bool result = true;
    long stop = ceil(sqrt((float)x));
    if(x%2!=0){
        for(int i = 3;i<stop;i+=2){
            if(x%i==0){
                result = false;
                break;
            };
        }
    }else{
        result = false;
    }
    if(!result)
        x = -1;
 }
};
void doTest(long gen){
  using namespace thrust;
  device_vector<long> tNum(gen);
  thrust::sequence(tNum.begin(),tNum.end());
}
int main(){
   doTest(1000);
   return 0;
}`

Может ли кто-нибудь помочь мне скомпилировать мой код и отобразить результат, а если он не работает правильно, то помочь мне исправить его?

1 Ответ

0 голосов
/ 17 июня 2018

Если у вас нет графического процессора, тогда используйте thrust::host_vector вместо thrust::device_vector.

Я очистил ваш код, и он работает на CPU следующим образом:

#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/sequence.h>

#include <iostream>


int main()
{
    thrust::host_vector<long> tNum(1000);
    thrust::sequence(std::begin(tNum), std::end(tNum));
    thrust::transform(std::cbegin(tNum), std::cend(tNum), std::begin(tNum), [](long x)
    {
        bool result = true;
        long stop = (long)std::ceil(std::sqrt((float)x));
        if (x % 2 != 0) {
            for (long i = 3; i < stop; i += 2) {
                if (x % i == 0) {
                    result = false;
                    break;
                };
            }
        } else {
            result = false;
        }
        if (!result) x = -1;
        return x;
    });
    for (const auto& element : tNum) if (element>0) std::cout << element << ", ";
    std::cout << std::endl;

    std::cin.ignore();
    return 0;
}
...