3

我试图使用推力来减少一些数据,但在编译时我收到很多关于可能的数据转换丢失的警告

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/cuda_launch_config.h(338) : see reference to function template instantiation 'size_t thrust::system::cuda::detail::block_size_with_maximum_potential_occupancy<thrust::system::cuda::detail::cuda_launch_config_detail::util::zero_function<T>>(const thrust::system::cuda::detail::function_attributes_t &,const thrust::system::cuda::detail::device_properties_t &,UnaryFunction)' being compiled
1>          with
1>          [
1>              T=size_t,
1>              UnaryFunction=thrust::system::cuda::detail::cuda_launch_config_detail::util::zero_function<size_t>
1>          ]
1>C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/cuda_launch_config.h(147): warning C4267: 'return' : conversion from 'size_t' to 'int', possible loss of data
1>          C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/cuda_launch_config.h(159) : see reference to function template instantiation 'L thrust::system::cuda::detail::cuda_launch_config_detail::util::divide_ri<L,R>(const L,const R)' being compiled
1>          with
1>          [
1>              L=int,
1>              R=size_t
1>          ]
1>          C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/cuda_launch_config.h(272) : see reference to function template instantiation 'L thrust::system::cuda::detail::cuda_launch_config_detail::util::round_i<L,size_t>(const L,const R)' being compiled
1>          with
1>          [
1>              L=int,
1>              R=size_t
1>          ]

我知道这些是警告,但它们真的很烦人,有什么办法可以关闭这些吗?

4

2 回答 2

2

这是两年后,问题仍然存在。我已经弄清楚这里发生了什么,并有一个解决方案。

首先,重申问题。如果您创建一个全新的 CUDA 项目(我使用的是 CUDA 7.5 和 Visual Studio 2013)并简单地输入:

#include <thrust/device_vector.h>

int main()
{
    thrust::device_vector<int> test;
    return 0;
}

然后将项目切换到 64 位(将配置更改为 x64,这会将编译器更改为 64 位代码生成),您会从 Thrust 中收到几个警告,抱怨size_tint. 这些警告都来自 Thrustexecution_policy.hpp包含文件(至少在今天)。

在该文件中,有几种情况将类型size_type定义为int,然后用作size_t数据的等效值或返回值。这解释了警告。在 MSVC 64 位域中, asize_t是 a 大小的 2倍int

作为测试,我更改了以下几个实例:

typedef int size_type;

execution_policy.hpp

typedef size_t size_type;

所有的警告都消失了。

我现在将转到 Thrust github 项目并建议进行这样的更改。

希望这对某人有所帮助,这让我发疯了。

于 2016-07-03T17:59:20.550 回答
1

你可以使用#pragma warning (disable : 4267)我假设。但是,如果您没有令人信服的理由不这样做,我会改为修复代码。

size_tint不是一回事。现在可能对你有用的东西最终可能会在你不想被咬的地方咬你。例如,参见“为什么 size_t 很重要”

于 2013-08-12T14:50:51.990 回答