allendaicool / thrust

Automatically exported from code.google.com/p/thrust
Apache License 2.0
0 stars 0 forks source link

Compilation error in pair_scan.cu #276

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Please post a short code sample which reproduces the problem:
I tried to compile the pair_scan.cu file from thrust/testing dir and it give 
compilation error.

What is the expected output? What do you see instead?
I want an error free compilation as I have not added anything to the code.

What version of Thrust are you using? Which version of nvcc?  Which host
compiler?  On what operating system?
Iam using the current version of thrust on linux platform.

Please provide any additional information below.

Original issue reported on code.google.com by vinitha....@gmail.com on 12 Nov 2010 at 4:42

GoogleCodeExporter commented 9 years ago
/tmp/tmpxft_00004d6d_00000000-12_example.o: In function 
`VariableUnitTest<TestPairScan, unittest::type_list<char, short, int, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type> >::run()':
tmpxft_00004d6d_00000000-1_example.cudafe1.cpp:(.text._ZN16VariableUnitTestI12Te
stPairScanN8unittest9type_listIcsiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S
3_S3_S3_S3_S3_S3_EEE3runEv[VariableUnitTest<TestPairScan, 
unittest::type_list<char, short, int, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type> >::run()]+0x12): 
undefined reference to `get_test_sizes()'
/tmp/tmpxft_00004d6d_00000000-12_example.o: In function 
`VariableUnitTest<TestPairScan, unittest::type_list<char, short, int, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type> >::VariableUnitTest()':
tmpxft_00004d6d_00000000-1_example.cudafe1.cpp:(.text._ZN16VariableUnitTestI12Te
stPairScanN8unittest9type_listIcsiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S
3_S3_S3_S3_S3_S3_EEEC1Ev[VariableUnitTest<TestPairScan, 
unittest::type_list<char, short, int, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type> 
>::VariableUnitTest()]+0x2f): undefined reference to `UnitTest::UnitTest(char 
const*)'
collect2: ld returned 1 exit status
make: *** [all] Error 1

Original comment by vinitha....@gmail.com on 12 Nov 2010 at 5:15

GoogleCodeExporter commented 9 years ago
This is not a bug.  testframework.o must be linked against.

Original comment by jaredhoberock on 12 Nov 2010 at 5:43

GoogleCodeExporter commented 9 years ago
Could you please tell me what is testframework.o and how should it be linked? I 
did not require this to compile any other files?

Original comment by vinitha....@gmail.com on 12 Nov 2010 at 6:11

GoogleCodeExporter commented 9 years ago
Ok, i linked teatframework.h in the pair_scan code and now i get the following 
error

/tmp/tmpxft_00004fa0_00000000-12_example.o: In function 
`VariableUnitTest<TestPairScan, unittest::type_list<char, short, int, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type> >::run()':
tmpxft_00004fa0_00000000-1_example.cudafe1.cpp:(.text._ZN16VariableUnitTestI12Te
stPairScanN8unittest9type_listIcsiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S
3_S3_S3_S3_S3_S3_EEE3runEv[VariableUnitTest<TestPairScan, 
unittest::type_list<char, short, int, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type> >::run()]+0x12): 
undefined reference to `get_test_sizes()'
/tmp/tmpxft_00004fa0_00000000-12_example.o: In function 
`VariableUnitTest<TestPairScan, unittest::type_list<char, short, int, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type> >::VariableUnitTest()':
tmpxft_00004fa0_00000000-1_example.cudafe1.cpp:(.text._ZN16VariableUnitTestI12Te
stPairScanN8unittest9type_listIcsiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S
3_S3_S3_S3_S3_S3_EEEC1Ev[VariableUnitTest<TestPairScan, 
unittest::type_list<char, short, int, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type, 
unittest::null_type, unittest::null_type, unittest::null_type> 
>::VariableUnitTest()]+0x2f): undefined reference to `UnitTest::UnitTest(char 
const*)'
collect2: ld returned 1 exit status
make: *** [all] Error 1

Original comment by vinitha....@gmail.com on 12 Nov 2010 at 6:21

GoogleCodeExporter commented 9 years ago
My code is as follows:
#include <thrust/iterator/transform_iterator.h>
#include <thrust/iterator/counting_iterator.h>
#include <thrust/device_vector.h>
#include <thrust/reduce.h>
#include <thrust/functional.h>
#include <iostream>
#include <iterator>
#include <string>

#include <unittest/unittest.h>
#include <unittest/testframework.h>
#include <thrust/transform_scan.h>
#include <thrust/iterator/counting_iterator.h>
#include <thrust/iterator/iterator_traits.h>

#include <thrust/pair.h>
#include <thrust/transform.h>
#include <thrust/scan.h>

struct make_pair_functor
{
  template<typename T1, typename T2>
  __host__ __device__
    thrust::pair<T1,T2> operator()(const T1 &x, const T2 &y)
  {
    return thrust::make_pair(x,y);
  } // end operator()()
}; // end make_pair_functor

struct add_pairs
{
  template <typename Pair1, typename Pair2>
  __host__ __device__
    Pair1 operator()(const Pair1 &x, const Pair2 &y)
  {
    return thrust::make_pair(x.first + y.first, x.second + y.second);
  } // end operator()
}; // end add_pairs

template <typename T>
  struct TestPairScan
{
  void operator()(const size_t n)
  {
    typedef thrust::pair<T,T> P;

    thrust::host_vector<T>   h_p1 = unittest::random_integers<T>(n);
    thrust::host_vector<T>   h_p2 = unittest::random_integers<T>(n);
    thrust::host_vector<P>   h_pairs(n);
    thrust::host_vector<P>   h_output(n);

    // zip up pairs on the host
    thrust::transform(h_p1.begin(), h_p1.end(), h_p2.begin(), h_pairs.begin(), make_pair_functor());

    thrust::device_vector<T> d_p1 = h_p1;
    thrust::device_vector<T> d_p2 = h_p2;
    thrust::device_vector<P> d_pairs = h_pairs;
    thrust::device_vector<P> d_output(n);

    P init = thrust::make_pair(13,13);

  // scan with plus
    thrust::inclusive_scan(h_pairs.begin(), h_pairs.end(), h_output.begin(), add_pairs());
    thrust::inclusive_scan(d_pairs.begin(), d_pairs.end(), d_output.begin(), add_pairs());
    ASSERT_EQUAL_QUIET(h_output, d_output);

    thrust::exclusive_scan(h_pairs.begin(), h_pairs.end(), h_output.begin(), init, add_pairs());
    thrust::exclusive_scan(d_pairs.begin(), d_pairs.end(), d_output.begin(), init, add_pairs());
    ASSERT_EQUAL_QUIET(h_output, d_output);

    // scan with maximum (thrust issue #69)
    thrust::inclusive_scan(h_pairs.begin(), h_pairs.end(), h_output.begin(), thrust::maximum<P>());
    thrust::inclusive_scan(d_pairs.begin(), d_pairs.end(), d_output.begin(), thrust::maximum<P>());
    ASSERT_EQUAL_QUIET(h_output, d_output);

    thrust::exclusive_scan(h_pairs.begin(), h_pairs.end(), h_output.begin(), init, thrust::maximum<P>());
    thrust::exclusive_scan(d_pairs.begin(), d_pairs.end(), d_output.begin(), init, thrust::maximum<P>());
    ASSERT_EQUAL_QUIET(h_output, d_output);
  }
};
VariableUnitTest<TestPairScan, unittest::type_list<char,short,int> > 
TestPairScanInstance;

Original comment by vinitha....@gmail.com on 12 Nov 2010 at 6:26